CSS選擇器的權(quán)重與優(yōu)先規(guī)則

轉(zhuǎn)載聲明:此文章為轉(zhuǎn)載,點(diǎn)擊查看原文
如有侵權(quán)24小時(shí)內(nèi)刪除。聯(lián)系QQ:1522025433

我們在使用CSS對網(wǎng)頁元素定義樣式時(shí)經(jīng)常會遇到這種情況:要對一般元素應(yīng)用一般樣式,然后在更特殊的元素上覆蓋它們。那么我們怎么樣來保證我們所新定義的元素樣式能覆蓋目標(biāo)元素上原有的樣式呢? 在CSS中,會根據(jù)選擇器的特殊性來決定所定義的樣式規(guī)則的次序,具有更特殊選擇器的規(guī)則優(yōu)先于具有一般選擇器的規(guī)則,如果兩個(gè)規(guī)則的特殊性相同,那么后定義的規(guī)則優(yōu)先。
那么,又怎么來計(jì)算選擇器的特殊性呢?下面這張圖介紹了特殊性的計(jì)算方法:


我們把特殊性分為4個(gè)等級,每個(gè)等級代表一類選擇器,每個(gè)等級的值為其所代表的選擇器的個(gè)數(shù)乘以這一等級的權(quán)值,最后把所有等級的值相加得出選擇器的特殊值 。

    4個(gè)等級的定義如下:
第一等:代表內(nèi)聯(lián)樣式,如: style=””,權(quán)值為1000。
第二等:代表ID選擇器,如:#content,權(quán)值為100。
第三等:代表類,偽類和屬性選擇器,如.content,權(quán)值為10。
第四等:代表類型選擇器和偽元素選擇器,如div p,權(quán)值為1。
例如上圖為例,其中#NAV為二等選擇器,.ACTIVE為三等選擇器,UL、LI和A為四等選擇器。則整個(gè)選擇器表達(dá)式的特殊性的值為1*100+1*10+3*1=113

下面是一些計(jì)算示例:

注意:通用選擇器(*),子選擇器(>)和相鄰?fù)x擇器(+)并不在這四個(gè)等級中,所以他們的權(quán)值都為0。

我們再來看一個(gè)具體的例子:假如有以下組樣式規(guī)則,你能判斷出HTML代碼中的兩個(gè)標(biāo)題是什么顏色嗎?

#content div#main-content h2{
    color:red;
}

#content #main-content>h2{
    color:blue
}
body #content div[id="main-content"] h2{
    color:green;
}

#main-content div.paragraph h2{
    color:orange;
}
#main-content [class="paragraph"] h2{
    color:yellow;
}
div#main-content div.paragraph h2.first{
    color:pink;
}

以下是HTML代碼:

<div id="content">
    <div id="main-content">
        <h2>CSS簡介</h2>
        <p>CSS(Cascading Style Sheet,可譯為“層疊樣式表”或“級聯(lián)樣式表”)是一組格式設(shè)置規(guī)則,用于控制Web頁面的外觀。</p>
        <div class="paragraph">
            <h2 class="first">使用CSS布局的優(yōu)點(diǎn)</h2>
            <p>1、表現(xiàn)和內(nèi)容相分離 2、提高頁面瀏覽速度 3、易于維護(hù)和改版 4、使用CSS布局更符合現(xiàn)在的W3C標(biāo)準(zhǔn).</p>
        </div>
    </div>
</div>

判斷出來了么?答案是:兩個(gè)標(biāo)題都是紅色的!

讓我們來一起算算六個(gè)樣式規(guī)則各自的特殊性的值:
第一個(gè)特殊性的值=2*100+2*1=202
第二個(gè)特殊性的值=2*100+1=201
第三個(gè)特殊性的值=1*100+1*10+3*1=113
第四個(gè)特殊性的值=1*100+1*10+2*1=112
第五個(gè)特殊性的值=1*100+1*10+1*1=111
第六個(gè)特殊性的值=1*100+2*10+3*1=123

清楚了吧,第一個(gè)樣式規(guī)則以其202的高分一舉奪得了本次樣式選擇器特殊性大賽的冠軍,后面一些規(guī)則雖然看起來好像更復(fù)雜,但特殊性并不是拼誰的選擇器表達(dá)式寫得更長,ID選擇器才是王道!
理解選擇器的特殊性很重要,特別是在修復(fù)bug的時(shí)候,因?yàn)槟阈枰私饽男┮?guī)則優(yōu)先及其原因。
如果你遇到了似乎沒有起作用的CSS規(guī)則,很可能是出現(xiàn)了特殊性沖突。請?jiān)谀愕倪x擇器中添加他的一個(gè)父元素的ID,從而提高它的特殊性。如果這能解決問題,就說明樣式表中其他地方很可能有更特殊的規(guī)則,它覆蓋了你的規(guī)則。如果是這種情況,你可能需要檢查代碼,解決特殊性沖突,讓代碼盡可能簡潔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 我們在使用CSS對網(wǎng)頁元素定義樣式時(shí)經(jīng)常會遇到這種情況:要對一般元素應(yīng)用一般樣式,然后在更特殊的元素上覆蓋它們。那...
    izhongxia閱讀 618評論 0 0
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,171評論 1 92
  • 簡介網(wǎng)絡(luò)瀏覽器很可能是使用最廣的軟件。在這篇入門文章中,我將會介紹它們的幕后工作原理。我們會了解到,從您在地址欄輸...
    wengjq閱讀 2,319評論 2 15
  • 其實(shí)平時(shí)用得多的選擇器無非也就是那么幾個(gè),時(shí)間久了,許多不常用的選擇器就慢慢忘記了。為了不讓自己忘記這些選擇器,今...
    盛夏晚清風(fēng)閱讀 1,956評論 0 5
  • 文/安笛 海啊,海啊 從小你用海產(chǎn)品喂養(yǎng)我長大 但我不曾在你光滑的鋪滿沙粒的皮膚上嘻戲 不曾佇立在岸邊眺望 我有一...
    安笛閱讀 238評論 0 0

友情鏈接更多精彩內(nèi)容