介绍及原理
原理
rem单位的特点,是1rem对应的px值等于根元素html的font-size值。也就是说,当根元素html的font-size值变化时,1rem的值会跟随着动态变化。比如:
有一个div,他的高度设置为1rem,当页面内根元素html的font-size为16px时,这个div的高度就是16px;当页面内的根元素htmlfont-size为32px时,这个div的高度就是32px。
postcss-pxtorem插件会将我们写在样式中的px根据我们在vite.config.js中设置的rootValue值,按比例转化为rem。(要注意哦,行内样式中的px不会被转化为rem)
amfe-flexible插件会根据当前可展示区域的实际宽度,动态设置根元素html的font-size为可展示区域宽度的十分之一。(这也就是为什么我们在vite.config.js中设置rootValue值时需要设置为Ul设计稿的十分之 一,是为了与此插件对font-size的设置相对应)
介绍
amfe-flexible插件是用于移动端适配的一个工具。
它的主要作用是根据设备的宽度动态修改根元素html的字体大小,从而实现不同设备之间的页面适配。
这个插件是由阿里巴巴手淘团队开源的,它通过设置1rem等于视口宽度的十分之一(viewWidth/10),使得开发者可以使用rem单位来进行布局,而不必关心具体的像素值,从而简化了移动端不同屏幕尺寸的适配工作。
结合postcss-pxtorem使用:
为了进一步简化开发流程,amfe-flexible通常与postcss-pxtorem插件一起使用。
postcss-pxtorem是一个PostCSS插件,它可以自动将CSS文件中的px单位转换为rem单位。这样,开发者可以直接在CSS中使用px单位,而postcss-pxtorem会自动完成单位转换。
插件安装
npm install postcss-pxtorem amfe-flexible
如果运行项目后报错 PostCSS plugin postcss-pxtorem requires PostCSS 8.
需要降低 postcss-pxtorem 的版本
卸载默认安装的版本
npm uninstall postcss-pxtorem
安装指定版本
npm i postcss-pxtorem@5.1.1
插件配置
postcss-pxtorem配置
在vite.config.js中进行配置
// 引入pxtorem插件
import postCssPxToRem from "postcss-pxtorem";
export default defineConfig({
css: {
postcss: {
plugins: [
postCssPxToRem({
// 配置在将px转化为rem时 1rem等于多少px(因为我们搭配使用了amfe-flexible插件 此处我们需要设置的值应是UI设计稿全屏基准宽度的十分之一)
// 例如:当UI设计稿的全屏基准宽度是750px时 此处设置的值为75
// 注意:如果项目中使用了vant组件库,那么需要注意:vant的设计稿总宽度是375px 其十分之一应是37.5(需要区分设置)
rootValue({ file }) {
return file.indexOf('vant') !== -1 ? 37.5 : 75;
},
// 所有px均转化为rem
propList: ["*"]
// 若想设置部分样式不转化 可以在配置项中写出
// 例如: 除 border和font-size外 所有px均转化为rem
// propList: ["*", "!border","!font-size"],
// exclude: /node_modules/i, // 排除node_modules内的文件
})
]
}
}
})
postcss-pxtorem更多配置项:
amfe-flexible配置
在main.js中进行引入
import 'amfe-flexible'
补充
忽略单个属性的最简单方法是在像素单位声明中使用大写字母,将px写为Px或PX
.ignore {
border: 1Px solid;
border-width: 2PX;
}