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打开新窗口同时关闭旧窗口
Jan 16 Javascript
javascript中onclick(this)用法介绍
Apr 19 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
Jul 13 Javascript
js的延迟执行问题分析
Jun 23 Javascript
全面了解JavaScript的数据类型转换
Jul 01 Javascript
AngularJS入门教程之表格实例详解
Jul 27 Javascript
jQuery 利用ztree实现树形表格的实例代码
Sep 27 jQuery
vue-cli项目中怎么使用mock数据
Sep 27 Javascript
js中call()和apply()改变指针问题的讲解
Jan 17 Javascript
详解vue中router-link标签所必备了解的属性
Apr 15 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 Javascript
vue+element实现动态加载表单
Dec 13 Vue.js
详解如何在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 XML操作类DOMDocument
2009/12/16 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
详谈js模块化规范
2017/07/07 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
python处理cookie详解
2014/02/07 Python
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
python生成excel的实例代码
2017/11/08 Python
JavaScript中的模拟事件和自定义事件实例分析
2018/07/27 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
python中的django是做什么的
2020/07/31 Python
Python操作Excel的学习笔记
2021/02/18 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
学生会部长竞聘书
2014/03/31 职场文书
工伤赔偿协议书范本
2014/04/15 职场文书
公司董事长岗位职责
2014/06/08 职场文书
暑假社会实践心得体会
2014/09/02 职场文书
计划生育个人总结
2015/03/02 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python