Vue 中 scoped 样式穿透 el-dialog 失败原因与解决

75 阅读1分钟

接下来,我们把对话框 header 的背景换成天蓝色;因为样式要渗透到子组件内部,所以得用上深度选择器,代码如下

点击查看源代码

image.png

咦,样式竟然没生效?先确认一下编译后的 CSS 长什么样。在开发者工具里搜 .el-dialog__header,能看到最终生成的是下面这段代码:

[data-v-7ba5bd90] .el-dialog__header { background-color: skyblue; }

scoped 会在当前组件的根节点自动追加一段形如 [data-v-7ba5bd90] 的属性,而对话框的 .el-dialog__header 并不在这棵子树里,因此选择器匹配不到,样式也就无法生效。

image.png

解决办法很简单:给组件包一层容器元素,让 Vue 把 data-v-7ba5bd90 打到该容器上,这样深度选择器就能命中,样式即可生效。

image.png

点击查看源代码