vue的pc端适配vw vh rem

  • Post author:
  • Post category:vue

安装命令: npm  i  postcss-px-to-viewport@1.1.1
		  npm  i   postcss-pxtorem@5.1.1

在这里插入图片描述
2.安装完之后在根目录新建postcss.config.js(和src目录平级)

module.exports = {
    plugins: {
      'postcss-px-to-viewport': {
        unitToConvert: 'px', // 需要转换的单位,默认为"px"
        viewportWidth: 1920, // 设计稿的视口宽度
        unitPrecision: 5, // 单位转换后保留的精度
        propList: ['*'], // 能转化为vw的属性列表
        viewportUnit: 'vw', // 希望使用的视口单位
        fontViewportUnit: 'vw', // 字体使用的视口单位
        selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
        minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
        mediaQuery: false, // 媒体查询里的单位是否需要转换单位
        replace: true, //  是否直接更换属性值,而不添加备用属性
        exclude: undefined, // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
        include: undefined, // 如果设置了include,那将只有匹配到的文件才会被转换
        landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
        landscapeUnit: 'vw', // 横屏时使用的单位
        landscapeWidth: 1920 // 横屏时使用的视口宽度
      },
      'autoprefixer': {
        overrideBrowserslist: [
          'Android 4.1',
          'iOS 7.1',
          'Chrome > 31',
          'ff > 31',
          'ie >= 8'
          // 'last 10 versions', // 所有主流浏览器最近10版本用
        ],
        grid: true
      },
      //rem适配区域
      'postcss-pxtorem': {  //1920
       //移动端的时候 vant的组件库是375px 自己的设计稿是750px
       // rootValue({ file }) {
       //  return file.indexOf('vant') !== -1 ? 37.5 : 75;
       // }, 
        rootValue: 37.5, //换算基数,默认100,规定根节点的font-size为1rem=100px,在设计稿上量出多少px直接在代码中写多少px
        propList: ['*']// 配置哪些文件中的尺寸需要转化为rem *表示所有的都要转化 Eg: ['!border']不转化border
      }
    }
  }

3.在src下新建u’tils目录=>rem.js

function setRem() { 
    const htmlWidth = document.documentElement.clientWidth || document.body.clientWidth
    // 得到html的Dom元素
    const htmlDom = document.getElementsByTagName('html')[0]
    // 设置根元素字体大小 htmlWidth 是浏览器的宽度  /96是把浏览器(1920px)分为96份 一份是20px也就是html根元素是默认20px
    htmlDom.style.fontSize = htmlWidth / 96 + 'px' 
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function () {
    setRem()
}

4.记得全局main.js引入rem.js
在这里插入图片描述
有的人问vh怎么适配: 比如可视化大屏需要照顾vh的高度 如果不是整屏,带滚动的就不用考虑vh
使用的less(最原始的方式计算)
按照1920*1080设计稿计算的
在这里插入图片描述
码云链接:vue项目pc适配源码地址


版权声明:本文为weixin_45441173原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。