当pc端或移动端H5等项目中需要根据当前浏览器窗口或屏幕尺寸来自适应的改变页面内元素尺寸时,就可以借助下述插件和相关配置来实现。

适用范围:vue2、使用vue-cli和webpack的vue3

如果靓仔你的项目是使用vue3+vite+ts,也不用惊慌,请直接跳转:

vue3+vite+ts自适应实现icon-default.png?t=N7T8https://blog.csdn.net/m0_71537867/article/details/137386992?spm=1001.2014.3001.5502步骤一:相关依赖下载

npm install postcss-pxtorem@5.1.1 --save

npm install amfe-flexible --save

postcss-pxtorem插件需要下载上述的指定版本,若下载默认的最新版本,使用时有可能会出现如下报错:

PostCSS plugin postcss-pxtorem requires PostCSS 8 

步骤二:在main.js或main.ts中进行引入

import 'amfe-flexible'

步骤三:在根目录下创建postcss.config.js文件,并在文件内进行配置

module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue ({ file }) {
        // 配置在将px转化为rem时 1rem等于多少px(因为我们搭配使用了amfe-flexible插件 此处我们需要设置的值应是UI设计稿全屏基准宽度的十分之一)
        // 当UI设计稿的全屏基准宽度是750px时 此处设置的值为75 但项目中使用了vant组件库 vant的设计稿总宽度是375px 其十分之一应是37.5(需要区分设置)
        // 如果是pc端项目没有使用vant组件库或是UI设计稿的基准宽度也是375px时 此处可以直接设置一个值
        return file.indexOf('vant') !== -1 ? 37.5 : 75
      },
      // 所有px均转化为rem
      propList: ["*"]
      // 若想设置部分样式不转化
      // eg: 除 border/font-size 外所有px 转 rem
      // propList: ["*", "!border","!font-size"]
    }
  }
}

验证效果:

可以设置一个元素的宽度为我们UI设计稿的基准宽度,使其正好占满一行。此时,可以看到不论浏览器窗口如何放大缩小,该元素宽度都是正好占满一行。

转换原理:

rem单位的特点,是1rem对应的px值等于<html>的font-size值。也就是说,当<html>的font-size值变化时,1rem的值会跟随着动态变化。比如:

有一个div,他的高度设置为1rem,当页面内<html>的font-size为16px时,这个div的高度就是16px;当页面内<html>的font-size为32px时,这个div的高度就是32px。

<html>自由飞,rem永相随!

postcss-pxtorem插件会将我们写在样式中的px根据我们在postcss.config.js中设置的rootValue值,按比例转化为rem。(要注意哦,行内样式中的px不会被转化为rem)

amfe-flexible插件会根据当前可展示区域的实际宽度,动态设置<html>的font-size为可展示区域宽度的十分之一。(这也就是为什么我们在vite.config.ts中设置rootValue值时需要设置为UI设计稿的十分之一,是为了与此插件对font-size的设置相对应)

GitHub 加速计划 / vu / vue
82
16
下载
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:4 个月前 )
9e887079 [skip ci] 2 个月前
73486cb5 * chore: fix link broken Signed-off-by: snoppy <michaleli@foxmail.com> * Update packages/template-compiler/README.md [skip ci] --------- Signed-off-by: snoppy <michaleli@foxmail.com> Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 6 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐