前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >vue中px自动转化为rem

vue中px自动转化为rem

作者头像
leader755
发布2022-03-09 08:31:45
1.8K0
发布2022-03-09 08:31:45
举报
文章被收录于专栏:万丈高楼平地起

在项目中是不是经常使用 rem,自动设置根节点 html 的 font-size,因为 rem 单位是相对于根节点的字体大小的,所以通过设置根节点的字体大小可以动态的改变 rem 的大小。但是我们常见的是 px,那有什么好的方法能自动转化为 rem 呢。答案是有的。

  • vue-cli:使用脚手架工具创建项目。
  • postcss-pxtorem:转换 px 为 rem 的插件。

1.创建 rem.js 文件

很多人写这种小工具文件会习惯性的加上闭包,这个其实是没有必要的。ES6 中每个文件都是单独的一个模块。

代码语言:javascript
复制
/***1、创建rem.js文件
 **很多人写这种小工具文件会习惯性的加上闭包,这个其实是没有必要的。ES6中每个文件都是单独的一个模块。
 **/

/**一般:
 *移动端设计图为 750px,basesize=32,scale = document.documentElement.clientWidth / 750;
 *pc端设计图为 1920px,basesize=16,scale = document.documentElement.clientWidth / 1920;
 **/
// 基准大小
const baseSize = 16;

// 设置 rem 函数
function setRem() {
  // 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
  const scale = document.documentElement.clientWidth / 1920;
  var autoWidth = Math.round(baseSize * Math.min(scale, 2));
  // 设置页面最小字体
  if (autoWidth < 10) {
    autoWidth = 10;
  }
  // 设置页面根节点字体大小
  document.documentElement.style.fontSize = autoWidth + "px";
}

// 初始化
setRem();

// 改变窗口大小时重新设置 rem
window.onresize = function () {
  setRem();
};

2.在main.js中引入rem.js

rem.js 的路径是自己定的,在哪就写那个路径。引入文件后,查看页面的 html 节点,是否有被自动添加 font-size

代码语言:javascript
复制
import "./utils/rem";

注意:完成到这一步,也就是实现了 rem 布局,实际开发的时候,还是需要我们去计算对应的 rem 值去开发。 下一步我们就配置一下 webpack,自动转换 px 为对应的 rem 值。

3.配置 postcss-pxtorem 自动转换 px 为 rem

1.安装 postcss-pxtorem

代码语言:javascript
复制
$ npm install postcss-pxtorem --save-dev
//npm install postcss-pxtorem -D

2.配置文件

1>vue-cli2.x 中修改根目录 postcssrc.js 文件

在根目录找到找到postcssrc.js文件,并在其中找到 plugins 属性新增 pxtorem 的设置。

代码语言:javascript
复制
"plugins": {
  "postcss-pxtorem": {
  "rootValue": 32,
  "unitPrecision": 2, //保留小数位
  "propList": ["*"],
  // 注意:如果有使用第三方UI如VUX,则需要配置下忽略选择器不转换。
  // 规则是class中包含的字符串,如vux中所有的class前缀都是weui-。也可以是正则。
  "selectorBlackList": ["weui-"],//过滤的类名
  "minPixelValue":2 //所有小于设置的数值都不被转换
    }
}
2>vue-cli3.x 和 vue-cli4.x 修改根目录 vue.config.js 文件
代码语言:javascript
复制
css: {
    // css预设器配置项
    loaderOptions: {
      postcss: {
        plugins: [
          require('postcss-pxtorem')({
            rootValue: 16, // 换算的基数
            unitPrecision:2,//保留小数位
            selectorBlackList: ['.wu'], // 忽略转换正则匹配项
            propList: ['*'],
            minPixelValue: 2
          })
        ]
      }
    }
  },

####

3.重启后正常使用 px

按照上述配置项目后,即可在开发中直接使用 px 单位开发。

例如设计给出的设计图是 **750 _ 1136_,那么可以直接在页面中写

代码语言:javascript
复制
body {
  width: 750px;
  height: 1136px;
}

将被转换为

代码语言:javascript
复制
body {
  widht: 23.4375rem;
  height: 35.5rem;
}

注意:此方法支持**import*** 和 `.vue`单文件中`style`。暂不支持`style`中使用`@import url();*` \\

4.vue 中 px 动转化为 rem 插件

1>三种常用的插件对比

postcss-plugin-px2rem 官方文档:https://www.npmjs.com/package/postcss-plugin-px2rem postcss-pxtorem 官方文档:https://www.npmjs.com/package/postcss-pxtorem postcss-px2rem 官方文档:https://www.npmjs.com/package/postcss-px2rem

2>安装

代码语言:javascript
复制
//安装postcss-plugin-px2rem
npm i postcss-plugin-px2rem  --save-dev

//安装postcss-pxtorem
npm i postcss-pxtorem  --save-dev

//安装 postcss-px2rem
npm install postcss-px2rem --save-dev

####

3>配置文件

在 vue-cli3.x 中进行配置,如果个别地方不想转化 px。可以简单的使用大写的 PXPx 。 postcss-plugin-px2rem 的配置

代码语言:javascript
复制
 css: {
   loaderOptions: {
     postcss: {
       plugins: [
          require('postcss-plugin-px2rem')({
             // rootValue: 100, //换算基数, 默认100  ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
             // 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
          }),
        ]
     }
         }
 },

postcss-pxtorem 的配置

代码语言:javascript
复制
 css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require('postcss-pxtorem')({//这里是配置项,详见官方文档
                        rootValue : 1, // 换算的基数
                        selectorBlackList  : ['weui','mu'], // 忽略转换正则匹配项
                        propList   : ['*'],
                    }),
                ]
            }
        }
    },

postcss-px2rem 的配置

代码语言:javascript
复制
css: {
        loaderOptions: {
          postcss: {
                plugins: [
                    require('postcss-px2rem')({ //配置项,详见官方文档
                        remUnit: 30
                    }), // 换算的基数
                ]
            }
        }
    },
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.创建 rem.js 文件
  • 2.在main.js中引入rem.js
  • 3.配置 postcss-pxtorem 自动转换 px 为 rem
    • 1.安装 postcss-pxtorem
      • 2.配置文件
        • 1>vue-cli2.x 中修改根目录 postcssrc.js 文件
        • 2>vue-cli3.x 和 vue-cli4.x 修改根目录 vue.config.js 文件
      • 3.重启后正常使用 px
      • 4.vue 中 px 动转化为 rem 插件
        • 1>三种常用的插件对比
          • 2>安装
            • 3>配置文件
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档