在 Vue 组件里,CSS 默认是 scoped(作用域限定的),只对当前组件生效。
如果你想在 scoped 样式里,穿透到子组件的内部元素,就要用 :deep()
。
比如,你有一个子组件 Child.vue
,里面有:
子组件里的元素
然后你在父组件的 里想去修改
Child.vue
里的 .test
样式,正常是选不到的,
这时候就用 :deep()
:
这样就可以突破 scoped 限制,直接修改 .test
这个类了!
语法 | 意思 |
---|---|
:deep() |
让你在 scoped 样式中穿透作用域,选到子组件或内部元素 |
:deep()
里面可以是普通选择器,比如 .class
、#id
、tag
等。.parent :deep(.child) {
color: blue;
}
>>>
这种(早期写法)
>>>
是深度穿透符,意思是:从 .parent
穿透作用域,到 .child
。::v-deep
(官方推荐的新写法)
::v-deep
是 Vue3 官方推荐的指令式深度选择器。写法 | 备注 |
---|---|
:deep(.child) |
单独用,穿透到某个 class |
.parent >>> .child |
旧版写法,少数工具链还支持 |
.parent ::v-deep(.child) |
新版推荐写法,更标准更持久 |
vite
、vue-cli
这些现代工具,推荐用 ::v-deep
。>>>
这种可能将来会在某些构建工具中不支持。比如父组件:
子组件:
Hello
想让 .child
变色,父组件 可以写:
.parent ::v-deep(.child) {
color: orange;
}