第一种🔎: postcss-pxtorem + lib-flexible
安装: npm i -s postcss-pxtorem lib-flexible
使用方法:
- 在根目录下创建postcss.config.js
// const px2rem = require('postcss-pxtorem');
// module.exports = {
// plugins: [px2rem({ //根元素字体大小
// rootValue: 192, // 设计稿宽度或者目前正常分辨率的1/ 10
// //匹配CSS中的属性,* 代表启用所有属性
// propList: ['*'],
// //转换成rem后保留的小数点位数
// unitPrecision: 5,
// //小于12px的样式不被替换成rem
// minPixelValue: 12,
// //selectorBlackList: ['.qz-'],// 要忽略的选择器并保留为px。
// //忽略一些文件,不进行转换,比如我想忽略 依赖的UI框架
// exclude: ['node_modules']
// })]
// };
2.找打lib-flexible的源码,并更改尺寸
3. main.js 引入
import '../node_modules/lib-flexible/flexible'
4.重启项目即可
第二种🔎: postcss-px-to-viewport
安装: npm i postcss-px-to-viewport
使用方法: 在根目录下创建postcss.config.js
module.exports = {
plugins: {
'postcss-px-to-viewport': {
unitToConvert: 'px', // 需要转换的单位,默认为"px"
viewportWidth: 1920, // 设计稿的视口宽度
unitPrecision: 5, // 单位转换后保留的精度
propList: ['*'], // 能转化为vw的属性列表
viewportUnit: 'vw', // 希望使用的视口单位
fontViewportUnit: 'vw', // 字体使用的视口单位
selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
mediaQuery: false, // 媒体查询里的单位是否需要转换单位
replace: true, // 是否直接更换属性值,而不添加备用属性
exclude: undefined, // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
include: undefined, // 如果设置了include,那将只有匹配到的文件才会被转换
landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
landscapeUnit: 'vw', // 横屏时使用的单位
landscapeWidth: 1920 // 横屏时使用的视口宽度
}
}
}
注意事项:
postcss-px-to-viewport 对内联,外联,内嵌样式都有效,但是对js动态css无效,所以要使用静态的class定义变化样式,通过js改变dom元素的class实现样式变化。