vue2,实现不同分辨率下高度不同

文章讲述了在使用ElementUI的el-table组件时,如何根据浏览器窗口分辨率的变化动态调整table的高度,通过在mounted生命周期函数中监听窗口尺寸并设置height属性来实现响应式设计。

问题:使用el-table组件时,分辨率不同下表格显示有问题,这时候需要把el-table的height属性设置为动态的,

data中定义


 data() {
    return {
   windowHeight: "",
}}

实时监听浏览器窗口分辨率变化,因为监听的是浏览器的窗口变化事件所以最好写在mounted周期里

  mounted() {
    // 实时监听页面宽度变化
    this.watchScreenHeight()
    window.onresize = () => {
      return (() => {
        this.watchScreenHeight()
      })()
    }
  },

methods:{
    watchScreenHeight() {
      // console.log(document.body.clientWidth, "页面宽度");
      if (document.body.clientWidth <= 1280 && document.body.clientWidth > 1100) {
        this.windowHeight = "83%"
      }
      if (document.body.clientWidth > 1300 && document.body.clientWidth < 2500) {
        this.windowHeight = "90%"
      }
      if (document.body.clientWidth > 2510) {
        this.windowHeight = "92%"
      }
    },
}

document.body.clientWidth是计算浏览器的可视宽度

### Vue3 中实现针对不同分辨率的自适应布局 在 Vue3 项目中,可以通过多种方法实现针对不同分辨率的自适应布局。以下是几种常用的技术及其具体实现: #### 1. **媒体查询 (Media Queries)** 通过 CSS 的 `@media` 规则,可以根据设备的不同特性(如宽度、高度分辨率等)应用不同的样式。 ```css /* 定义不同屏幕尺寸下的样式 */ @media (max-width: 768px) { body { font-size: 14px; } } @media (min-width: 769px) and (max-width: 1024px) { body { font-size: 16px; } } @media (min-width: 1025px) { body { font-size: 18px; } } ``` 这种方法简单易用,适用于大多数基本需求[^2]。 --- #### 2. **Vue3 响应式 API 动态监听窗口大小** 利用 Vue3 的组合式 API (`Composition API`) 和 JavaScript 的事件监听器,可以动态获取窗口大小并更新组件的状态。 ```javascript // 实现动态监听窗口大小的功能 import { ref, onMounted, onUnmounted } from 'vue'; export function useWindowResize() { const screenWidth = ref(window.innerWidth); const screenHeight = ref(window.innerHeight); const handleResize = () => { screenWidth.value = window.innerWidth; screenHeight.value = window.innerHeight; }; onMounted(() => window.addEventListener('resize', handleResize)); onUnmounted(() => window.removeEventListener('resize', handleResize)); return { screenWidth, screenHeight }; } ``` 在模板中使用条件渲染来切换组件: ```html <template> <div> <!-- 屏幕宽度大于等于 768px 显示 DesktopHeader --> <DesktopHeader v-if="screenWidth >= 768" /> <!-- 否则显示 MobileHeader --> <MobileHeader v-else /> </div> </template> <script> import { useWindowResize } from './useWindowResize'; import DesktopHeader from './components/DesktopHeader.vue'; import MobileHeader from './components/MobileHeader.vue'; export default { components: { DesktopHeader, MobileHeader }, setup() { const { screenWidth } = useWindowResize(); return { screenWidth }; }, }; </script> ``` 这种方式能够更好地结合 Vue 的响应式机制,提供更灵活的交互体验[^3]。 --- #### 3. **CSS Grid 和 Flexbox 结合** 对于复杂的布局需求,推荐使用 CSS Grid 或 Flexbox 进行布局管理。这两种技术都可以很好地配合媒体查询一起工作。 ##### 示例:Flexbox 布局 ```css .container { display: flex; flex-wrap: wrap; } .item { flex: 1 1 calc(33.33% - 20px); /* 每行三列 */ margin: 10px; } @media (max-width: 768px) { .item { flex: 1 1 calc(50% - 20px); /* 小屏幕上每行两列 */ } } ``` ##### 示例:Grid 布局 ```css .grid-container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 20px; } ``` 这些布局方式非常适合处理复杂的内容排列问题[^2]。 --- #### 4. **Viewport 单位** 为了使元素的比例随着视口的变化自动调整,可以使用 viewport 单位(`vw`, `vh`)。例如: ```css .header { height: 10vh; /* 高度为视口高度的 10% */ font-size: 4vw; /* 字号为视口宽度的 4% */ } ``` 这种方案尤其适合需要保持比例一致的设计[^2]。 --- #### 5. **Element Queries** 如果需要根据某个特定元素的尺寸而不是整个窗口的尺寸来触发样式变化,可以考虑使用 Element Queries 技术。虽然原生浏览器尚未支持该功能,但有一些第三方库可以帮助实现这一目标,比如 `eq.js`[^4]。 --- ### 总结 以上介绍了几种常用的 Vue3 自适应布局解决方案,包括但不限于媒体查询、Vue3 响应式 API、CSS Grid/Flexbox 布局以及 Viewport 单位等。开发者可以根据实际需求选择合适的工具和技术栈。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值