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操作cookie的文章(设置,删除cookies)
Apr 01 Javascript
jQuery与其它库冲突的解决方法
Jun 25 Javascript
Jquery插件之打造自定义的select标签
Nov 30 Javascript
javascript级联下拉列表实例代码(自写)
May 10 Javascript
js遍历子节点子元素附属性及方法
Aug 19 Javascript
JavaScript设计模式之外观模式介绍
Dec 28 Javascript
DOM节点删除函数removeChild()用法实例
Jan 12 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
Jun 04 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
深入理解jQuery()方法的构建原理
Dec 05 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 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数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
PHP使用NuSOAP调用Web服务的方法
2015/07/18 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
CSS+JS构建的图片查看器
2006/07/22 Javascript
番茄的表单验证类代码修改版
2008/07/18 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
bootstrap模态框远程示例代码分享
2017/05/22 Javascript
原生JS实现的轮播图功能详解
2018/08/06 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
mapboxgl实现带箭头轨迹线的代码
2021/01/04 Javascript
python中定义结构体的方法
2013/03/04 Python
对Python中plt的画图函数详解
2018/11/07 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
python编写计算器功能
2019/10/25 Python
python实现12306登录并保存cookie的方法示例
2019/12/17 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
css3 border旋转时的动画应用
2016/01/22 HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
linux面试题参考答案(4)
2014/09/21 面试题
大学生涯自我鉴定
2014/01/16 职场文书
企业消防安全责任书
2014/07/23 职场文书
2016年教师节慰问信
2015/12/01 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
Python实现简单的俄罗斯方块游戏
2021/09/25 Python