vue中px自动转rem插件使用

在用vue写移动端的项目时会用到rem适配,而将px计算转换rem比较麻烦也不好修改,并且许多UI插件使用的单位仍然是px,这时我们可以使用 postcss-pxtorem 工具帮助我们自动转换。

以 vue-cli2.0 创建的项目为例:
1.在 src/assets/js/ 文件夹下创建 rem.js 文件,自定义 html 的 font-size 大小,例:

/* 移动端适配 */
;(function(doc, win, width){
  var docEl = doc.documentElement;
  var head = doc.getElementsByTagName("head")[0];
  var hFirst = head.firstChild || head.firstElementChild; 
  var cssEl = doc.createElement('style');
  //手机横屏,竖屏可在此处设置 
  var resizeEvt = 'orientationchange' in win ? 'orientationchange' : 'resize';
  var recalc = function() {   
    var x; 
    var n = win.devicePixelRatio;      
    if (n >= 3) {                
        x = 3;                    
    } else if (n >= 2){
        x = 2;
    } else {
        x = 1;
    }
    var clientWidth = docEl.clientWidth;
    if (!clientWidth) return;
    var pxPerRem = 100*(clientWidth / width);
    cssEl.innerHTML = 'html{ font-size:' + pxPerRem + 'px!important; }';
    docEl.setAttribute("data-dpr", x);   //x 限制范围取值 1,2,3
    head.appendChild(cssEl);   
  };
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window,750)
// 若初始化为 375px, 此时整个屏幕宽度为 3.75rem
// 若初始化为 750px, 此时整个屏幕宽度为 7.5rem
// 若初始化为 640px,(document, window,640), 此时整个屏幕宽度为 6.4rem  
// 本例以 750 的设计稿为例, 最终结果 1rem = 100px

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

import Vue from 'vue'
import App from './App'
//......

//rem 适配  1rem = 100px
import '@/assets/js/rem'

3.安装工具插件 postcss-pxtorem

npm install postcss-pxtorem --save-dev

4.修改项目中的 .postcssrc.js 文件(注:与index.html,package.json 等同级的文件),可以在此配置的基础上根据项目需求进行修改。

module.exports = {
  plugins: {
    //......  其他的配置项
    'autoprefixer': {
      browsers: ['Android >= 4.0', 'iOS >= 7']
    },
    'postcss-pxtorem': {
      rootValue: 100,        //本例配置的适配 1rem=100px
      propList: ['*']
    }
  }
}

使用说明
本例设计稿为宽度 750px ,上面设置的适配为 1rem=100px。

若不想转 rem 保留 px 单位可如下操作:
1.写在行内样式中的px不会被转化,例 <div style="width: 120px"> 中的120px 不会被转化。
2.单位含有大写字母时不会被转化,例如:20Px,20PX

/* 按照设计稿中的实际尺寸写,无需做任何改变 */
.box{
  width: 255px;
  border: 1px solid red;
}
/* 如果想保留px,则将px写成 PX 或 Px */
.top{
  width: 255PX;
  height: 50Px;
  border: 1PX solid red;
}

最终解析为:

  
.box{
  width: 2.55rem;
  border: 0.01rem solid red;
}

.top{
  width: 255px;
  height: 50px;
  border: 1px solid red;
}
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue项目使用postcss-pxtorem插件可以将px单位换为rem单位。以下是使用步骤: 1. 首先,确保你已经安装了postcss和postcss-pxtorem插件。可以通过以下命令进行安装: ``` npm install postcss postcss-pxtorem --save-dev ``` 2. 在项目根目录下创建一个postcss.config.js文件,并在该文件配置postcss-pxtorem插件。示例配置如下: ```javascript module.exports = { plugins: { 'postcss-pxtorem': { rootValue: 16, // rem基准值,通常为设计稿宽度的1/10或1/16 propList: ['*'], // 需要换的属性,*表示所有属性 selectorBlackList: [] // 需要忽略的选择器,比如引入第三方UI库时需要排除 } } } ``` 3. 在项目的build/webpack.base.conf.js文件的postcss-loader配置添加postcss-pxtorem插件。示例配置如下: ```javascript const px2remConfig = { loader: 'postcss-loader', options: { sourceMap: true, config: { path: 'postcss.config.js' // 指定postcss配置文件路径 } } } module.exports = { // ... module: { rules: [ // ... { test: /\.css$/, use: [ 'vue-style-loader', 'css-loader', px2remConfig // 添加postcss-pxtorem插件 ] }, // ... ] }, // ... } ``` 4. 配置完成后,重新启动项目,此时px单位会自动换为rem单位。 需要注意的是,postcss-pxtorem插件会将所有px单位换为rem单位,如果你希望某些特定的属性不进行换,可以在配置文件的propList选项添加对应的属性名。另外,如果你使用了第三方UI库,可能需要在配置文件的selectorBlackList选项添加相应的选择器来排除换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值