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引起的内存泄漏问题
Oct 08 Javascript
可简单避免的三个JS发布错误的详细介绍
Aug 02 Javascript
IE、FF浏览器下修改标签透明度
Jan 28 Javascript
JSON与XML优缺点对比分析
Jul 17 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
Aug 27 Javascript
JavaScript优化以及前段开发小技巧
Feb 02 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
Oct 31 Javascript
微信小程序实现YDUI的ScrollTab组件
Feb 02 Javascript
Vue底层实现原理总结
Feb 17 Javascript
vue 实现的树形菜的实例代码
Mar 19 Javascript
JavaScript常用工具方法封装
Feb 12 Javascript
JavaScript在web自动化测试中的作用示例详解
Aug 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
php中的MVC模式运用技巧
2007/05/03 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
php stripslashes和addslashes的区别
2014/02/03 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
基于laravel belongsTo使用详解
2019/10/18 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
jquery随机展示头像代码
2011/12/21 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
简单了解python中对象的取反运算符
2019/07/01 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
办公室主任岗位职责
2013/11/08 职场文书
预备党员思想汇报
2014/01/08 职场文书
小学生学习感言
2014/03/10 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
PyTorch的Debug指南
2021/05/07 Python
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js