zoukankan      html  css  js  c++  java
  • vue学习(十五) >>>或/deep/或::v-deep深度作用选择器作用及使用

    深度作用选择器简介

    如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> 操作符:

    <style scoped>
    .a >>> .b { /* ... */ }
    </style>

    上述代码将会编译成: 

    .a[data-v-f3f3eg9] .b { /* ... */ }

    有些像 Sass 之类的预处理器无法正确解析 >>>。这种情况下你可以使用 /deep/ 或 ::v-deep 操作符取而代之——两者都是 >>> 的别名,同样可以正常工作。

    深度作用选择器作用

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

    一: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/后 属性选择器跑到前面去了

    情况一: 若/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;
    }
  • 相关阅读:
    September 29th 2017 Week 39th Friday
    September 28th 2017 Week 39th Thursday
    September 27th 2017 Week 39th Wednesday
    September 26th 2017 Week 39th Tuesday
    September 25th 2017 Week 39th Monday
    September 24th 2017 Week 39th Sunday
    angular2 学习笔记 ( Form 表单 )
    angular2 学习笔记 ( Component 组件)
    angular2 学习笔记 ( Http 请求)
    angular2 学习笔记 ( Router 路由 )
  • 原文地址:https://www.cnblogs.com/kunmomo/p/13573197.html
Copyright © 2011-2022 走看看