跳轉到內容

層疊樣式表/重要

來自華夏公益教科書

important 關鍵字使宣告優先於普通宣告 - 那些沒有被標記為 important 關鍵字的宣告。因此 "p { color: red ! important }" 優先於 "p { color: green }"。

重要宣告的語法是

屬性: 值 ! important

規則的相對重要性也取決於其來源:是來自文件作者指定的樣式表、使用者指定的樣式表還是使用者代理指定的樣式表。

宣告從最低重要性到最高重要性的順序

  1. 使用者代理宣告
  2. 使用者普通宣告
  3. 作者普通宣告
  4. 作者重要宣告
  5. 使用者重要宣告

使用者重要宣告優先於所有其他宣告。這允許使用者覆蓋頁面設計者的演示以滿足他們的需求。例如,使用者可以將文字顏色覆蓋為黑色背景上的黃色,並使用較大的字型,以便更輕鬆地閱讀文字。

確定來自一個或多個樣式表的哪些規則適用於給定元素的過程被稱為 *層疊*,因此稱為 *層疊樣式表*。

層疊示例

[編輯 | 編輯原始碼]

用於此示例的 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 屬性的兩個規則具有相同的重要性 and 特指性,因此第二個規則獲勝,因為它在原始碼中出現得更晚。

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.cssstyle.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。

Internet Explorer !important 漏洞

[編輯 | 編輯原始碼]

已知此漏洞存在於 Windows XP 上的 Internet Explorer 6.0 和 7.0 版本中;但是,8.0 版本不受影響。

Internet Explorer 在處理!important方面存在一個 bug。如果在同一個塊中,一個重要宣告的屬性後面跟著一個普通宣告的相同屬性,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宣告現在被正確地視為重要。

許多人建議使用這個 bug 作為一種向 Internet Explorer 傳遞不同於其他瀏覽器的值的方法。如果您需要這樣做,一個更好的解決方案是使用條件註釋.

華夏公益教科書