https://github.com/yulimchen/vue3-h5-template
原版写法
vue.config.js
module.exports = {
...
css: {
loaderOptions: {
postcss: {
plugins: [
autoprefixer(),
pxtoviewport({
viewportWidth: designWidth, // 根据设计稿设定
minPixelValue: 1, // 最小的转换数值
unitPrecision: 2, // 转化精度,转换后保留位数
}),
],
},
},
},
}
package.json
"postcss": {
"plugins": {
"autoprefixer": {}
}
},
修改后
根目录新建 postcss.config.js
const path = require("path");
module.exports = ({ webpack }) => {
const designWidth = webpack.resourcePath.includes(
path.join("node_modules", "vant")
)
? 375
: 750;
return {
plugins: {
autoprefixer: {},
"postcss-px-to-viewport": {
unitToConvert: "px",
viewportWidth: designWidth,
unitPrecision: 6,
propList: ["*"],
viewportUnit: "vw",
fontViewportUnit: "vw",
selectorBlackList: [],
minPixelValue: 1,
mediaQuery: true,
exclude: [],
landscape: false,
},
},
};
};
删除 vue.config.js 里 css 下面 postcss 那部分代码
删除 package.json 里 postcss 那部分代码
注释
// postcss.config.js
module.exports = {
plugins: {
'postcss-px-to-viewport': {
unitToConvert: "px", // 要转化的单位
viewportWidth: 375, // UI设计稿的宽度
unitPrecision: 6, // 转换后的精度,即小数点位数
propList: ["*"], // 指定转换的css属性的单位,*代表全部css属性的单位都进行转换
viewportUnit: "vw", // 指定需要转换成的视窗单位,默认vw
fontViewportUnit: "vw", // 指定字体需要转换成的视窗单位,默认vw selectorBlackList: ["wrap"], // 指定不转换为视窗单位的类名,
minPixelValue: 1, // 默认值1,小于或等于1px则不进行转换
mediaQuery: true, // 是否在媒体查询的css代码中也进行转换,默认false
replace: true, // 是否转换后直接更换属性值
exclude: [/node_modules/], // 设置忽略文件,用正则做目录名匹配
}
}
}
参考:
https://www.cnblogs.com/zhangnan35/p/12682925.html
https://juejin.cn/post/7061866685166256142
https://www.freesion.com/article/720265593/