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 相关文章推荐
JavaScript 图片预览效果 推荐
Dec 22 Javascript
通过复制Table生成word和excel的javascript代码
Jan 20 Javascript
javascript中的self和this用法小结
Feb 08 Javascript
jquery实现多条件筛选特效代码分享
Aug 28 Javascript
微信小程序 wxapp地图 map详解
Oct 31 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
javascript中new Array()和var arr=[]用法区别
Dec 01 Javascript
node.js博客项目开发手记
Mar 16 Javascript
Angular服务Request异步请求的实例讲解
Aug 13 Javascript
详解vue-cli3 中跨域解决方案
Apr 10 Javascript
js删除对象中的某一个字段的方法实现
Jan 11 Javascript
JS获取一个字符串中指定字符串第n次出现的位置
Feb 10 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
PHP的加密方式及原理
2012/06/14 PHP
PHP遍历并打印指定目录下所有文件实例
2014/02/10 PHP
php倒计时出现-0情况的解决方法
2016/07/28 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
PHP连接及操作PostgreSQL数据库的方法详解
2019/01/30 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
JS & JQuery 动态添加 select option
2016/06/08 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
详解使用jest对vue项目进行单元测试
2018/09/07 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
vue 组件基础知识总结
2021/01/26 Vue.js
python基础教程之基本数据类型和变量声明介绍
2014/08/29 Python
python中while循环语句用法简单实例
2015/05/07 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
keras 实现轻量级网络ShuffleNet教程
2020/06/19 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
蛋糕店的商业计划书范文
2014/01/27 职场文书
20年同学聚会感言
2014/02/03 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
运动会广播稿200字
2014/10/18 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
办公室规章制度范本
2015/08/04 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python