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 相关文章推荐
学习ExtJS form布局
Oct 08 Javascript
JavaScript实现的字符串replaceAll函数代码分享
Apr 02 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
Bootstrap文件上传组件之bootstrap fileinput
Nov 25 Javascript
JS实现身份证输入框的输入效果
Aug 21 Javascript
React教程之Props验证的具体用法(Props Validation)
Sep 04 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
Mar 26 Javascript
Vue单页及多页应用全局配置404页面实践记录
May 22 Javascript
js中自定义react数据验证组件实例详解
Oct 19 Javascript
Vue项目实现简单的权限控制管理功能
Jul 17 Javascript
js实现鼠标拖曳效果
Dec 30 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
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码(带平滑移动的效果)
2011/05/24 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
ES6中Array.find()和findIndex()函数的用法详解
2017/09/16 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
配置eslint规范项目代码风格
2019/03/11 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
js实现select下拉框选择
2020/01/11 Javascript
react基本安装与测试示例
2020/04/27 Javascript
python实现DES加密解密方法实例详解
2015/06/30 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
Python-jenkins模块之folder相关操作介绍
2020/05/12 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
东方通信股份有限公司VC面试题
2014/08/27 面试题
写一个函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度
2015/11/18 面试题
早会主持词
2014/03/17 职场文书
党员服务承诺书
2014/05/28 职场文书
地方白酒代理协议书
2014/10/25 职场文书
2016新年慰问信范文
2015/03/25 职场文书
python实现自定义日志的具体方法
2021/05/28 Python
四十九个javascript小知识实用技巧
2021/11/20 Javascript
TV动画《间谍过家家》公开PV
2022/03/20 日漫
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers
讲解Python实例练习逆序输出字符串
2022/05/06 Python