现象:在Vue.js项目中,在使用组件化开发时,经常需要修改组件内部的样式,但Vue的样式封装特性(如
<style scoped>
)会阻止外部样式直接作用于组件内部。引入穿透选择器: 在Vue.js 中,
>>>
、/deep/
、::v-deep
、::v-deep()、:deep()
都是用于穿透组件样式封装的选择器。作用:使父组件的样式能够影响到子组件的 DOM。
深度选择器
允许从父组件
中穿透到子组件内部
,可直接修改子组件
的样式。能够跨越组件的封装边界,对内部元素进行样式定制。同时在需要定制第三方UI库组件样式时尤为有用。
1. >>> (深度选择器)
CSS原生中的深度选择器语法,用于穿透样式封装。
在Vue单文件组件中,通常会搭配CSS预处理器使用,需要配置支持。
Sass等预处理器无法正确解析>>>,因为Vue会将其视为普通CSS选择器的一部分。因此不推荐使用。
<template>
<div class="parent">
<ChildComponent />
</div>
</template>
<style scoped>
.parent >>> .child {
/* 样式 */
}
</style>
2. /deep/
是Vue 2.x中用于穿透组件样式封装的一种方式,类似于Sass的/deep/或/deep/的别名::v-deep。
它支持CSS预处理器(如Sass、Less)和CSS原生样式。
在Vue 3.x中,虽然一些构建工具或库可能仍然兼容,/deep/不再被官方直接支持。
<style scoped>
/deep/ 类名 {
/* 样式 */
}
</style>
3. ::v-deep
用于替代原生CSS中的>>>和Vue 2.x中的/deep/。它支持CSS预处理器和CSS原生样式。
<style scoped>
::v-deep 类名 {
/* 样式 */
}
</style>
4.::v-deep()
是Vue 3 Composition API中的特殊用法。通过v-deep()函数在<style scoped>中使用,用于穿透组件样式封装。
<style scoped>
::v-deep(类名) {
/* 样式 */
}
</style>
5.:deep()
是Vue 3是官方推荐的深度选择器。通过 deep()函数在 <style scoped> 中使用,用于穿透组件样式封装。
<style scoped>
:deep(类名) {
/* 样式 */
}
</style>
总结
标签:Vue,区别,样式,deep,用法,组件,选择器,CSS From: https://blog.csdn.net/Estrellayun_/article/details/144009930
- >>> 和 /deep/ 用于穿透样式封装,由于 >>> Sass等预处理器无法正确解析 >>>,需要配置支持、/deep/ 是一种较旧的语法,存在兼容性问题,推荐使用::v-deep。
- 推荐使用:因为它们是更标准的 CSS 伪元素语法,且以避免可能的编译错误。
- Vue2::::v-deep
- Vue3: :deep()- >>> → /deep/ → ::v-deep → ::v-deep() → :deep() // 关系选择器 → 伪元素 → 伪类