vue 深度选择器 >>> 或 /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
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值