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 相关文章推荐
js实现ASP分页函数 HTML分页函数
Sep 22 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
Javascript基础教程之变量
Jan 18 Javascript
举例讲解如何判断JavaScript中对象的类型
Apr 22 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
Dec 13 Javascript
JS 组件系列之 bootstrap treegrid 组件封装过程
Apr 28 Javascript
Node.js安装配置图文教程
May 10 Javascript
es6学习笔记之Async函数基本教程
May 11 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
Jan 31 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
Jun 19 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
Nov 13 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
总集篇&特番节目先行播出!《SAO Alicization War of Underworld》第2季度TV动画4月25日放送!
2020/03/06 日漫
在PHP中使用XML
2006/10/09 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
JavaScript全排列的六种算法 具体实现
2013/06/29 Javascript
详解AngularJS中自定义指令的使用
2015/06/17 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
2017/10/13 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
[03:22]DAC最前线(第二期)—DOTA2亚洲邀请赛主赛场周边及线路探访
2015/01/24 DOTA
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
一道SQL存储过程面试题
2016/10/07 面试题
销售人员中英文自荐信
2013/09/22 职场文书
中餐厅主管的职责范文
2014/02/04 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis