移动端配置Rem 布局适配

2022-09-04  本文已影响0人  菜蚴菜
一、原生项目
var designWidth = 750;  //设计稿的宽度
//初始化
resize();
//兼容不同机型
const event = 'onorientationchange' in window ? 'onorientationchange' : 'resize';
window.addEventListener(event, resize, false);
function resize(){
    //获取浏览器的宽度
    const clientWidth =document.documentElement.clientWidth;
    const fontSize = clientWidth / designWidth * 100;
    document.documentElement.style.fontSize = fontSize+"px";
}
designWidth 可以自定义,使用的时候和UI稿的尺寸保持一致,把对应的大小除以100就可以转换为相应的rem为单位的值。
例如:24px=0.24rem
二、vue3+vite项目
1、安装
npm install amfe-flexible --save
npm install postcss-pxtorem --save-dev
2、在main.js入口文件引入
import 'amfe-flexible'
3、在vite中
import postCssPxToRem from 'postcss-pxtorem';
 plugins.push(
    postCssPxToRem({
      rootValue: 37.5,// (Number | Function) 表示根元素字体大小或根据[`input`](https://api.postcss.org/Input.html)参数返回根元素字体大小
      unitPrecision: 5, // 允许REM单位增长到的十进制数字,小数点后保留的位数。
      propList: ['*'],
      exclude: /(node_module)/, // 默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
      selectorBlackList: ['vant-'], // 要忽略并保留为px的选择器,我使用的UI框架为vant 所以这里会配置vant-
      mediaQuery: false, // (布尔值)允许在媒体查询中转换px。
      minPixelValue: 1, // 设置要替换的最小像素值
    })
  );

如果设计稿的尺寸不是 375,而是 750 或其他大小,可以将 rootValue 配置调整为: 设计稿大小/10

配置好以后直接在在样式中使用px单位,会自动被转化为单位为rem

具体配置说明参考下图:

image.png
4、遇到的问题

①、配置了 selectorBlackList: ['vant-'] 以后,UI框架vant中的组件的展示还是以px为单位,自适应布局会有问题。如果自定义去更改样式的时候, 需要转化为rem单位。
②、为什么不干脆把vant中的样式也转化为rem为单位的布局那,会有很大的兼容问题,尤其是在12及以上的ios机型上面。
③、在入口的html文件中添加了骨架屏,样式

上一篇 下一篇

猜你喜欢

热点阅读