当前位置: 首页 > 工具软件 > DEEP > 使用案例 >

/deep/深度作用选择器作用及使用

南门焱
2023-12-01

作用:
当你不想写全局样式,想写scoped局部样式不污染全局,又想更改子组件内的样式,此时就可以用/deep/深度作用选择器.满足你所有想法

初识/deep/时百度搜索看了好多人的文章,有些内容不全有些理解错误(仅个人观点)
自己记录下

  1. 在了解/deep/之前需先了解scoped属性作用
    看博文https://blog.csdn.net/weixin_45842655/article/details/103490900或者点我跳转
  2. 看官方文档 比较全面
    https://vue-loader.vuejs.org/zh/guide/scoped-css.html或者点我跳转

一: scoped属性

1.scoped会给局部区域的非组件元素和组件根元素(不含组件内子元素)增加一个不重复的data属性
2.加了scoped后若写样式,会在每句css选择器的末尾(编译后生成的css语句)加一个当前组件(大的.a)的data属性选择器,若多层也是给最后末尾设置

因给.c设置了.a的属性选择器,然后.c属于子组件内的子元素不会增加.a的属性所以自然获取不到此元素 样式无效

//.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;
  }
//不加/deep/的渲染效果 样式无效
#app button[data-v-7ba5bd90] {
	background-color: red;
}
//加了/deep/的渲染效果 样式有效
#app[data-v-7ba5bd90] button {
	background-color: yellow;
}
  • [data-v-7ba5bd90]是app的属性,button是子组件内的子元素并无此属性,所以不加/deep/样式,获取不到元素,样式无效
  • 加了/deep/后 属性选择器跑到前面去了

1. 若/deep/后有多层嵌套

//渲染前
  #app /deep/ button{
    background-color: yellow;
    span{
      color:blue;
    }
  }
//渲染后 样式有效
#app[data-v-7ba5bd90] button span {
	color: blue;
}

2. 再换种写法 移动/deep/位置

//渲染前
  #app button{
    /deep/ span{
      color:pink;
    }
  }
//渲染后 data-v-7ba5bd90是#app的属性 所以无效
#app button[data-v-7ba5bd90] span {
	color: pink;
}

3. 再换一种 又加个子元素

//渲染前 
  #app button{
    span{
      /deep/ span{
        color:pink
      }
    }
  }
//渲染后
#app button span[data-v-7ba5bd90] span {
	color: pink;
}

综上可以看出.在哪里加的/deep/ ,data属性选择器就会跑到写的上一层去.

4. 若写多个/deep/
多个/deep/的情况下,只有最外层的/deep/有效,内层的其他/deep/都是无效的,写了也没意义,不建议写.

//渲染前
  #app /deep/ button{
    /deep/ span{
        color:yellow
    }
  }
//打包后的样式显示
#app[data-v-7ba5bd90] button /deep/ span {
	color: yellow;
}

完结撒花

 类似资料: