• 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;
    }
  • 相关阅读:
    [C++] 习题 2.18 倒序查找字串
    [C++] 二叉树计算文件单词数
    [C++] 例题 2.7.1 用栈实现简易计算器
    [C++] 非递归实现前中后序遍历二叉树
    [C++] 习题 2.15 实现简单环形队列
    数据结构、算法及应用
    [C++] 习题 2.14 用队列实现桶排序
    svn add 所有文件的命令
    解决Error opening terminal: xterm.的错误
    linux下删除项目中所有.svn的命令
  • 原文地址:https://www.cnblogs.com/kunmomo/p/13573197.html
Copyright © 2020-2023  润新知