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源码分析-02正则表达式 RegExp 常用正则表达式
Nov 14 Javascript
jquery获取tr中控件值并操作tr实现思路
Mar 27 Javascript
jQuery实现Twitter的自动文字补齐特效
Nov 28 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
Aug 08 Javascript
详解webpack打包vue时提取css
May 26 Javascript
jQuery之动画ajax事件(实例讲解)
Jul 18 jQuery
js实现HTML中Select二级联动的实例
Jan 05 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
了解JavaScript中的选择器
May 24 Javascript
js设计模式之单例模式原理与用法详解
Aug 15 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 Javascript
用vue设计一个日历表
Dec 03 Vue.js
关于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中rename函数用法分析
2014/11/15 PHP
详解WordPress中创建和添加过滤器的相关PHP函数
2015/12/29 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
PHP实现文件上传与下载
2020/08/28 PHP
基于jquery可配置循环左右滚动例子
2011/09/09 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
简单谈谈json跨域
2016/03/13 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
React通过父组件传递类名给子组件的实现方法
2017/11/13 Javascript
JavaScript函数的特性与应用实践深入详解
2018/12/30 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
JavaScript判断数据类型有几种方法及区别介绍
2020/09/02 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
python中遍历文件的3个方法
2014/09/02 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
加拿大鞋子连锁店:Town Shoes
2016/09/26 全球购物
JBL美国官方商店:扬声器、耳机等
2019/12/01 全球购物
办公室内勤岗位职责范本
2013/12/09 职场文书
保卫工作个人总结
2015/03/03 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
Django debug为True时,css加载失败的解决方案
2021/04/24 Python
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript