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 相关文章推荐
jquery下将选择的checkbox的id组成字符串的方法
Nov 28 Javascript
JavaScript格式化数字的函数代码
Nov 30 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
Feb 03 Javascript
使用jQuery插件创建常规模态窗口登陆效果
Aug 23 Javascript
js charAt的使用示例
Feb 18 Javascript
JS取数字小数点后两位或n位的简单方法
Oct 24 Javascript
Jquery Easyui表单组件Form使用详解(30)
Dec 19 Javascript
最通俗易懂的javascript变量提升详解
Aug 05 Javascript
vue router+vuex实现首页登录验证判断逻辑
May 17 Javascript
turn.js异步加载实现翻书效果
Jul 25 Javascript
vuejs中父子组件之间通信方法实例详解
Jan 17 Javascript
JavaScript实现页面高亮操作提示和蒙板
Jan 04 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代码
2012/06/08 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
Redis使用Eval多个键值自增的操作实例
2016/11/04 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
情人节之礼 js项链效果
2012/02/13 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
javascript定时器完整实例
2015/02/10 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
JavaScript初学者必看“new”
2017/06/12 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
2019/04/17 Javascript
详解Vue、element-ui、axios实现省市区三级联动
2019/05/07 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
python快速查找算法应用实例
2014/09/26 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
Pycharm安装并配置jupyter notebook的实现
2020/05/18 Python
Keras官方中文文档:性能评估Metrices详解
2020/06/15 Python
Autopep8的使用(python自动编排工具)
2021/03/02 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
毕业生自荐书
2013/12/18 职场文书
成考报名单位证明范本
2014/01/16 职场文书
TV动画《间谍过家家》公开PV
2022/03/20 日漫