CSS 的隔离主要有两类方案,一类是运行时的通过命名区分,一类是编译时的自动转换 CSS,添加上模块唯一标识。
运行时的方案最典型的就是 BEM,它是通过 .block__element–modifier 这种命名规范来实现的样式隔离,不同的组件有不同的 blockName,只要按照这个规范来写 CSS,是能保证样式不冲突的。
但是这种方案毕竟不是强制的,还是有样式冲突的隐患。
编译时的方案有两种,一种是 scoped,一种是 css modules(还有Css in Js)。
参考资料
https://blog.csdn.net/JunChow520/article/details/117020367
Github:https://github.com/postcss/postcss#usage
Vite自身已经集成PostCSS,无需再次安装。另外也无需单独创建PostCSS配置文件,已集成到vite.config.js的css选项中。可直接配置css.postcss选项即可。Vite将自动在*.vue文件中所有的style标签以及所有导入的.css文件中应用PostCSS.
API列表:https://postcss.org/api/
import postcssPxtorem from "postcss-pxtorem";
import autoprefixer from 'autoprefixer'
export default {
//样式表插件
css: {
postcss: {
plugins: [
autoprefixer({
overrideBrowserslist: [
"Android 4.1",
"iOS 7.1",
"Chrome > 31",
"ff > 31",
"ie >= 8",
"last 10 versions", // 所有主流浏览器最近10版本用
],
grid: true,
}),
postcssPxtorem({
rootValue: 37.5,
propList: ['*'],
unitPrecision: 5
})
]
}
}
}
autoprefixer用于自动添加css产商前缀;
$ npm install autoprefixer --save-dev
项目地址
https://github.com/postcss/autoprefixer
$ npm install postcss-px-to-viewport --save-dev
postcsspxtoviewport可以将CSS中的px单位转化为vw,1vw等于1/100视口宽度。
{
unitToConvert: 'px',//需要转换的单位,默认为"px"
viewportWidth: 320,//设计稿的视口宽度
unitPrecision: 5,//单位转换后保留的精度
propList: ['*'],//能转化为vw的属性列表,支持*和!字符
viewportUnit: 'vw',//希望使用的视口单位
fontViewportUnit: 'vw',//字体使用的视口单位
selectorBlackList: [],//需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。可以使正则表达式,普通字符默认是包含匹配
minPixelValue: 1,//设置最小的转换数值,如果为1的话,只有大于1的值会被转换
mediaQuery: false,//媒体查询里的单位是否需要转换单位
replace: true,//是否直接更换属性值,而不添加备用属性
/*exclude和include是可以一起设置的,将取两者规则的交集。*/
exclude: undefined,//正则字符或者数组,忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
include: undefined,/正则或者数组,只有匹配到的文件才会被转换,例如只转换 'src/mobile' 下的文
landscape: false,//是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
landscapeUnit: 'vw',//横屏时使用的单位
landscapeWidth: 568 //横屏时使用的单位
}
npm install postcss-pxtorem --save-dev
postcss-pxtorem 可以将CSS中的px单位转化为rem。
{
rootValue: 16,
unitPrecision: 5,
propList: ['font', 'font-size', 'line-height', 'letter-spacing'],//能转化为vw的属性列表,支持*和!字符
selectorBlackList: [],//需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。可以使正则表达式,普通字符默认是包含匹配
replace: true,
mediaQuery: false, //允许在媒体查询中转换 px。
minPixelValue: 0,
exclude: /node_modules/i
}