vue2/vue3自适应实现(postcss-pxtorem)
当pc端或移动端H5等项目中需要根据当前浏览器窗口或屏幕尺寸来自适应的改变页面内元素尺寸时,就可以借助下述插件和相关配置来实现。
适用范围:vue2、使用vue-cli和webpack的vue3
如果靓仔你的项目是使用vue3+vite+ts,也不用惊慌,请直接跳转:
vue3+vite+ts自适应实现https://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的设置相对应)
更多推荐
所有评论(0)