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得到网页中所有的div的id
Oct 19 Javascript
JavaScript 中的事件教程
Apr 05 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
Jul 07 Javascript
使用vue-cli编写vue插件的方法
Feb 26 Javascript
利用Blob进行文件上传的完整步骤
Aug 02 Javascript
JavaScript文本特效实例小结【3个示例】
Dec 22 Javascript
ES6 Promise对象的应用实例分析
Jun 27 Javascript
jQuery层叠选择器用法实例分析
Jun 28 jQuery
十分钟教你上手ES2020新特性
Feb 12 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
Sep 22 Javascript
微信小程序自定义支持图片的弹窗
Dec 21 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
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
js trim函数 去空格函数与正则集锦
2009/11/20 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
jquery ajax传递中文参数乱码问题及解决方法说明
2014/02/07 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
JavaScript中一个奇葩的IE浏览器判断方法
2014/04/16 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
AngularJS  $modal弹出框实例代码
2016/08/24 Javascript
全面解析Bootstrap表单样式的使用
2016/09/09 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python heapq使用详解及实例代码
2017/01/25 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
Python + selenium自动化环境搭建的完整步骤
2018/05/19 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
什么是GWT的Module
2013/01/20 面试题
电子商务专员岗位职责
2013/12/11 职场文书
个人欠款担保书
2014/05/20 职场文书
音乐教师求职信
2014/06/28 职场文书
个人剖析材料范文
2014/09/30 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
Python如何配置环境变量详解
2021/05/18 Python
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP