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 相关文章推荐
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
jQuery示例收集
Nov 05 Javascript
表单JS弹出填写提示效果代码
Apr 16 Javascript
php读取sqlite数据库入门实例代码
Jun 25 Javascript
javascript框架设计读书笔记之模块加载系统
Dec 02 Javascript
javascript实现一个数值加法函数
Jun 26 Javascript
jQuery解析Json实例详解
Nov 24 Javascript
基于JS实现checkbox全选功能实例代码
Oct 31 Javascript
JS实现根据详细地址获取经纬度功能示例
Apr 16 Javascript
详解Nuxt.js中使用Element-UI填坑
Sep 06 Javascript
微信小程序获取当前位置和城市名
Nov 13 Javascript
Vue父子组件传值的一些坑
Sep 16 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采集利器 Snoopy 试用心得
2011/07/03 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
用console.table()调试javascript
2014/09/04 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
AngularJS基础 ng-copy 指令实例代码
2016/08/01 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
ajax与json 获取数据并在前台使用简单实例
2017/01/19 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
Vue监听一个数组id是否与另一个数组id相同的方法
2018/09/26 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
基python实现多线程网页爬虫
2015/09/06 Python
python生成lmdb格式的文件实例
2018/11/08 Python
Python用字典构建多级菜单功能
2019/07/11 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
python 如何调用远程接口
2020/09/11 Python
如何在pycharm中安装第三方包
2020/10/27 Python
Python list和str互转的实现示例
2020/11/16 Python
硕士研究生求职自荐信范文
2014/03/11 职场文书
中式结婚主持词
2014/03/14 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
先进个人申报材料
2014/12/30 职场文书
2019年国庆祝福语(70句)
2019/09/19 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers