scoped
<style lang="scss" scoped>
.page {
color: #09f;
}
.flex {
position: relative;
width: 50px;
height: 50px;
opacity: 0.5;
border: none;
// resolve 1px problem
&::after {
content: "";
position: absolute;
top: 0;
left: 0;
border: 1px solid #000;
border-radius: 10px;
box-sizing: border-box;
width: 200%;
height: 200%;
transform: scale(0.5);
transform-origin: left top;
}
}
</style>
看看编译结果:
.page[data-v-26084dc2] {
color: #09f;
}
.flex[data-v-26084dc2] {
position: relative;
width: 6.667vw;
height: 6.667vw;
opacity: 0.5;
border: none;
}
.flex[data-v-26084dc2]::after {
content: "";
position: absolute;
top: 0;
left: 0;
border: 1px solid #000;
border-radius: 1.333vw;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 200%;
height: 200%;
-webkit-transform: scale(0.5);
transform: scale(0.5);
-webkit-transform-origin: left top;
transform-origin: left top;
}
再看看html结构:
可以看到给所有元素添加了一个独一无二的属性data-v-26084dc2。并且重新编译后,添加的依然是这个属性。不同组件添加的属性不同。
CSS Modules
在webpack.base.conf.js中:
{
test: /\.(sc|sa|c)ss$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
// enable CSS Modules
modules: true,
// customize generated class names
localIdentName: '[local]_[hash:base64:8]'
}
},
'postcss-loader',
'sass-loader',
]
}
在html结构中:
<p :class="$style.page">login page</p>
写样式的时候:
<style lang="scss" module>
.page {
color: #09f;
}
</style>
如果有多个类名,可以写成数组,如需要postcss-px-to-viewport中的.ignore类名:
<p :class="[$style.tips, $style.ignore]">home page: hello world</p>
注意不要使用id选择器。
编译结果:
.page_1nmPiQ2K {
color: #09f;
}
.flex_k-ktwQUa {
position: relative;
width: 6.667vw;
height: 6.667vw;
opacity: 0.5;
border: none;
}
.flex_k-ktwQUa::after {
content: "";
position: absolute;
top: 0;
left: 0;
border: 1px solid #000;
border-radius: 1.333vw;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 200%;
height: 200%;
-webkit-transform: scale(0.5);
transform: scale(0.5);
-webkit-transform-origin: left top;
transform-origin: left top;
}
再看html结构:
可以看到是对类名进行了修改。