CSS 樣式級聯
瀏覽器使用以下順序查找屬性值。
- 內聯樣式 -使用元素上的style全局屬性定義的樣式
- 嵌入式樣式 -在樣式元素中定義的樣式
- 外部樣式 -使用鏈接元素導入的樣式
- 用戶樣式 -已由用戶定義的樣式
- 瀏覽器樣式 -瀏覽器應用的默認樣式
例如,為一個元素選擇文本的顏色。
瀏覽器將需要為CSS顏色屬性找到一個值。
首先,它將檢查它試圖渲染的元素是否具有定義顏色值的內聯樣式,如下所示:
<a style="color:red" >Visit the website</a>
如果沒有內聯樣式,瀏覽器將查找包含適用于元素的樣式的樣式元素,如下所示:
<style type="text/css"> a { color: red; } </style>如果沒有這樣的樣式元素,瀏覽器會查看通過鏈接元素加載的樣式表。
如果仍然找不到顏色屬性,則使用默認的瀏覽器樣式。
注意
屬性的前三個來源(內聯樣式,嵌入樣式和樣式表)統稱為作者樣式。
用戶樣式表中定義的樣式稱為用戶樣式,瀏覽器定義的樣式稱為瀏覽器樣式。
重要樣式
您可以通過將屬性值標記為重要來覆蓋正常的級聯順序。
通過對聲明附加!important
,可以將單個值標記為重要。
<!DOCTYPE HTML>
<html>
<head>
<title>Example</title>
<style type="text/css">
a {
color: black !important;
}
</style>
</head>
<body>
<a style="color:red" >Visit the website</a>
<p>This is a text.</p>
<a rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >Visit the W3C website</a>
</body>
</html>
瀏覽器優先選擇重要的樣式,無論它們在何處定義。
特異性和順序評估
如果有兩個樣式應用于在同一級別定義的元素,并且它們都包含瀏覽器正在尋找的CSS屬性的值。
要決定使用哪個值,瀏覽器會評估每個樣式的特異性,并選擇最具體的值。
瀏覽器通過計算三個不同的特征來確定樣式的特異性:
- 樣式選擇器中的id值的數量
- 選擇器中的其他屬性和偽類的數量
- 選擇器中元素名稱和偽元素的數量
瀏覽器合并來自每個評估的值,并應用來自最特定樣式的屬性值。
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
a {
color: black;
}
a.myclass {
color:white;
background:grey;
}
</style>
</head>
<body>
<a >Visit the website</a>
<p>The is a test.</p>
<a class="myclass" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >Visit the W3C website</a>
</body>
</html>
當評估特異性時,您以a-b-c的形式創建一個數字,其中每個字母是三個特征之一的總和。
只有a值相等,瀏覽器才會比較b值。
只有當a和b的值相同時,瀏覽器才會考慮c值。
1-0-0的特異性得分比0-2-2更特異。
在上面的代碼中,selector a.myclass包含一個類屬性,這意味著樣式的特殊性是0-1-0。 0用于id值,1用于其他屬性,0用于元素名稱。
當呈現已分配給myclass類的元素時,瀏覽器會為color屬性找到一個值。對于所有其他的元素,將使用另一個樣式的值。
當在具有相同特定性的樣式中定義值時,瀏覽器根據順序選擇值。
例子
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
a.myclass1 {
color: black;
}
a.myclass2 {
color:white;
background:grey;
}
</style>
</head>
<body>
<a >website</a>
<p>This is a paragraph.</p>
<a class="myclass1 myclass2" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >W3C</a>
</body>
</html>
繼承
如果瀏覽器找不到一個可用樣式中的值,它將使用繼承。
繼承意味著獲取由父元素定義的屬性的值。
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
p {
color:white;
background:grey;
border: medium solid black;
}
</style>
</head>
<body>
<a >website</a>
<p>This is a <span>test</span>.</p>
<a rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >W3C</a>
</body>
</html>
span
元素的父代是p
元素。
span元素從父p元素繼承color屬性。
不是所有的CSS屬性都是??繼承的。
只有與外觀相關的是繼承的,包括文本顏色,字體詳細信息等。
與布局相關的不是繼承。
inherit關鍵字
你可以通過使用inherit
在樣式中強制繼承,
inherit
顯式地告訴瀏覽器對屬性使用父元素的值。
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
p {
color:white;
background:grey;
border: medium solid black;
}
span {
border: inherit;
}
</style>
</head>
<body>
<a >website</a>
<p>This is a <span>test</span> from www.w3cschool.cn.</p>
<a rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" >W3C</a>
</body>
</html>