Vue中样式穿透原理

443 阅读1分钟

Vue中的scoped作用:样式隔离,防止组件间的样式污染。如果当前组件的style拥有了scoped,那么它定义的样式只能作用于当前组件。*


原理:给当前组件的每个DOM节点添加了一个data-v-hash值的属性,然后再当前组件的选择器后面添加对应的属性选择器,实现样式隔离。  

解决办法:样式穿透 /deep/  。当前组件调用了第三方组件,又需要修改第三方组件样式但又不能取消scoped造成样式污染,就只能使用样式穿透。

调整UI组件样式失败案例:

image.png

input输入框样式未能修改

原因:打包编译后,选择器被编译成el-input下的带有[data-v-7baxx]的属性的input[xx]属性选择器,然而DOM结构中,input输入框没有那个属性。

image.png

image.png

  样式穿透真正的原理:哪个选择器后面跟了/deep/,那么它编译后,选择器就会携带对应的属性,变成带有当前组件唯一标识的属性选择器。从而可以真正选中对应的DOM元素 即带有属性的.el-input 下的input

image.png