我們在使用CSS對網頁元素定義樣式時經常會遇到這種情況:要對一般元素應用一般樣式,然后在更特殊的元素上覆蓋它們。那么我們怎么樣來保證我們所新定義的元素樣式能覆蓋目標元素上原有的樣式呢?
在CSS中,會根據選擇器的特殊性來決定所定義的樣式規(guī)則的次序,具有更特殊選擇器的規(guī)則優(yōu)先于具有一般選擇器的規(guī)則,如果兩個規(guī)則的特殊性相同,那么后定義的規(guī)則優(yōu)先。
那么,又怎么來計算選擇器的特殊性呢?
下面這張圖介紹了特殊性的計算方法:
我們把特殊性分為4個等級,每個等級代表一類選擇器,每個等級的值為其所代表的選擇器的個數乘以這一等級的權值,最后把所有等級的值相加得出選擇器的特殊值。
4個等級的定義如下:
l 第一等:代表內聯(lián)樣式,如: style=””,權值為1000。
l 第二等:代表ID選擇器,如:#content,權值為100。
l 第三等:代表類,偽類和屬性選擇器,如.content,權值為10。
l 第四等:代表類型選擇器和偽元素選擇器,如div p,權值為1。
例如上圖為例,
其中#NAV為二等選擇器;
.ACTIVE為三等選擇器;
UL、LI和A為四等選擇器。
則整個選擇器表達式的特殊性的值為1*100+1*10+3*1=113
下面是一些計算示例:
注意:通用選擇器(*),子選擇器(>)和相鄰同胞選擇器(+)并不在這四個等級中,所以他們的權值都為0。
我們再來看一個具體的例子:
假如有以下組樣式規(guī)則,你能判斷出HTML代碼中的兩個標題是什么顏色嗎?
1 #content div#main-content h2{ 2 color:red; 3 } 4 #content #main-content>h2{ 5 color:blue 6 } 7 body #content div[id="main-content"] h2{ 8 color:green; 9 }10 11 #main-content div.paragraph h2{12 color:orange;13 }14 #main-content [class="paragraph"] h2{15 color:yellow;16 }17 div#main-content div.paragraph h2.first{18 color:pink;19 }以下是HTML代碼:
1<div id="content">2 <div id="main-content">3 <h2>CSS簡介</h2>4 <p>CSS(Cascading Style Sheet,可譯為“層疊樣式表”或“級聯(lián)樣式表”)是一組格式設置規(guī)則,用于控制Web頁面的外觀。</p>5 <div class="paragraph">6 <h2 class="first">使用CSS布局的優(yōu)點</h2>7 <p>1、表現(xiàn)和內容相分離 2、提高頁面瀏覽速度 3、易于維護和改版 4、使用CSS布局更符合現(xiàn)在的W3C標準.</p>8 </div>9 </div>判斷出來了么?答案是:兩個標題都是紅色的!
讓我們來一起算算六個樣式規(guī)則各自的特殊性的值:
第一個特殊性的值=2*100+2*1=202
第二個特殊性的值=2*100+1=201
第三個特殊性的值=1*100+1*10+3*1=113
第四個特殊性的值=1*100+1*10+2*1=112
第五個特殊性的值=1*100+1*10+1*1=111
第六個特殊性的值=1*100+2*10+3*1=123
清楚了吧,第一個樣式規(guī)則以其202的高分一舉奪得了本次樣式選擇器特殊性大賽的冠軍,后面一些規(guī)則雖然看起來好像更復雜,但特殊性并不是拼誰的選擇器表達式寫得更長,ID選擇器才是王道!
理解選擇器的特殊性很重要,特別是在修復bug的時候,因為你需要了解哪些規(guī)則優(yōu)先及其原因。
如果你遇到了似乎沒有起作用的CSS規(guī)則,很可能是出現(xiàn)了特殊性沖突。請在你的選擇器中添加他的一個父元素的ID,從而提高它的特殊性。如果這能解決問題,就說明樣式表中其他地方很可能有更特殊的規(guī)則,它覆蓋了你的規(guī)則。如果是這種情況,你可能需要檢查代碼,解決特殊性沖突,讓代碼盡可能簡潔。
新聞熱點
疑難解答