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 相关文章推荐
如何实现iframe(嵌入式帧)的自适应高度
Jul 26 Javascript
javascript[js]获取url参数的代码
Oct 17 Javascript
jquery自定义类似$.ajax()的方法实现代码
Aug 13 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 Javascript
Node.js本地文件操作之文件拷贝与目录遍历的方法
Feb 16 Javascript
javascript瀑布流式图片懒加载实例
Jun 28 Javascript
js实现为a标签添加事件的方法(使用闭包循环)
Aug 02 Javascript
jQuery中JSONP的两种实现方式详解
Sep 26 Javascript
Javascript使用SWFUpload进行多文件上传
Nov 16 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
Mar 13 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
Apr 23 jQuery
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 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实现服务器状态监控的方法
2014/12/09 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php使用GD创建保持宽高比缩略图的方法
2015/04/17 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
JS将光标聚焦在文本最后的实现代码
2014/03/28 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
JavaScript中对JSON对象的基本操作示例
2016/05/21 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
2016/06/22 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
详解微信小程序动画Animation执行过程
2020/09/23 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
Python使用自带的ConfigParser模块读写ini配置文件
2016/06/26 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
Python中bisect的使用方法
2019/12/31 Python
python 基于wx实现音乐播放
2020/11/24 Python
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
党校培训自我鉴定范文
2014/03/20 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
党的生日演讲稿
2014/09/10 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
2014大学生党员评议个人总结
2014/09/22 职场文书
党员民主生活会整改措施
2014/09/26 职场文书
行政执法作风整顿剖析材料
2014/10/11 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android