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 相关文章推荐
用Greasemonkey 脚本收藏网站会员信息到本地
Oct 26 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
jQuery的:parent选择器定义和用法
Jul 01 Javascript
JavaScript中的异常捕捉介绍
Dec 31 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
Aug 10 Javascript
Java Mybatis框架入门基础教程
Sep 21 Javascript
ES6新特征数字、数组、字符串
Oct 01 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
Dec 18 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
vue实现简单的星级评分组件源码
Nov 16 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
JS实现公告上线滚动效果
Jan 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
PHP中绘制图像的一些函数总结
2014/11/19 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP的PDO连接讲解
2019/01/24 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
微信小程序实现吸顶效果
2020/01/08 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
[01:49]一目了然!DOTA2DotA快捷操作对比第二弹
2014/05/16 DOTA
python局部赋值的规则
2013/03/07 Python
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
使用Python编写一个模仿CPU工作的程序
2015/04/16 Python
简析Python的闭包和装饰器
2016/02/26 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
python利用有道翻译实现"语言翻译器"的功能实例
2017/11/14 Python
python自动发微信监控报警
2019/09/06 Python
wxPython色环电阻计算器
2019/11/18 Python
python实现猜数游戏
2020/03/27 Python
Linux的文件类型
2016/07/05 面试题
简历中个人自我评价分享
2014/03/15 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
行政复议答复书
2015/07/01 职场文书
JavaScript控制台的更多功能
2021/04/28 Javascript
php去除数组中为0的元素的实例分析
2021/11/17 PHP
MySQL为数据表建立索引的原则详解
2022/03/03 MySQL
Centos7 Shell编程之正则表达式、文本处理工具详解
2022/08/05 Servers