原文:CSS Specificity: Things You Should Know
如果頁面制作的時候遇到定義的CSS不起作用,你可能遇到了CSS優(yōu)先級的問題。CSS優(yōu)先級在CSS里算是比較難懂的部分,不同權(quán)重的CSS選擇器有可能就是你出錯的原因,所以作為頁面開發(fā)人員必須了解CSS優(yōu)先級特性。
CSS優(yōu)先級特性概述:
1. 通過優(yōu)先級計算,讓瀏覽器先解析哪條CSS規(guī)則。
2. 優(yōu)先級特性經(jīng)常是你定義的CSS規(guī)則不起作用的原因,雖然你認為起了作用,然而卻不是。
3. 每個選擇器都有它的優(yōu)先級層次。
4. 如果兩個規(guī)則同時作用于一個元素,優(yōu)先級高的獲勝。
5.優(yōu)先級特性可以分為四類:inline styles, IDs, classes+attributes and elements.
6.英文好的可以看下這兩篇文章, CSS Specificity Wars和CSS Specificity for Poker Players
7.如果選擇器有兩個等級相同的值,后面的值會覆蓋前面的值。
8.如果選擇器有等級不同的值,以等級高的算,比如!important。
9.擁有更多優(yōu)先特性選擇器的規(guī)則更具有優(yōu)先特性。
10.后面的規(guī)則肯定會覆蓋前面相同的規(guī)則。
11.內(nèi)嵌的CSS規(guī)則優(yōu)先級特性最高。
12.CSS文件里,ID的優(yōu)先級特性最高。
13.想要增加優(yōu)先級,可以使用ID。
14.class比element級別高。
15.選擇器分為四個級別,計算方式 0,0,0,0。
16.推薦一個CSS優(yōu)先級計算器,CSS Specificity Calculator.。
什么是優(yōu)先級特性
優(yōu)先級計算是為了決定瀏覽器解析哪條規(guī)則。“優(yōu)先級特性的權(quán)重關系CSS的顯示。”Understanding Specificity (明白優(yōu)先級特性)。
選擇器的優(yōu)先級特性決定了同一個元素多條規(guī)則下哪條規(guī)則實施。Selector Specificity (選擇器優(yōu)先級)。
每個選擇器都有優(yōu)先級,兩個選擇器作用與同一個元素,優(yōu)先級高的獲勝。
CSS優(yōu)先級級別:
1. Inline styles 內(nèi)嵌頁面的CSS樣式,比如<h1 style=”color:#000″></h1>
2.IDs 比如#myid
3.Classes, attributes and pseudo-classes 比如 .classes, [attributes]:hover, :focus
4.Elements and pseudo-elements 比如 div,p,h1,包括:before和:after
怎樣測量優(yōu)先級?
內(nèi)嵌的為1000,ID為100,Classes, attributes and pseudo-classes為10,Elements and pseudo-elements 為1。
body #content .data img:hover 這里的特性值為 0,1,2,2
下面這張星球大戰(zhàn)的圖片也許能幫助你記憶:
來測試下吧
1 | * { } | 0 |
3 | li:first-line { } | 2 (one element, one pseudo-element) |
5 | ul ol+li { } | 3 (three elements) |
7 | ul ol li.red { } | 13 (one class, three elements) |
9 | style=”” | 1000 (one inline styling) |
11 | div p { } | 2 (two HTML selectors) |
13 | div p.sith { } | 12 (two HTML selectors and a class selector) |
15 | body #darkside .sith p { } | 112 (HTML selector, id selector, class selector, HTML selector; 1+100+10+1) |
實際經(jīng)驗:
1. 使用LVHA定義鏈接,即link-visited-hover-active,參考[Link Specificity]
2. 如果不是為了兼容瀏覽器,最好不要使用 !important
3. 使用ID讓特性更具體,比如a.high寫成 ul#blog li a.high
CSS工具與資 英文好的去看下
CSS Specificity for Poker Players
CSS specificity calculator
Understanding Specificity Tutorial
Cascade Inheritance: Specificity
CSS 2.1 Selectors Explained
CSS Specificity Bugs in IE
CSS Structure and Rules
Specificity