vue3+vite+ts自适应实现(postcss-pxtorem)
当pc端或移动端H5等项目中需要根据当前浏览器窗口或屏幕尺寸来自适应的改变页面内元素尺寸时,就可以借助下述插件和相关配置来实现。
适用范围:vue3+vite+ts
如果靓仔你的项目是使用vue2或是使用vue-cli和webpack的vue3,也不用惊慌,请直接跳转:
vue2/vue3自适应实现https://blog.csdn.net/m0_71537867/article/details/137442448?spm=1001.2014.3001.5502步骤一:相关依赖下载
npm install postcss-pxtorem --save
npm install amfe-flexible --save
步骤二:在main.ts中进行引入
import 'amfe-flexible'
步骤三:在vite.config.ts中进行配置
当项目内只需要有UI设计稿这一种基准宽度时,使用下述配置方法
// 引入pxtorem插件
import postCssPxToRem from "postcss-pxtorem";
export default defineConfig({
plugins: [vue()],
css: {
postcss: {
plugins: [
postCssPxToRem({
// 配置在将px转化为rem时 1rem等于多少px(因为我们搭配使用了amfe-flexible插件 此处我们需要设置的值应是UI设计稿全屏基准宽度的十分之一)
// 当UI设计稿的全屏基准宽度是1920px时 此处设置的值为192
rootValue: 192,
// 所有px均转化为rem
propList: ["*"]
// 若想设置部分样式不转化 可以在配置项中写出
// eg: 除 border和font-size外 所有px均转化为rem
// propList: ["*", "!border","!font-size"],
})
]
}
}
})
当项目内引入了vantUI组件库,vant的UI设计稿基准宽度是375px,如果与我们开发时UI给出的设计稿基准宽度不同,使用下述配置方法(移动端有时会引入vant组件库)
// 引入pxtorem插件
import postCssPxToRem from "postcss-pxtorem";
export default defineConfig({
plugins: [vue()],
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: ["*"]
// 若想设置部分样式不转化 可以在配置项中写出
// 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根据我们在vite.config.ts中设置的rootValue值,按比例转化为rem。(要注意哦,行内样式中的px不会被转化为rem)
amfe-flexible插件会根据当前可展示区域的实际宽度,动态设置<html>的font-size为可展示区域宽度的十分之一。(这也就是为什么我们在vite.config.ts中设置rootValue值时需要设置为UI设计稿的十分之一,是为了与此插件对font-size的设置相对应)
更多推荐
所有评论(0)