Vue2中的移动端适配问题

移动端适配

现在市场上主流的移动端适配方案, 有rem和vw两种. 但是就目前来说, 还是rem用的多

  1. rem 是相对于根元素 (html)的 font-size
  2. vwvh是基于显示屏幕的宽高,相当于100等份

但是vw和vh有兼容性问题, 移动端能适配的很好, 但在pc端上对一些老版本的浏览器不支持
但后续发展是会以vwvh为主的, rem只不过是一个过渡

那么, 有百分比布局, 为什么还要vwvh呢?

  • 百分比布局: 相对于父级盒子来变化
  • vw和vh: 相对于网页视口, 视图

1.1 rem适配

rem 适配的本质就是给 html 设置一个 font-size, 那个这个 font-size = 屏幕宽度 / 10
之后想设置一个400px的盒子的话就可以用rem了, 实际尺寸 = 设计稿值 / 基准值

 假设屏幕宽度(设计稿)为375px, 那么给 html 的 font-size = 375 / 10, 为37.5px了在其中创建一个 div 盒子为200px, 就是200 / 37.5 = 5.333334rem注意 10rem 就是最大值, 当一个盒子宽度超过 10rem 则会出现横向滚动条
//原生可以用这行代码来实现document.querySelector('html').style.fontSize = window.innerWidth / 10 + 'px'

插件实现方案:

  1. 安装 amfe-flexible插件
    npm i amfe-flexible
  2. 在main.js导入
    import “amfe-flexible”
  3. 安装postcss-pxtorem
    npm i postcss-pxtorem@5.0.0 -D

配制:来到 项目根目录,也就是跟 package.json 平级的位置,新建一个 postcss.config.js,复制如下配置

module.exports={plugins:{'postcss-pxtorem': {rootValue:37.5, // 基准值propList:["*"]  // 匹配的class文件}}
}

考虑到以后去公司里面, 可能给我们的设计稿是1240px的, 而vant里面的是根据375px来适配的, 这样就很容易冲突
解决方法:

module.exports = ({ file }) => {// postcss是干什么的? 它是转换css时使用一些规则, 它是一个文件一个文件转换的// 识别是否在转换vant, 转换的路径上一定有node_modules/vant// 通过下面这个会打印出路径// console.log(e.file)// 如果在转换过程中进去了vant里面, 那么就给基准值为37.5, 也就是html的字体大小// 如果没有, 也就是我们自己写的css文件, 是不经过vant里面去找的, 所以就给我们给定的值const base = file.includes(path.join('node_modules', 'vant')) ? 37.5 : 124return {plugins: {'postcss-pxtorem': {rootValue: base, // 基准值// 如果ui给我们设计稿是1240px, vant它的设计稿是375px, 那么就要做一个判断了// 如果解析的文件识别是vant的ui库就用37.5, 如果不是就设置124// 其实就看它是否进去node_modules里面的vant就可以了, 自己写的是不会去那个文件夹里面的propList: ['*'] // 哪些css需要转换}}}
}

1.2 vwvh适配

vw和vh是把屏幕分成一百份, 既1vw = 设备宽度/100
在375px的设计稿中, 一个200px的盒子就是 200 / (375 / 100) = 53.34vw

插件实现:

  1. 安装插件
    npm i postcss-px-to-viewport -D
  2. 配制
    根目录下的postcss.config.js
const path = require('path')
module.exports = ({ file }) => {const base= file.dirname.includes(path.join('node_modules','vant')) ? 375 : 1240return {plugins: {'postcss-px-to-viewport': {viewportWidth: base // 设计稿宽度}}}
}

和上面同理


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部