層疊樣式表/重要
important 關鍵字使宣告優先於普通宣告 - 那些沒有標記 important 關鍵字的宣告。所以 “p { color: red ! important }” 優先於 “p { color: green }”。
重要宣告的語法是
- 屬性: 值 ! important
規則的相對重要性也取決於它的來源: 是來自文件作者指定的樣式表、使用者指定的樣式表還是使用者代理指定的樣式表。
宣告從最不重要到最重要的順序
- 使用者代理宣告
- 使用者普通宣告
- 作者普通宣告
- 作者重要宣告
- 使用者重要宣告
使用者重要宣告優先於其他所有宣告。這允許使用者覆蓋頁面設計者的演示以滿足他們的需求。例如,使用者可以將文字顏色覆蓋為黑色背景上的黃色,並使用較大的字型以使文字更易閱讀。
確定來自一個或多個樣式表中的哪個規則適用於給定元素的過程稱為級聯,因此得名層疊樣式表。
用於此示例的 HTML 文件是
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>'!important' CSS declarations</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<p>Paragraph 1.</p>
<p id="para2">Paragraph 2.</p>
<p>Paragraph 3.</p>
</body>
</html>
該文件使用樣式表 style.css 進行樣式設定
p {
background-color:#fff ;
color:#000 ! important
}
#para2 {
background-color:#fc9 ;
color:#00f ;
border:1px solid black
}
p {
background-color:#9cf ;
color:#f00
}
這三段將如何呈現?
考慮第一個段落元素 (
段落 1。
).
第一個和第三個選擇器 (p 選擇器) 匹配該元素。第二個選擇器 (#para2) 不匹配該元素。與該元素匹配的兩個選擇器的規則將應用於該元素。規則按它們在原始碼中出現的順序列出,如下所示:
| 宣告 | 選擇器 | 權重 | ||||||
|---|---|---|---|---|---|---|---|---|
| 特異性 | ||||||||
| 屬性 | 值 | 重要性* | 樣式屬性 |
ID 選擇器 |
類 選擇器 |
元素 選擇器 |
來源 順序** |
|
| background-color | #fff | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 1 |
| color | #000 | p | 作者重要 (排名 4) |
0 | 0 | 0 | 1 | 2 |
| background-color | #9cf | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 6 |
| color | #00f | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 7 |
- * 重要性的排名從 1 (最不重要) 到 5 (最重要)。此頁面的後續示例展示了其他排名。
- ** 來源順序列是宣告在檔案中的位置,例如
background-color:#9cf是檔案中的第六個宣告。
應用於該元素的規則按屬性排序。對於每個屬性,規則按重要性升序排序,然後按特異性 (樣式屬性、ID 選擇器、類選擇器、元素選擇器) 排序,最後按來源順序排序。排序列表中的最後一個屬性值獲勝 (即,最重要的、最具體的規則的值)。
| 宣告 | 選擇器 | 權重 | ||||||
|---|---|---|---|---|---|---|---|---|
| 特異性 | ||||||||
| 屬性 | 值 | 重要性 | 樣式屬性 |
ID 選擇器 |
類 選擇器 |
元素 選擇器 |
來源 順序 |
|
| background-color | #fff | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 1 |
| background-color | #9cf | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 6 |
| color | #00f | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 7 |
| color | #000 | p | 作者重要 (排名 4) |
0 | 0 | 0 | 1 | 2 |
- 使用的宣告以粗體顯示,以及決定規則之間決勝負的獲勝者。
background-color 設定為 #9cf (淺藍色)。background-color 屬性的兩個規則具有相同的權重和特異性,因此第二個規則獲勝,因為它在原始碼中出現得更晚。
color 設定為 #000 (黑色)。color 屬性的規則具有不同的權重,因此最重要的規則獲勝。
第一段渲染為
段落 1。
考慮第二個段落元素 (
段落 2。
).
第一個和第三個選擇器 (p 選擇器) 匹配該元素。第二個選擇器 (#para2) 也匹配該元素。所有三個選擇器的規則都應用於該元素。規則按它們在原始碼中出現的順序列出,如下所示:
| 宣告 | 選擇器 | 權重 | ||||||
|---|---|---|---|---|---|---|---|---|
| 特異性 | ||||||||
| 屬性 | 值 | 重要性 | 樣式屬性 |
ID 選擇器 |
類 選擇器 |
元素 選擇器 |
來源 順序 |
|
| background-color | #fff | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 1 |
| color | #000 | p | 作者重要 (排名 4) |
0 | 0 | 0 | 1 | 2 |
| background-color | #fc9 | #para2 | 作者普通 (排名 3) |
0 | 1 | 0 | 0 | 3 |
| color | #00f | #para2 | 作者普通 (排名 3) |
0 | 1 | 0 | 0 | 4 |
| border | 1px solid black | #para2 | 作者普通 (排名 3) |
0 | 1 | 0 | 0 | 5 |
| background-color | #9cf | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 6 |
| color | #00f | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 7 |
對規則進行排序得到
| 宣告 | 選擇器 | 權重 | ||||||
|---|---|---|---|---|---|---|---|---|
| 特異性 | ||||||||
| 屬性 | 值 | 重要性 | 樣式屬性 |
ID 選擇器 |
類 選擇器 |
元素 選擇器 |
來源 順序 |
|
| background-color | #fff | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 1 |
| background-color | #9cf | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 6 |
| background-color | #fc9 | #para2 | 作者普通 (排名 3) |
0 | 1 | 0 | 0 | 3 |
| border | 1px solid black | #para2 | 作者普通 (排名 3) |
0 | 1 | 0 | 0 | 5 |
| color | #00f | #para2 | 作者普通 (排名 3) |
0 | 1 | 0 | 0 | 4 |
| color | #00f | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 7 |
| color | #000 | p | 作者重要 (排名 4) |
0 | 0 | 0 | 1 | 2 |
background-color 設定為 #fc9 (淺橙色)。具有 ID 選擇器的規則的特異性高於其他兩個規則,因此它獲勝。
border 屬性只有一個規則,因此它設定為 1px solid black。
color 設定為 #000 (黑色)。color 屬性的規則具有不同的權重,因此最重要的規則獲勝。
第二段渲染為
段落 2。
第三段與第一段匹配完全相同的選擇器,因此應用完全相同的值。
第三段渲染為
段落 3。
段落 1。
段落 2。
段落 3。
在這個例子中,我們將檢查當以下使用者樣式表 user.css 與前一個示例中的樣式表組合時,前一個示例中文件的外觀是如何改變的。(有關如何設定使用者樣式表的更多資訊,請參見章節 使用者樣式表。)
p {
color:#ff0 ! important ;
background-color:#808080 ;
font-family:cursive
}
考慮第一個段落元素。使用者樣式表中的單個選擇器匹配該元素。來自 style.css 的第一個和第三個選擇器 (p 選擇器) 也匹配該元素。來自 style.css 的第二個選擇器 (#para2) 不匹配該元素。應用於該元素的規則按它們在原始碼中出現的順序列出,如下所示:
| 宣告 | 選擇器 | 權重 | ||||||
|---|---|---|---|---|---|---|---|---|
| 特異性 | ||||||||
| 屬性 | 值 | 重要性* | 樣式屬性 |
ID 選擇器 |
類 選擇器 |
元素 選擇器 |
來源 順序** |
|
| color | #ff0 | p | 使用者重要 (排名 5) |
0 | 0 | 0 | 1 | 1:1 |
| background-color | #808080 | p | 使用者普通 (排名 2) |
0 | 0 | 0 | 1 | 1:2 |
| font-family | cursive | p | 使用者普通 (排名 2) |
0 | 0 | 0 | 1 | 1:3 |
| background-color | #fff | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 2:1 |
| color | #000 | p | 作者重要 (排名 4) |
0 | 0 | 0 | 1 | 2:2 |
| background-color | #9cf | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 2:6 |
| color | #00f | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 2:7 |
- * 重要性的排名從 1 (最不重要) 到 5 (最重要)。請注意,來自使用者樣式表的規則的排名要麼是普通宣告的 2,要麼是重要宣告的 5。
- ** 來源順序列中的第一個數字表示包含該規則的檔案載入的順序。在本例中,
user.css在style.css之前載入。第二個數字是宣告在檔案中的位置。例如,background-color:#9cf是第二個檔案中的第六個宣告。
對規則進行排序得到
| 宣告 | 選擇器 | 權重 | ||||||
|---|---|---|---|---|---|---|---|---|
| 特異性 | ||||||||
| 屬性 | 值 | 重要性* | 樣式屬性 |
ID 選擇器 |
類 選擇器 |
元素 選擇器 |
來源 順序** |
|
| background-color | #808080 | p | 使用者普通 (排名 2) |
0 | 0 | 0 | 1 | 1:2 |
| background-color | #fff | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 2:1 |
| background-color | #9cf | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 2:6 |
| color | #00f | p | 作者普通 (排名 3) |
0 | 0 | 0 | 1 | 2:7 |
| color | #000 | p | 作者重要 (排名 4) |
0 | 0 | 0 | 1 | 2:2 |
| color | #ff0 | p | 使用者重要 (排名 5) |
0 | 0 | 0 | 1 | 1:1 |
| font-family | cursive | p | 使用者普通 (排名 2) |
0 | 0 | 0 | 1 | 1:3 |
background-color 屬性有兩個規則具有相同的最高權重。這兩個規則也具有相同的特異性,因此它們按來源順序拆分。背景顏色設定為作者的選擇,而不是使用者的選擇。
使用者樣式表中 color 的重要宣告對於此屬性具有最高的權重,因此使用使用者選擇的文字顏色,而不是頁面作者的選擇。
font-family 只有一個規則,那就是使用者的規則,因此使用使用者的選擇。
這些段落渲染為
段落 1。
段落 2。
段落 3。
此錯誤已知在 Windows XP 上的 Internet Explorer 6.0 和 7.0 版本中出現;但 8.0 版本不受影響。
Internet Explorer 處理 !important 存在一個錯誤。如果一個屬性的重要宣告緊隨一個相同屬性的普通宣告,並且都在同一個塊中,Internet Explorer 會將這兩個宣告都視為普通宣告。例如,在 IE v6.0 中,以下樣式表錯誤地將段落渲染為黃色在紅色上。段落應該是白色在黑色上,因為前兩個宣告是重要的。
p {
background-color: black ! important ;
color: white ! important;
background-color: red ;
color: yellow
}
您可以透過在樣式表中新增一個額外的規則來驗證宣告是否恢復為普通。
p {
background-color: black ! important ;
color: white ! important;
background-color: red ;
color: yellow
}
p {
color: green
}
在 IE v6.0 中,這將產生綠色在紅色上,表明所有 color 宣告都被視為普通宣告。
如果您從第一個塊中刪除第二個 color 宣告
p {
background-color: black ! important ;
color: white ! important;
background-color: red ;
}
p {
color: green
}
段落將變為白色在紅色上。這表明第一個塊中的 color 宣告現在正確地被視為重要宣告。
許多人建議利用這個錯誤來傳遞不同的值給 Internet Explorer,與傳遞給其他瀏覽器的值不同。如果您需要這樣做,一個更好的解決方案是使用條件註釋。