关于前端:壁虎科技前端移动端和PC端自适应解决方案支持vite打包配置

51次阅读

共计 2929 个字符,预计需要花费 8 分钟才能阅读完成。

需要

  • 挪动端自适应
  • pc 端自适应(在肯定屏幕范畴内)

实现原理

应用 amfe-flexible 和 postcss-px2rem 依赖包,编译我的项目后主动把 px 转换成 rem,会依据屏幕大小来动静扭转 html 的 font-size 值

想理解 rem 实现自适应的原理,大家能够自行谷歌,这里就不讲原理了

不懂原理的同学们也没关系,上面跟着操作就能够实现。

实现教程

第一步,装置组件依赖

npm install amfe-flexible -S
npm install postcss-px2rem -S

第二步,引入 lib-flexible.js

上面是以 vue 我的项目作为例子

在入口文件 main.js 中引入

import "amfe-flexible/index.js";

第三步,在目录 public/index.html 文件退出上面一行代码

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">

第四步,配置 postcss-px2rem

如果是 vue-cli3 构建的我的项目,那么在根目录找到 vue.config.js 文件,(没有找到的话,就新建一个)

配置内容如下

css: {
    loaderOptions: {css: {},
        postcss: {
          plugins: [require("postcss-px2rem")({remUnit: 75})
          ]
       }
    }
}

下面一段代码放到 module.exports = {},的大括号外面

残缺代码如下:

module.exports = {
    // 根本门路
    publicPath: './',
    css: {
        loaderOptions: {css: {},
          postcss: {
        plugins: [require("postcss-px2rem")({remUnit: 75})
        ]
      }
        }
    },
    // 代理
    devServer: {
        port: 8080,
        // host: 'localhost',
        https: false, // https:{type:Boolean}
        open: true, // 配置主动启动浏览器
        disableHostCheck: true,
        "proxy": {
        "/*": {
            "target": "http://xxx",
            "changeOrigin": true
        }
        }
    },
}

下面的 remUnit: 75, 这里的设置 75,就是设计图是 750px,如果你的设计图是 640px, 那么你改成 64 即可,如果你的设计图是 1920px,那么你改成 192 即可

如果你的我的项目是 vue-cli2 构建的

装置依赖 postcss-pxtorem

npm i -D postcss-pxtorem

找到根目录下.postcssrc.js 文件,在外面增加以下代码:

module.exports = {
  plugins: {'postcss-import': {},
    'postcss-url': {},
    autoprefixer: {browsers: ['Android >= 4.0', 'iOS >= 7']
    },
    'postcss-pxtorem': {
      rootValue: 75,
      propList: ['*', '!border*']
    }
  }
}

propList 示意匹配的属性 (示意匹配所有属性) 能够在外面用 !border 示意不装备边框,这样不会把边框 1px 变成 1rem

在 css 中不想 px 转 rem 能够这样, 在款式前面写 /no/ 正文即可
.nav {
  width: 400px;
  height: 300px;
  background: red;
  border: 1px solid black; /*no*/
}

以上配置完后,关上你们的我的项目编译后的页面,关上调试页面扭转宽度就看到了,html 的 font-size 值实时产生扭转,和你写的 css px 值,都主动转成 rem 了

第五步,pc 端做自适应解决方案

以上的是全自适应,如果你想管制自适应的范畴,比如说,你做 pc 我的项目,想在 1300px – 1800px 之间做自适应,小于 1300px 就设置个固定的 html font-size 值,大于 1800px 就设置个固定的 html font-size 值

这样就能够使得 pc 我的项目布局的页面,不至于始终放大自适应,也不至于始终放大

要害原理是通过媒体查问来管制,代码如下, 在你公共款式(或者全局款式)文件写上

/* 屏幕大于 1800px 的时候写死 html 的 font-size 值为 200px */
@media screen and (min-width: 1800px) {
    html {
        font-size: 200px !important;
        /*no*/
    }
}
/* 屏幕小于 1300px 的时候写死 html 的 font-size 值为 130px */
@media screen and (max-width: 1300px) {
    html {
        font-size: 130px !important;
        /*no*/
    }
}

以上只是一个例子,挪动端你就能够不必设置了,pc 端,你想在什么范畴,依据你的我的项目页面调就好了

vite 打包的我的项目配置

新建个 postcss.config.js 文件,下如下代码

装置依赖 postcss-pxtorem

npm i -D postcss-pxtorem
module.exports = {
  plugins: {
    autoprefixer: {overrideBrowserslist: ['Android >= 4.0', 'iOS >= 7']
    },
    'postcss-pxtorem': {
      rootValue: 192,
      propList: ['*', '!border*']
    }
  }
}

根目录创立 .browserslistrc 文件

last 2 versions
> 1%
iOS 7
last 3 iOS versions

记得先写后面三步!!!

踩坑以及解决

当你应用 webpack 打包的时候,如果你在款式里写了 /*no*/, 就是不想 px 转换成 rem 的时候,例如下面说过的代码

/* 屏幕大于 1800px 的时候写死 html 的 font-size 值为 200px */
@media screen and (min-width: 1800px) {
    html {
        font-size: 200px !important;
        /*no*/
    }
}

这个 px 不转 rem 是依赖正文的,可是生产环境打包的时候就会把正文去掉,这样导致你写了 /*no*/ 不转这条 css 属性,也没成果,打包删除了正文,它就会主动帮你转了。

解决办法一. 能够把款式写到 index.html 文件的 style 标签中

这样打包不会删除 index.html 的 css 正文,如果你的 webpack 也把 index.html 的正文给删除了,那么你能够通过 webpack 把 index.html 不删除正文,这个自行谷歌搜寻很多不打包压缩 index.html 文件,我我的项目不会删除 index.html 的正文

解决办法二. 通过配置 sass-loader,使得打包时不删除所有的 css 正文

参考文章:webpack 中 postcss-px2rem 生产环境中正文生效

参考文章

前端中应用 amfe-flexible 和 postcss-pxtorem

vite 中配置 postcss 与 postcss-plugin-px2rem

正文完
 0