移动web端适配

175 阅读2分钟

使用rem进行移动web端适配,postcss-plugin-px2rem可以使得css中的px转换为rem渲染到web页面上

01 postcss-plugin-px2rem的基本使用

首先下载postcss-plugin-px2rem:npm i postcss-plugin-px2rem

其次在postcss.config.js中配置以下信息

 module.exports = {
  rootValue: 100,   // width:100px 渲染到页面上后width: 100px / rootValue = 1rem
  unitPrecision: 5, //允许REM单位增长到的十进制数字。
  propWhiteList: [],  //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
  propBlackList: [], //黑名单
  exclude: /(node_module)/, //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)/ 。如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
  selectorBlackList: [], //要忽略并保留为px的选择器
  // ignoreIdentifier: false,  //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
  // replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。
  mediaQuery: false, //(布尔值)允许在媒体查询中转换px。
  minPixelValue: 3, //设置要替换的最小像素值(3px会被转rem)。 默认 0
}

02 原理

先牢记一个公式:渲染的大小= rem * fontSize

以UI设计稿宽度为 750px 为例, 按钮的宽度为200px,渲染到页面上后(以rootValue:100为例),此时设计稿宽度为7.5rem,按钮宽度为2rem

在phone6上,iPhone6的宽度为375px,设计稿 7.5rem * fontSize = 375px,fontSize = 375 / 7.5 = 50px,此时按钮的宽度为:2rem * 50px = 100px,是在宽度为750px的设计稿上宽度的一半

当在其他设备上时,比如宽度为 400px,fontSize = 400px / 7.5rem,因为是根据宽度为750px的设计稿来进行计算。

不同设备的屏幕大小不同,因此需要根据设备屏幕的宽度计算fontSize大小

image-20220805005531592.png

03 计算fontSize

根据document.documentElement.clientWidth获取当前设备屏幕的宽度,在设备屏幕变化时,重新计算fontSize大小

// 设置 rem 函数
function setRem () {
  let width = document.documentElement.clientWidth
  let fontSize = width / 7.5 
  document.documentElement.style.fontSize = fontSize + 'px'
}
// 初始化
setRem();
// 改变窗口大小时重新设置 rem
window.onresize = function () {
  setRem()
}
​

\