*
。範例如下:
* { color: #000; }
+
、>
、~
、空格和||
。:not()
、:is()
和:where
等,這些偽類本身並不影響 CSS 優先順序,影響優先順序的是括號裡面的選擇器。例如:
:not() {}
需要注意的是,只有邏輯組合偽類的優先順序是 0,其他偽類的優先順序並不是這樣的。body { color: #333; }
.foo { color: #666; }
[foo] { color: #666; }
:hover { color: #333; }
#foo { color: #999; }
style
屬性內聯樣式的優先順序是 4。範例如下:
<span style="color: #ccc;">http://c.biancheng.net/</span>
!important
優先順序是最高的,也就是 5。範例如下:
.foo { color: #fff !important; }
!important
是頂級優先順序,可以重置 JavaScript 設定的樣式,唯一推薦使用的場景就是使 JavaScript 設定無效。例如:
.foo[style*="color: #ccc"] {
color: #fff !important;
}
+0
;+1
;+10
;+100
。
選擇器 |
計算值 |
計算細則 |
---|---|---|
* {} |
0 |
1 個 0 級通配選擇器,優先順序數值為 0 |
dialog {} |
1 |
1 個 1 級標籤選擇器,優先順序數值為 1 |
ul > li {} |
2 |
2 個 1 級標籤選擇器,1 個 0 級選擇符,優先順序數值為 1+0+1 |
li > ol + ol {} |
3 |
3 個 1 級標籤選擇器,2 個 0 級選擇符,優先順序數值為 1+0+1+0+1 |
.foo {} |
10 |
1 個 2 級類名選擇器,優先順序數值為 10 |
a:not([rel=nofollow]) {} |
11 |
1 個 1 級標籤選擇器,1 個 0 級否定偽類,1 個 2 級屬性選擇器,優先順序數值為 1+0+10 |
a:hover {} |
11 |
1 個 1 級標籤選擇器,1 個 2 級偽類,優先順序數值為 1+10 |
ol li.foo {} |
12 |
1 個 2 級類名選擇器,2 個 1 級標籤選擇器,1 個 0 級空格選擇符,優先順序數值為 1+0+1+10 |
li.foo.bar {} |
21 |
2 個 2 級類名選擇器,1 個 1 級標籤選擇器,優先順序數值為 10×2+1 |
#foo {} |
100 |
1 個 3 級 ID 選擇器,優先順序數值為 100 |
#foo .bar p {} |
111 |
1 個 3 級 ID 選擇器,1 個 2 級類名選擇器,1 個 1 級標籤選擇器,優先順序數值為 100+10+11 |
<html lang="zh-CN"> <body class="foo">顏色是?</body> </html>CSS 程式碼:
body.foo:not([dir]) { color: red; } html[lang] > .foo { color: blue; }我們先來計算一下各自的優先順序數值。
body.foo:not([dir])
,出現了 1 個標籤選擇器 body,1 個類名選擇器.foo
和 1 個否定偽類:not
,以及屬性選擇器[dir]
,計算結果是 1+10+0+10,也就是 21。html[lang] > body.foo
,出現了 1 個標籤選擇器 html,1 個屬性選擇器[lang]
和 1 個類名選擇器.foo
,計算結果是 1+10+10,也就是 21。
<style>body { color: red; }</style>
<link rel="stylesheet" href="a.css">
<link rel="stylesheet" href="b.css">
body { color: yellow; }
在 b.css 中有:body { color: blue; }
此時,body 的顏色是藍色,如下圖所示,因為 blue 這段 CSS 語句在文件中是最後出現的。