Vue中的样式穿透
前言
前段时间,写一个轮播图组件的时候遇到了一个样式不生效的问题,通过样式穿透解决了,记录一下。
对于vue文件中的 <style>
标签,加上 scoped
属性,它的css样式只能用于当前的组件,它的原理的是通过使用 PostCSS 来实现转换
scoped 转换规则
- 组件的根元素、组件自身的后代元素、子组件的根元素都会加上该组件特定的
data-v-x
属性。 - css样式中,最后一个选择器会被添加上
data-v-xxx
属性选择器
1 | /* Father.vue */ |
1 | /* Child.vue */ |
转换后的代码:
样式穿透规则
如果你希望 scoped
样式中的一个选择器能够作用得“更深”,例如影响子组件,可以使用 >>>
操作符( /deep/
或 ::v-deep
操作符)
1 | <style scoped> |
1 | .a[data-v-f3f3eg9] .b { /* ... */ } |
可以看到使用了 >>>
操作符,属性选择器不会被加到 >>>
后的选择器上,这就方便我们操作样式
1 | <style scoped> |
用途: 当我们使用一些第三方的组件库的时候,对于某些样式不满意并且套的层次比较深的时候,我们可以使用样式穿透来改变样式。
参考资料:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 0x1461A0!