Vue中rem与postcss-pxtorem的应用详解


Posted in Javascript onNovember 20, 2019

rem 布局

rem是根元素(html)中的font-size值。

rem布局不多赘述,有很多详细说明rem布局原理的资料。

简单的说,通过JS获取设备宽度动态设定rem值,以实现在不同宽度的页面中使用rem作为单位的元素自适应的效果。

新建rem.js文件,于main.js中引用

// 设计稿以1920px为宽度,而我把页面宽度设计为10rem的情况下

const baseSize = 192; // 这个是设计稿中1rem的大小。
function setRem() {
  // 实际设备页面宽度和设计稿的比值
  const scale = document.documentElement.clientWidth / 1920;
  // 计算实际的rem值并赋予给html的font-size
  document.documentElement.style.fontSize = (baseSize * scale) + 'px';
}
setRem();
window.addEventListener('resize', () => {
  setRem();
});

postcss-pxtorem

postcss-pxtorem是PostCSS的插件,用于将像素单元生成rem单位。

安装

新建Vue项目
安装 postcss-pxtorem

npm install postcss-pxtorem --save-dev

配置

可以通过3个地方来添加配置,配置文件皆位于vue 项目根目录中,若文件不存在可以自行建立。

其中最重要的是这个:

rootValue (Number)

  • 根元素的值,即1rem的值
  • 用于设计稿元素尺寸/rootValue
  • 比如 rootValue = 192 时,在css中width: 960px; 最终会换算成width: 5rem;

还有一些其他的配置:

propList (Array) 需要做单位转化的属性.

  • 必须精确匹配
  • 用 * 来选择所有属性. Example: ['*']
  • 在句首和句尾使用 * (['*position*'] 会匹配 background-position-y)
  • 使用 ! 来配置不匹配的属性. Example: ['*', '!letter-spacing']
  • 组合使用. Example: ['*', '!font*']

minPixelValue(Number) 可以被替换的最小像素.

unitPrecision(Number) rem单位的小数位数上限.

完整的可以看官方文档

权重

vue.config.js > .postcssrx.js > postcss.config.js

其中 postcssrc.js 和 postcss.config.js 可以热更新, vue.config.js 中做的修改要重启devServer

配置示例

vue.config.js

module.exports = {
  //...其他配置
  css: {
   loaderOptions: {
    postcss: {
     plugins: [
      require('postcss-pxtorem')({
       rootValue: 192,
       minPixelValue: 2,
       propList: ['*'],
      })
     ]
    }
   }
  },
 }

.postcssrx.js

module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue: 16,
      minPixelValue: 2,
      propList: ['*'],
    }
  }
}

postcss.config.js

module.exports = {
 plugins: {
  'postcss-pxtorem': {
   rootValue: 192,
   minPixelValue: 2,
   propList: ['*'],
  }
 }
}

Reference

官方Github仓库:postcss-pxtorem
vue3.0中使用postcss-pxtorem
关于vue利用postcss-pxtorem进行移动端适配的问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
麻雀虽小五脏俱全 Dojo自定义控件应用
Sep 04 Javascript
jQuery控制网页打印指定区域的方法
Apr 07 Javascript
jQuery动态效果显示人物结构关系图的方法
May 07 Javascript
Windows系统下Node.js的简单入门教程
Jun 23 Javascript
js实现获取div坐标的方法
Nov 16 Javascript
微信小程序 教程之列表渲染
Oct 18 Javascript
vue2.0 axios前后端数据处理实例代码
Jun 30 Javascript
javascript 面向对象实战思想分享
Sep 07 Javascript
vuejs使用递归组件实现树形目录的方法
Sep 30 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
Jul 10 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
Sep 12 Javascript
vue使用echarts实现水平柱形图实例
Sep 09 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
Nov 20 #Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 #Javascript
基于Vue+ElementUI的省市区地址选择通用组件
Nov 20 #Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
Nov 20 #Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
Nov 20 #Javascript
详解Nuxt.js 实战集锦
Nov 19 #Javascript
javascript的delete运算符知识点总结
Nov 19 #Javascript
You might like
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
nodejs中操作mysql数据库示例
2014/12/20 NodeJs
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
详解angular2实现ng2-router 路由和嵌套路由
2017/03/24 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
Python实现曲线点抽稀算法的示例
2017/10/12 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
selenium+python 对输入框的输入处理方法
2018/10/11 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
详解python中groupby函数通俗易懂
2020/05/14 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
各大浏览器 CSS3 和 HTML5 兼容速查表 图文
2010/04/01 HTML / CSS
护士个人简历自荐信
2013/10/18 职场文书
业务员薪酬管理制度
2014/01/15 职场文书
社区庆八一活动方案
2014/02/02 职场文书
个人充满哲理的自我评价
2014/02/20 职场文书
乡村文明行动实施方案
2014/03/29 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
房屋认购协议书
2015/01/29 职场文书
2015新学期校长寄语(3篇)
2015/03/25 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python
总结Pyinstaller打包的高级用法
2021/06/28 Python