vue 深度选择器 >>> 或 /deep/ 或 ::v-deep
深度作用选择器简介如果你希望scoped样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用>>>操作符:<style scoped>.a >>> .b { /* ... */ }</style>有些像 Sass 之类的预处理器无法正确解析>>>。这种情况下你可以使用/deep/或::v-deep操作符取而代
·
深度作用选择器简介
如果你希望 scoped
样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>>
操作符:
<style scoped>
.a >>> .b { /* ... */ }
</style>
有些像 Sass 之类的预处理器无法正确解析 >>>
。这种情况下你可以使用 /deep/
或 ::v-deep
操作符取而代之——两者都是 >>>
的别名,同样可以正常工作。
一:scoped属性
1.scoped 会给局部区域的非组件元素和组件跟元素(不含组件内子元素)增加一个不重复的data属性
2.加了scoped 后若写样式, 会在每句 css 选择器末尾(编译后生成的css语句)加一个当前组件(大的 .a)的data属性选择器,若多层也是给最后末尾设置
//.a为大div父组件 .b为子组件根元素 .c为子组件内的子元素
.a .b .c{//多层
color:red
}
//会渲染成
.a .b .c[data-v-2311c06a]{
color:red
}
二: /deep/深度作用选择器
当scoped时,#app是父组件 button是子组件内的子元素 [data-v-7ba5bd90]是app的属性
//渲染前的源代码
#app button{
background-color: red;
}
#app /deep/ button{
background-color: yellow;
}
//下面是编译后的css语句
//不加/deep/的渲染效果 样式无效
#app button[data-v-7ba5bd90] {
background-color: red;
}
//加了/deep/的渲染效果 样式有效
#app[data-v-7ba5bd90] button {
background-color: yellow;
}
情况一:若/deep/后又多层嵌套
//渲染前
#app /deep/ button{
background-color: yellow;
span{
color:blue;
}
}
//渲染后 样式有效
#app[data-v-7ba5bd90] button span {
color: blue;
}
情况二:再换种写法 移动/deep/位置
//渲染前
#app button{
/deep/ span{
color:pink;
}
}
//渲染后 data-v-7ba5bd90是#app的属性 所以无效
#app button[data-v-7ba5bd90] span {
color: pink;
}
情况三:再换一种 又加个子元素
//渲染前
#app button{
span{
/deep/ span{
color:pink
}
}
}
//渲染后
#app button span[data-v-7ba5bd90] span {
color: pink;
}
综上可以看出.在哪里加的/deep/ ,data属性选择器就会跑到写的上一层去.
情况四:若写多个 /deep/
多个/deep/的情况下,只有最外层的/deep/有效,内层的其他/deep/都是无效的,写了也没意义,不建议写.
//渲染前
#app /deep/ button{
/deep/ span{
color:yellow
}
}
//打包后的样式显示
#app[data-v-7ba5bd90] button /deep/ span {
color: yellow;
}
更多推荐
已为社区贡献6条内容
所有评论(0)