vue 实现 rem 布局或vw 布局的方法


Posted in Javascript onNovember 13, 2019

一、实现 rem 布局

移动端

<meta
 name="viewport"
 content="width=device-width, initial-scale=1, maximum-scale=1"
/>

方法一、在 index.html 或者 main.js 中添加以下代码:

const setHtmlFontSize = () => {
 let deviceWidth =
  document.documentElement.clientWidth || document.body.clientWidth
 if (deviceWidth >= 750) {
  deviceWidth = 750
 }
 if (deviceWidth <= 320) {
  deviceWidth = 320
 }
 document.documentElement.style.fontSize = `${deviceWidth / 7.5}px`
}
window.onresize = setHtmlFontSize
setHtmlFontSize()

之后,在写 css 时,只要将 px 单位替换成 rem,这里设置的比例是 100px=1rem,例如,宽度为 100px 时,可以直接写成 1rem。

方法二、cli3 使用 lib-flexible 和 将 px 自动转换为 rem 插件

1、安装插件

npm install lib-flexible --save
npm install px2rem-loader --save-dev

或选择

npm install postcss-plugin-px2rem --save-dev(推荐)

或选择

npm install postcss-px2rem --save-dev

2、配置插件

在入口文件 main.js 中引入 lib-flexible

import 'lib-flexible/flexible'

3、三种插件的 cli3 配置:

在 vue.config.js 中

//px2rem-loader配置
module.exports = {
 chainWebpack: config => {
  config.module
   .rule('css')
   .test(/\.css$/)
   .oneOf('vue')
   .resourceQuery(/\?vue/)
   .use('px2rem')
   .loader('px2rem-loader')
   .options({
    remUnit: 75
   })
 }
}
//postcss-plugin-px2rem
module.exports = {
 css: {
  loaderOptions: {
   postcss: {
    plugins: [
     require('postcss-plugin-px2rem')({
      rootValue: 75, //换算基数, 默认100 ,这样的话把根标签的字体规定为1rem为50px,这样就可以从设计稿上量出多少个px直接在代码中写多上px了。
      // unitPrecision: 5, //允许REM单位增长到的十进制数字。
      //propWhiteList: [], //默认值是一个空数组,这意味着禁用白名单并启用所有属性。
      // propBlackList: [], //黑名单
      exclude: /(node_module)/, //默认false,可以(reg)利用正则表达式排除某些文件夹的方法,例如/(node_module)\/如果想把前端UI框架内的px也转换成rem,请把此属性设为默认值
      // selectorBlackList: [], //要忽略并保留为px的选择器
      // ignoreIdentifier: false, //(boolean/string)忽略单个属性的方法,启用ignoreidentifier后,replace将自动设置为true。
      // replace: true, // (布尔值)替换包含REM的规则,而不是添加回退。
      mediaQuery: false, //(布尔值)允许在媒体查询中转换px。
      minPixelValue: 3 //设置要替换的最小像素值(3px会被转rem)。 默认 0
     })
    ]
   }
  }
 }
}
//postcss-px2rem配置
module.exports = {
 css: {
  loaderOptions: {
   postcss: {
    plugins: [
     require('postcss-px2rem')({
      remUnit: 37.5 //设计图除10之后的一半,兼容第三方库px转成rem样式变小的情况
     })
    ]
   }
  }
 }
}

二、cli3 实现 vw 布局

vw 是基于 Viewport 视窗的长度单位

vw:是 Viewport's width 的简写,1vw 等于 window.innerWidth 的 1%
vh:和 vw 类似,是 Viewport's height 的简写,1vh 等于 window.innerHeihgt 的 1%
vmin:vmin 的值是当前 vw 和 vh 中较小的值
vmax:vmax 的值是当前 vw 和 vh 中较大的值

1、安装插件(可以直接转换 px 为 vw)

npm i postcss-px-to-viewport -D

2、在 vue.config.js 中

module.exports = {
 css: {
  loaderOptions: {
   postcss: {
    plugins: [
     require('postcss-px-to-viewport')({
      viewportWidth: 750, //视口宽度,这里设置为跟设计稿宽度一致;
      viewportHeight: 1334, //视口高度,随便设置一个就可以;
      unitPrecision: 3, //转换后值的精度,3表示保留3位小数;
      viewportUnit: 'vw', //转换成什么视口单位,这里当然是vw;
      selectorBlackList: ['.ignore', '.hairlines'], //是一个选择符数组,对应声明中的像素单位不会转换;
      minPixelValue: 1, //最小像素值,大于等于这个值才会转换;
      mediaQuery: false //是否转换媒体查询中的像素。
     })
    ]
   }
  }
 }
}

总结

以上所述是小编给大家介绍的vue 实现 rem 布局或vw 布局的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript代码加载优化方法
Jan 30 Javascript
jQuery load方法用法集锦
Dec 06 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
May 11 Javascript
JSON相关知识汇总
Jul 03 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
原生javascript实现图片放大镜效果
Jan 18 Javascript
纯js三维数组实现三级联动效果
Feb 07 Javascript
详解angular 中的自定义指令之详解API
Jun 20 Javascript
详解layui中的树形关于取值传值问题
Jan 16 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
May 25 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
Sep 17 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
May 07 Javascript
详解如何在Javascript和Sass之间共享变量
Nov 13 #Javascript
JavaScript数组及常见操作方法小结
Nov 13 #Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
Nov 13 #Javascript
javascript操作元素的常见方法小结
Nov 13 #Javascript
Vue监听滚动实现锚点定位(双向)示例
Nov 13 #Javascript
vue项目中锚点定位替代方式
Nov 13 #Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 #Javascript
You might like
真正的ZIP文件操作类(php)
2007/07/21 PHP
调整PHP的性能
2013/10/30 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
javascript下string.format函数补充
2010/08/24 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
jquery蒙版控件实现代码
2010/12/08 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
根据配置文件加载js依赖模块
2014/12/29 Javascript
基于javascript html5实现3D翻书特效
2016/03/14 Javascript
js选择器全面解析
2016/06/27 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
简单理解Vue中的nextTick方法
2018/01/30 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
python求pi的方法
2014/10/08 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
Python 数据结构之队列的实现
2017/01/22 Python
python 字符串和整数的转换方法
2018/06/25 Python
python list转矩阵的实例讲解
2018/08/04 Python
python使用正则筛选信用卡
2019/01/27 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
计算机多媒体专业自荐信
2014/07/04 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
物业保安辞职信
2015/05/12 职场文书
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电