css权威指南_特指度

<!DOCTYPE html>
<html>
    <head>
        <meta charset="urf-8">
        <title>css权威指南_特指度</title>
        <style>
            body{
                margin: 0;
                padding: 0;
            }
            .sign{
                color: red;
                font-weight: bold;
            }
            h1, h2, #grape3, h4{
                height: 2em; /*特指度 = 0,1,0,2  相同属性选择符在同一特指度位累加*/
            }
            h1{
                background: red; /*特指度 = 0,0,0,1 */
                
            }
            h2{
                background: silver; /*特指度 = 0,0,0,1 */
            }
            
            h1.grape{
                color: white; /*特指度 = 0,0,1,1 */
            }
            h2.grape2{
                color: yellow; /*特指度 = 0,0,1,1 */
            }
            
            #grape3{
                background: green; /*特指度 = 0,1,0,0 */
            }
            *{
                color: gray; /*通用选择符将所有元素字体颜色设置为灰色,但是根据规则
                通用选择符不增加特指度即0,0,0,0*/
            }
            h4{
                background: blue;
                color: white;
            }
            h4 > span{
                background: white; /*特指度 = 0,0,1,1 注意这里连接符不增加特指度,连零都不是*/
            }
            h5{
                background: transparent !important; /*重要声明和非重要声明分开处理,重要声明始终胜出*/
            }
        </style>
    </head>
    <body>
        <h3>
            <pre>
            /*
                From:
                    CSS权威指南(第四版)_3.1_特指度
                Q:
                    我们可以用多种方式选择设置元素的样式, 同一个元素可能被一个或多个规则选择
                而且每个规则的选择符都不尽相同,因为匹配的元素只能为其中一个样式,那么如何
                知道那个规则胜出?
                
                A: 
                    用户代理会计算每个规则中选择符的特制度,然后将其依附到规则中的声明上,如果
                两个或多个属性声明有冲突,特制度最高的声明胜出
                
                R:
                    一个特指度值由四部分构成,例如0,0,0,0 选择符的特指度通过下述规则确定:
                    1、选择符中的每个ID属性加0,1,0,0
                    2、选择符中的每个类属性值、属性选择或伪类加0,0,1,0
                    3、选择符中的每个元素和伪元素加0,0,0,1,伪类到底有没有特指度在css2中表述的有些
                    自相矛盾,不过css2.1明确指出,伪元素有特指度
                    <span class="sign">4、连接符和通用选择符不增加特指度</span>
            </pre>                
        </h3>
        /*section_1*/
        <h1 class="grape">abc</h1>
        /*section_2*/
        <h2 class="grape2">def</h2>
        /*section_3*/
        <h3 id="grape3">hij</h3>
        /*section_4*/
        <h4 class="grape4">sss<span>XXXX</span>sss</h4> /*span元素字体颜色继承h4样式,即字体颜色为白色*/
            同时我们还设置了全局字体颜色为灰色,实际显示效果也为灰色,这里体现了另一个特点:
            即规则第四条: 继承不增加特指度,具体来说跟连接符一样连特指度都没有那就是连零都不是,
            通用选择符的特指度为0,0,0,0,所以span内元素字体颜色为灰色,而非继承自父元素
        */
        
        /*section_5*/
        <h5 style="background: orange; height: 2em;">行内样式特指度</h5>
        /*目前所见到的特指度都以零开头,因此你可能在想, 那一位为什么要存在呢? 存在必定有用。
        那一位是为行内样式声明保留的,行内样式声明的特指度比其他的声明都要高*/
    </body>
</html>
原文地址:https://www.cnblogs.com/alplf123/p/10802859.html