【脸脸酱】css /deep/ 深度选择器的用法(在scoped文件修改外部组件样式)

本文详细解析了在Vue框架中如何使用样式穿透技术,特别是/deep/、>>>和::v-deep深度选择器的应用场景。通过实例展示了如何在不影响全局样式的情况下,调整第三方组件库的样式,以及解决父组件样式无法覆盖子组件样式的难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/deep/应用场景:

(1)引用了第三方组件库,只需要在当前页面修改第三方组件库的样式以做到不污染全局样式。通过在样式标签上使用scoped达到样式只制作用到本页面。但有时又需要调整组件的样式,在含有scoped的style里里面在写样式对子组件是不生效的。(以前都是再加一个不含scoped的style标签,通过外层组件添加唯一class来区分组件,修改各种第三方组件的样式。 )

(2)在父组件中的样式无法修改子组件的样式这时可以使用深度作用选择器 /deep/;

上图是修改ant-design里面.ant-input的样式,经测试,/deep/直接放到.ant-input前面和放在自定义class前面都可以达到想要的效果。

网上还看到了说/deep/有些浏览器有兼容问题,/deep/替换为>>>就可以解决问题,试了一下,报错。(更新一下,最近补全了一下深度选择器的知识,报错是因为使用了css预加载器)

>>>

深度作用选择器的简写形式

  1. 只作用于css,不支持css预加载器(less/scss)
  2. /deep/的简写形式,适用于Vue2.x版本,Vue3.x版本使用会报错

/deep/

Vue2.x的深度作用选择器正式写法

  1. 仅适用于Vue2.x版本
  2. 支持css预加载器

::v-deep

Vue3.x的深度作用选择器正式写法

总结

Vue2.x版本使用优先级 /deep/ > >>>
Vue3版本使用::v-deep

### 如何通过 VueScoped CSS深度选择器修改组件样式Vue 中,`<style scoped>` 提供了一种机制来限制样式的作用范围,使其只应用于当前组件中的 DOM 节点。然而,默认情况下,这些作用域样式的规则不会穿透到子组件中。为了能够修改组件样式,可以使用 **深度选择器** `/deep/` 或 `>>>`。 以下是具体方法和示例: #### 方法说明 当 `<style scoped>` 应用于一个组件时,Vue 会自动为该组件内的 HTML 元素添加唯一的属性(通常是类似于 `data-v-f3f3eg9` 的形式)。同时,所有的样式也会被改写成带有相同属性的选择器[^2]。这确保了样式的隔离性。如果希望某些样式能影响子组件,则可以通过深度选择器覆盖默认的行为。 #### 示例代码 下面是一个完整的例子展示如何利用深度选择器修改组件样式: ```vue <!-- ParentComponent.vue --> <template> <div class="parent"> <ChildComponent /> </div> </template> <style scoped> /* 正常的本地样式 */ .parent { background-color: lightblue; } /* 使用深度选择器修改组件样式 */ /deep/ .child-class { color: green !important; /* 强制设置颜色 */ } </style> ``` ```vue <!-- ChildComponent.vue --> <template> <div class="child-class">我是子组件的内容。</div> </template> <style scoped> .child-class { color: blue; /* 默认蓝色会被父组件的绿色覆盖 */ } </style> ``` 在这个例子中,尽管 `.child-class` 在子组件中有定义的颜色是蓝色,但由于父组件使用了深度选择器 `/deep/` 并设置了更高的优先级 (`!important`),最终显示的文字颜色将是绿色[^1]。 #### 注意事项 - 如果项目中使用的是 PostCSS 插件或者较新的 Vue 版本 (Vue CLI),可能需要替换 `/deep/` 为 `::v-deep` 来兼容最新的语法标准。 - 对于 Vue 3 用户来说,推荐直接采用 Composition API 配合动态类名的方式处理复杂的跨层样式需求,而不是依赖传统的深度选择器[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脸脸酱。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值