vue3大屏适配之常见方案

VUE3学习大屏自适应的几种方法

1.rem 单位 + 动态设置 html 的 font-size(不推荐)

如将设计稿的宽(1920)平均分成 24 等份, 每一份为 80px。

动态设置 html 的 font-size可以使用媒体查询或者js来动态改变body的fontsize大小,媒体查询太麻烦,以下是通过js代码动态改变fontsize大小。

<template>
  <div class="factory">
    哈哈哈哈
    <img src="@/assets/screen/arrow.png" alt="">
  </div>
</template>
 
<script setup>
import { nextTick } from 'vue';
onMounted(() => {
  nextTick(() => {
    changesizeFn()
  })
  window.addEventListener('resize', changesizeFn)
})
 
const changesizeFn = () => {
  let targetX = 1920
  let x = document.documentElement.clientWidth
  //获取body,并改变body的fontsize大小
  let body = document.documentElement
  body.style.fontSize = `${(x / targetX) * 24}px`
}
 
onBeforeUnmount(() => {
  window.removeEventListener('resize', changesizeFn)
})
</script>
 
<style lang="scss" scoped>
.factory {
  width: 24rem;
  height: 13.5rem;
  font-
### Vue3 适配解决方案 #### 使用 Flex 布局 Flexbox 是一种强的 CSS 布局模式,能够帮助开发者轻松创建灵活且可伸缩的界面。通过合理配置 `flex-direction`、`justify-content` 和 `align-items` 属性,可以使页面元素在不同尺寸下保持良好的排列方式[^1]。 #### 利用 vw/vh 单位 vw (视口宽度百分比) 和 vh (视口高度百分比) 可以让页面上的元素按照幕的比例动态调整小。这种方式无需监听窗口 resize 事件即可实现真正的响应式设计。例如,在样式定义中设置 `.factory { width: 100vw; height: 56.25vw; font-size: 1vw; }` 能够确保容器和字体随幕变化而自适应[^2]。 ```html <template> <div class="factory"> 哈哈哈哈 <img src="@/assets/screen/arrow.png" alt=""> </div> </template> <style lang="scss" scoped> .factory { width: 100vw; height: 56.25vw; font-size: 1vw; img { height: 3vw; } } </style> ``` #### Scale 缩放技术 对于高精度的显示需求,可以通过 JavaScript 动态计算并应用 CSS 的 transform scale 来完成整体页面放缩小操作。这种方法特别适合于处理固定宽高的静态模板内容。需要注意的是,在 index.html 文件里应加入如下代码片段来移除默认滚动条以及填充整个画布区域: ```css <style> html, body, #app { overflow: hidden; height: 100%; } </style> ``` 同时配合脚本逻辑获取实际渲染比例因子,并将其作用至根节点上[^3]: ```javascript <script setup> import { onMounted } from &#39;vue&#39;; onMounted(() => { const app = document.getElementById(&#39;app&#39;); function setScale() { let screenWidth = window.innerWidth; let screenHeight = window.innerHeight; let designWidth = 1920; // 设计稿宽度 let designHeight = 1080; // 设计稿高度 let scaleW = screenWidth / designWidth; let scaleH = screenHeight / designHeight; app.style.transformOrigin = "top left"; app.style.transform = `scale(${Math.min(scaleW, scaleH)})`; } window.addEventListener(&#39;resize&#39;, setScale); setScale(); }); </script> ``` 以上三种方法各有优劣,可以根据具体业务场景选择合适的策略或者组合多种方式进行优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农键盘上的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值