Vue项目自动转换 px 为 rem的实现方法


Posted in Javascript onOctober 29, 2018

前端开发中还原设计图的重要性毋庸置疑,目前来说应用最多的应该也还是使用rem。然而很多人依然还是处于刀耕火种的时代,要么自己去计算rem值,要么依靠编辑器安装插件转换。

而本文的目标就是通过一系列的配置后,在开发中可以直接使用设计图的尺寸开发,项目为我们自动编译,转换成rem。

技术栈

vue-cli:使用脚手架工具创建项目。

postcss-pxtorem:转换px为rem的插件。

自动设置根节点html的font-size

因为rem单位是相对于根节点的字体大小的,所以通过设置根节点的字体大小可以动态的改变rem的大小。

原理网上有很多文章分享,这里不具体解释。

1、创建rem.js文件

很多人写这种小工具文件会习惯性的加上闭包,这个其实是没有必要的。ES6中每个文件都是单独的一个模块。

// 基准大小
const baseSize = 32
// 设置 rem 函数
function setRem () {
 // 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
 const scale = document.documentElement.clientWidth / 750
 // 设置页面根节点字体大小
 document.documentElement.style.fontSize = (baseSize * Math.min(scale, 2)) + 'px'
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function () {
 setRem()
}

2、在main.js中引入rem.js

import './utils/rem'

引入文件后,查看页面的html节点,是否有被自动添加 font-size。

注意:完成到这一步,也就是实现了rem布局,实际开发的时候,还是需要我们去计算对应的rem值去开发。

下一步我们就配置一下webpack,自动转换px为对应的rem值。

配置 postcss-pxtorem 自动转换px为rem

1、安装 postcss-pxtorem

$ npm install postcss-pxtorem -D

2、修改 /build/utils.js 文件

找到 postcssLoader 的代码块

const postcssLoader = {
 loader: 'postcss-loader',
 options: {
  sourceMap: options.sourceMap
 }
}

修改为:

const postcssLoader = {
  loader: 'postcss-loader',
  options: {
   sourceMap: options.sourceMap,
   plugins: [
    require('postcss-pxtorem')({
     'rootValue': 32,
     propList: ['*']
    })
   ]
 }
}

按照上述配置项目后,即可在开发中直接使用 px 单位开发。

例如设计给出的设计图是 750 * 1136,那么可以直接在页面中写

body {
 width: 750px;
 height: 1136px;
}

将被转换为

body {
 widht: 23.4375rem;
 height: 35.5rem;
}

总结

以上所述是小编给大家介绍的Vue项目自动转换 px 为 rem的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JS 中document.URL 和 windows.location.href 的区别
Nov 11 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
Aug 05 Javascript
JavaScript Math.floor方法(对数值向下取整)
Jan 09 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
Jul 17 Javascript
深入探讨前端框架react
Dec 09 Javascript
JS控制文本域只读或可写属性的方法
Jun 24 Javascript
javascript入门之string对象【新手必看】
Nov 22 Javascript
less简单入门(CSS 预处理语言)
Mar 08 Javascript
面包屑导航详解
Dec 07 Javascript
vue router导航守卫(router.beforeEach())的使用详解
Apr 19 Javascript
使用 vue 实例更好的监听事件及vue实例的方法
Apr 22 Javascript
vue父子组件的通信方法(实例详解)
Nov 10 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
Oct 29 #Javascript
Webstorm2016使用技巧(SVN插件使用)
Oct 29 #Javascript
vue实现类似淘宝商品评价页面星级评价及上传多张图片功能
Oct 29 #Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
Oct 29 #Javascript
简单说说angular.json文件的使用
Oct 29 #Javascript
JS 实现获取验证码 倒计时功能
Oct 29 #Javascript
浅析微信扫码登录原理(小结)
Oct 29 #Javascript
You might like
一个简单计数器的源代码
2006/10/09 PHP
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP排序算法类实例
2015/06/17 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
layui 富文本赋值,取值,取纯文本值的实例
2019/09/18 Javascript
KnockoutJS数组比较算法实例详解
2019/11/25 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
Python数据处理numpy.median的实例讲解
2018/04/02 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
2019/10/06 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
8种常用的Python工具
2020/08/05 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
港湾网络笔试题
2014/04/19 面试题
简历中自我评价怎么写
2014/02/12 职场文书
《散步》教学反思
2014/03/02 职场文书
高校教师自荐信范文
2014/03/13 职场文书
大学生党课心得体会
2016/01/07 职场文书