Vue2的项目自适应屏幕大小

甲方爸爸之前的需要只是要PC端访问,没有做不同屏幕的自适应尺寸,这个年代谁的屏幕没有1980.然后经过几个月的页面修改好现在需要适应各式各样的屏幕,做自适应。关键项目写完了,一个个改费时费心费力。经过不段的探索有两个方案可行,一个方案有个bug,一个完美适配

一方案

1.安装npm i lib-flexible --save npm install postcss-pxtorem -D lib-flexible库的新版本:github.com/amfe/lib-fl...

2.在项目入口文件main.js中引入lib-flexible

bash 复制代码
import 'lib-flexible/flexible.js'

3.在项目根目录的index.html 头部删除自动生成的meta标签, lib-flexible会根据屏幕自动生成相对于的meta标签

bash 复制代码
// 删除
<meta name="viewport" content="width=device-width, initial-scale=1.0">

4.在项目根新建postcss.config.js

js 复制代码
//另一种可以新建postcss.config.js,写入如下代码
module.exports = {
  plugins: {
    // 兼容浏览器,添加前缀
    autoprefixer: {
      overrideBrowserslist: [
        "Android 4.1",
        "iOS 7.1",
        "Chrome > 31",
        "ff > 31",
        "ie >= 8",
        "last 10 versions", // 所有主流浏览器最近10版本用
      ],
      grid: true,
    },
    "postcss-pxtorem": {
      rootValue: 16, //结果为:设计稿元素尺寸/16,比如元素宽320px,最终页面会换算成 20rem
      propList: ["*"], //是一个存储哪些将被转换的属性列表,这里设置为['*']全部,假设需要仅对边框进行设置,可以写['*', '!border*']
      unitPrecision: 5, //保留rem小数点多少位
      //selectorBlackList: ['.radius'],  //则是一个对css选择器进行过滤的数组,比如你设置为['fs'],那例如fs-xl类名,里面有关px的样式将不被转换,这里也支持正则写法。
      replace: true, //这个真不知到干嘛用的。有知道的告诉我一下
      mediaQuery: false, //媒体查询( @media screen 之类的)中不生效
      minPixelValue: 12, //px小于12的不会被转换
    },
  },
};

// 蓝湖上设计稿自定义为375px 测量值直接写入即可 若设计稿为750px 则rootValue: 32

在vue.config.js内配置

js 复制代码
 // 配置pc端适配
    css: {
        loaderOptions: {
          postcss: {
              postcssOptions: { #加上此配置,网上很多是没有,运行会报错
                plugins: [
                  require('postcss-pxtorem')({
                    rootValue : 16, // 换算的基数
                    minPixelValue: 2,
                    selectorBlackList  : [], // 忽略转换正则匹配项 列入一些ui库, ['.el'] 就是忽略elementUI库
                    propList   : ['*'],
                  }),
                ]
              }
            }
        }
    }

此方案不打开控制台或不改变浏览器的显示区域宽高,会自动把html的fontsize改变造成样式变化,每次都要手动刷新下才正常,此bug暂时没找到解决方法,感觉不是很好。

方案二(完美解决)

1.在自己项目utils下新建rem.js文件

js 复制代码
// rem等比适配配置文件
// 基准大小
const baseSize = 16
// 设置 rem 函数
function setRem () {
  // 当前页面屏幕分辨率相对于 1920宽的缩放比例,可根据自己需要修改
  const scale = document.documentElement.clientWidth / 1920
  // 设置页面根节点字体大小("Math.min(scale, 2)" 指最高放大比例为2,可根据实际业务需求调整)
  document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function () {
  setRem()
}

2.在main.js中引入适配文件

bash 复制代码
import '@/utils/rem.js'

3.安装postcss-pxtorem

bash 复制代码
npm i postcss-pxtorem

如果有报错版本太高可以试下低版本

bash 复制代码
npm i postcss-pxtorem@5.1.1 -D

在vue.config.js内配置

js 复制代码
 // 配置pc端适配
    css: {
        loaderOptions: {
          postcss: {
              postcssOptions: { #加上此配置,网上很多是没有,运行会报错
                plugins: [
                  require('postcss-pxtorem')({
                    rootValue : 16, // 换算的基数
                    minPixelValue: 2,
                    selectorBlackList  : [], // 忽略转换正则匹配项 列入一些ui库, ['.el'] 就是忽略elementUI库
                    propList   : ['*'],
                  }),
                ]
              }
            }
        }
    }

PostCSS Loader被用来处理Less文件,并且在loaderOptions中配置了PostCSS插件,但是PostCSS Loader的选项对象中没有包含plugins属性。// 使用postcssOptions属性来配置PostCSS插件 postcssOptions

忽略不转换

1、 就是配置上面vue.config.js的selectorBlackList

2、 就是把px设置为PX就不会转换, 例如: min-width: 800PX

相关推荐
别拿曾经看以后~几秒前
【el-form】记一例好用的el-input输入框回车调接口和el-button按钮防重点击
javascript·vue.js·elementui
我要洋人死3 分钟前
导航栏及下拉菜单的实现
前端·css·css3
科技探秘人15 分钟前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人15 分钟前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR21 分钟前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香23 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q24985969326 分钟前
前端预览word、excel、ppt
前端·word·excel
小华同学ai31 分钟前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书
Gavin_91540 分钟前
【JavaScript】模块化开发
前端·javascript·vue.js
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍