不少時候一個元素的樣式並不是直接對元素定義,而是對其祖先元素定義,而後經過繼承性獲得樣式。例如,在body中定義的文字的顏色(color)屬性,在p元素中也是有效的。這就是樣式的繼承。字體
若是一個元素在多個地方定義了某個樣式屬性,最後哪一個起做用呢?
繼承
例如:在body中定義了字體的大小,元素p的屬性style中定義了文字顏色,內部樣式表和外部樣式表中也都定義了元素p的文字顏色,並且某段文字還用屬性id和類名都定義了文字顏色。這樣會致使複雜的樣式層疊關係,到底誰能夠起做用呢?
import
若是一個元素被具備相同屬性名的多個樣式重複做用,也就是出現了樣式層疊,CSS須要經過這些樣式的選擇器的特殊性來進行選擇其中的一個樣式。選擇器越特殊優先權越高,選擇器優先權最高的樣式被選中。若是最高優先權的有多個,則要看這些樣式中哪一個樣式離這個元素最近,離得最近的被選中。
im
選擇器的特殊性能夠根據下面的規則來肯定:
樣式
(1)對於id選擇器,每一個特殊性加0100;
僞元素
(2)對於類選擇器,屬性選擇器,僞類選擇器,每一個特殊性加0010;
img
(3)對於標籤選擇器和僞元素選擇器,每一個特殊性加0001;ant
(4)每一個元素只能定義一個行內樣式,行內樣式的特殊性爲1000;標籤
(5)對於結合符和通用選擇器,它對特殊性沒有貢獻,其特殊性爲0000;
co
(6)對於繼承得來的選擇器沒有任何特殊性,其特殊性爲0000;
(7)加上!important的樣式具備最高的優先權。
優先權比較:
0100 > 0020;
0021 > 0020;
特殊性計算例子