pxtorem网页自适应方案

-

之前为了些自适应网页,会在项目里写rem。如果设置的rem不恰当,每次还要经过一番计算来得出像素转换成rem的值;有些麻烦;

pxtorem解决了这样的问题

我们可以根据设计图大小设置好根节点的字体大小,也就是1rem=多少像素;

pxtorem帮助我们自动将px转换成rem;

在代码中就可以直接写px,不用写rem了;

github地址:https://github.com/cuth/postcss-pxtorem

安装:

npm install postcss-pxtorem -D

根据设计图大小设置根节点文字大小:

rem.js

// 设置 rem 函数
function setRem () {
  // 320 默认大小16px; 320px = 20rem ;每个元素px基础上/16
  let htmlWidth = document.documentElement.clientWidth || document.body.clientWidth;
  //得到html的Dom元素
  let htmlDom = document.getElementsByTagName('html')[0];
  //设置根元素字体大小
  htmlDom.style.fontSize= htmlWidth/(1920/16) + 'px';
}
setRem();
// 改变窗口大小时重新设置 rem
window.addEventListener('resize', function () {
  setRem()
})

在项目根目录写配置文件postcss.config.js

module.exports = {
  plugins: {
    // 兼容浏览器,添加前缀
    autoprefixer: {
      overrideBrowserslist: [
        "Android 4.1",
        "iOS 7.1",
        "Chrome > 31",
        "ff > 31",
        "ie >= 8",
        "last 10 versions", // 所有主流浏览器最近10版本用
      ],
      grid: true,
    },
    "postcss-pxtorem": {
      rootValue: 16, //结果为:设计稿元素尺寸/16,比如元素宽320px,最终页面会换算成 20rem
      propList: ["*"], //是一个存储哪些将被转换的属性列表,这里设置为['*']全部,假设需要仅对边框进行设置,可以写['*', '!border*']
      unitPrecision: 5, //保留rem小数点多少位
      //selectorBlackList: ['.radius'],  //则是一个对css选择器进行过滤的数组,比如你设置为['fs'],那例如fs-xl类名,里面有关px的样式将不被转换,这里也支持正则写法。
      // replace: true, 
      mediaQuery: false, //媒体查询( @media screen 之类的)中不生效
      minPixelValue: 12, //px小于12的不会被转换
    },
  },
};

具体参数参考github文档

-

posted @ 2022-02-20 16:34  古墩古墩  Views(2851)  Comments(0Edit  收藏  举报