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 相关文章推荐
文本框只能选择数据到文本框禁止手动输入
Nov 22 Javascript
javascript中的__defineGetter__和__defineSetter__介绍
Aug 15 Javascript
Winform客户端向web地址传参接收参数的方法
May 17 Javascript
JS前端笔试题分析
Dec 19 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
Jan 03 Javascript
Angular 2.0+ 的数据绑定的实现示例
Aug 09 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 Javascript
vue中使用ueditor富文本编辑器
Feb 08 Javascript
深入了解JavaScript代码覆盖
Jun 13 Javascript
微信小程序tabBar 返回tabBar不刷新页面
Jul 25 Javascript
js实现无缝轮播图效果
Mar 09 Javascript
jquery插件实现轮播图效果
Oct 19 jQuery
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
php的array_multisort()使用方法介绍
2012/05/16 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
CSS和JS标签style属性对照表(方便js开发的朋友)
2010/11/11 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
JS实现吸顶特效
2020/01/08 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
简单实现python聊天程序
2018/04/01 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
用Python实现数据的透视表的方法
2018/11/16 Python
Django实现发送邮件功能
2019/07/18 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
美国农场商店:Blain’s Farm & Fleet
2020/01/17 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
新课培训心得体会
2014/09/03 职场文书
2014年关工委工作总结
2014/11/17 职场文书
交警失职检讨书
2015/01/26 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
煤矿施工安全协议书
2016/03/22 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
用Python将GIF动图分解成多张静态图片
2021/06/11 Python