zoukankan      html  css  js  c++  java
  • VUE中的scoped属性和深度选择器

    scoped属性

    众所周知,在vue中我们在style标签中写样式时,为了防止当前组件或页面的样式对外界其它的页面组件造成影响,会给vue中的 style标签 加上 scoped 属性,该属性使样式变成了局域样式,只作用于当前组件。vue中的scoped属性的设计思想就是让当前组件的样式不会修改到其它 地方的样式。

    原理

    通过观察页面的DOM发现:vue中的scoped属性给相应的DOM结构和CSS选择器都加上了标识,这个唯一的标记保证了唯一性,从而达到了样式的 私有化,不会污染全局的作用。这个标识就是给标签添加上一个 [data-v-hash] 的属性。

    需要注意的是,如果当父组件、子组件同时使用 scoped 属性时,子组件最外层的标签会被加上当前组件的hash值,同时也会被加上父组件的hash 值。

    同样的CSS样式部分的选择器也会被加上这个标识属性。
    总结vue中的scoped属性实现样式私有化:
    • 给相应的HTML的DOM元素添加一个 [data-v-hash] 属性的唯一标识。
    • 给相应的DOM元素的样式选择器添加一个与标签相同的 [data-v-hash] 属性标识。
    • 如果父子组件的style标签都有scoped属性时,子组件最外层的标签会同时有父组件和子组件的 [data-v-hash] 的属性标识
    • 如果组件中还有组件(没有scoped属性)或者第三方组件时,只会给最外层的组件里的标签加上 [data-v-hash] 的属性标识,对组件内部的组件不影响。

    深度选择器

    在vue中,为了不让当前组件的样式修改其它地方的样式,就有了scoped属性。但有时候不想用默认的样式,需要自定义自己的样式时,比如:引用的第三方组件库, 同时还不想去除scoped属性,避免污染全局,可以选择使用深度选择器。
    在vue中,可以使用深度选择器 >>> 来穿透scoped,来修改样式,但是像 sass 之类的预处理语言无法正确解析 >>>,可以使用 /deep/ 操作符(>>> 的别名) 或者 ::v-deep 操作符(>>> 的别名)来实现同样的效果。
            <script scoped>
                    外层类名 >>> 第三方组件类名{
    
                    }
                </script>
          
            <script scoped>
                    外层类名 /deep/ 第三方组件类名{
    
                    }
                </script>
          
            <script scoped>
                    外层类名 ::v-deep 第三方组件类名{
    
                    }
                </script>
          
  • 相关阅读:
    Web持久化存储Web SQL、Local Storage、Cookies(常用)
    浅谈TypeScript
    浅谈JavaScript、ES5、ES6
    AngularJS1.3一些技巧
    AngularJS学习总结
    poj-----Ultra-QuickSort(离散化+树状数组)
    HDUOJ---1241Oil Deposits(dfs)
    HDUOJ---携程员工运动会场地问题
    HDUOJ------2398Savings Account
    HDUOJ-----2399GPA
  • 原文地址:https://www.cnblogs.com/aloneer/p/13612260.html
Copyright © 2011-2022 走看看