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 相关文章推荐
js之WEB开发调试利器:Firebug 下载
Jan 13 Javascript
JS网页播放声音实现代码兼容各种浏览器
Sep 22 Javascript
textarea 控制输入字符字节数(示例代码)
Dec 27 Javascript
javascript 自定义回调函数示例代码
Sep 26 Javascript
AngularJS仿苹果滑屏删除控件
Jan 18 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
Mar 31 Javascript
JavaScript String 对象常用方法总结
Apr 28 Javascript
基于BootStrap环境写jQuery tabs插件
Jul 12 Javascript
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 Javascript
Vue中的scoped实现原理及穿透方法
May 15 Javascript
浅谈webpack4.x 入门(一篇足矣)
Sep 05 Javascript
基于JavaScript canvas绘制贝塞尔曲线
Dec 25 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
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
jquery插件ContextMenu设置右键菜单
2017/03/13 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
react-native之ART绘图方法详解
2017/08/08 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
2018/05/31 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
VueCli3.0中集成MockApi的方法示例
2019/07/05 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
python实现的登录和操作开心网脚本分享
2014/07/09 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
一个入门级python爬虫教程详解
2021/01/27 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
2014保险公司内勤工作总结
2014/12/16 职场文书
长城的导游词
2015/01/30 职场文书
小学见习报告
2015/06/23 职场文书
房屋质量投诉书
2015/07/02 职场文书
家庭聚会祝酒词
2015/08/11 职场文书