1. 程式人生 > 實用技巧 >CSS 三大特性

CSS 三大特性

CSS層疊性

所謂層疊性是指多種CSS樣式的疊加。

是瀏覽器處理衝突的一個能力,如果一個屬性通過兩個相同權重選擇器設定到同一個元素上,那麼這個時候一個屬性就會將另一個屬性層疊掉

比如先給某個標籤指定了內部文字顏色為紅色,接著又指定了顏色為藍色,此時出現一個標籤指定了相同樣式不同值的情況,這就是樣式衝突。

一般情況下,如果出現樣式衝突,則會按照CSS書寫的順序,以最後的樣式為準。

  1. 樣式衝突,遵循的原則是就近原則。 那個樣式離著結構近,就執行那個樣式。

  2. 樣式不衝突,不會層疊

CSS繼承性

所謂繼承性是指書寫CSS樣式表時,子標籤會繼承父標籤的某些樣式,如文字顏色和字號。想要設定一個可繼承的屬性,只需將它應用於父元素即可。

簡單的理解就是: 子承父業。

恰當地使用繼承可以簡化程式碼,降低CSS樣式的複雜性。子元素可以繼承父元素的樣式(text-,font-,line-這些元素開頭的都可以繼承,以及color屬性)

CSS優先順序

定義CSS樣式時,經常出現兩個或更多規則應用在同一元素上,這時就會出現優先順序的問題。

在考慮權重時,初學者還需要注意一些特殊的情況,具體如下:

繼承樣式的權重為0。即在巢狀結構中,不管父元素樣式的權重多大,被子元素繼承時,他的權重都為0,也就是說子元素定義的樣式會覆蓋繼承來的樣式。

行內樣式優先。應用style屬性的元素,其行內樣式的權重非常高,可以理解為遠大於100。總之,他擁有比上面提到的選擇器都大的優先順序。

權重相同時,CSS遵循就近原則。也就是說靠近元素的樣式具有最大的優先順序,或者說排在最後的樣式優先順序最大。

CSS定義了一個!important命令,該命令被賦予最大的優先順序。也就是說不管權重如何以及樣式位置的遠近,!important都具有最大優先順序。

CSS特殊性(Specificity)

關於CSS權重,我們需要一套計算公式來去計算,這個就是 CSS Specificity,我們稱為CSS 特性或稱非凡性,它是一個衡量CSS值優先順序的一個標準 具體規範入如下:

specificity用一個四位的數 字串(CSS2是三位)來表示,更像四個級別,值從左到右,左面的最大,一級大於一級,數位之間沒有進位制,級別之間不可超越。

繼承或者* 的貢獻值0,0,0,0
每個元素(標籤)貢獻值為 0,0,0,1
每個類,偽類貢獻值為 0,0,1,0
每個ID貢獻值為 0,1,0,0
每個行內樣式貢獻值 1,0,0,0
每個!important貢獻值 ∞ 無窮大

權重是可以疊加的

比如:

div ul  li  ------>    0,0,0,3

.nav ul li ------> 0,0,1,2

a:hover -----—> 0,0,1,1

.nav a ------> 0,0,1,1

#nav p -----> 0,1,0,1

注意:

  1.數位之間沒有進位制 比如說: 0,0,0,5 + 0,0,0,5 =0,0,0,10 而不是 0,0, 1, 0, 所以不會存在10個div能趕上一個類選擇器的情況。

  1. 繼承的 權重是 0

總結優先順序:

  1. 使用了 !important宣告的規則。

  2. 內嵌在 HTML 元素的 style屬性裡面的宣告。

  3. 使用了 ID 選擇器的規則。

  4. 使用了類選擇器、屬性選擇器、偽元素和偽類選擇器的規則。

  5. 使用了元素選擇器的規則。

  6. 只包含一個通用選擇器的規則。

  7. 同一類選擇器則遵循就近原則。

總結:權重是優先順序的演算法,層疊是優先順序的表現