Vue中如何使用CSS深度选择器覆盖子组件样式

秋静大大_9120

秋静大大_9120

2026-08-07

397人浏览

原创

scoped样式无法覆盖子组件内部类是因为子组件dom不携带父组件的data-v-xxx属性;vue 2应使用::v-deep,vue 3推荐:deep();穿透多层需多次:deep()或嵌套写法,并须依据真实dom结构精准定位。

vue中如何使用css深度选择器覆盖子组件样式

scoped样式为什么覆盖不了子组件内部类

因为 scoped 会让 Vue 给当前组件所有元素加上类似 data-v-7bf4ea52 的属性,同时把 CSS 规则编译成带该属性的选择器(比如 .nav-link[data-v-7bf4ea52])。而子组件的 DOM 节点不携带这个属性,所以父组件里直接写 .nav-link { color: red; } 根本不匹配。

::v-deep 和 :deep() 哪个该用

Vue 2.x 项目必须用 ::v-deep(或已废弃但仍兼容的 /deep/);Vue 3 + `