在學習CSS 的時候,我們必須要熟練和理解CSS 的三大特性,那么CSS 的三大特性又是什么呢?
CSS 的三大特性:層疊 繼承 優先級 ,CSS 三大特性是我們學習CSS 必須掌握的三個特性。
首先,我們先來講一下CSS的第一個特性:CSS層疊性
所謂層疊性是指多種CSS樣式的疊加。
是瀏覽器處理沖突的一個能力,如果一個屬性通過兩個相同選擇器設置到同一個元素上,那么這個時候一個屬性就會將另一個屬性層疊掉
比如先給某個標簽指定了內部文字顏色為紅色,接着又指定了顏色為藍色,此時出現一個標簽指定了相同樣式不同值的情況,這就是樣式沖突。
一般情況下,如果出現樣式沖突,則會按照CSS書寫的順序,以最后的樣式為准。
-
-
樣式不沖突,不會層疊
CSS最后的執行口訣: 長江后浪推前浪,前浪死在沙灘上。
然后就是我們CSS的第二大特性:繼承性
CSS繼承性
簡單的理解就是: 子承父業。
CSS最后的執行口訣: 龍生龍,鳳生鳳,老鼠生的孩子會打洞。
注意:
恰當地使用繼承可以簡化代碼,降低CSS樣式的復雜性。子元素可以繼承父元素的樣式(text-,font-,line-這些元素開頭的都可以繼承,以及color屬性)
最后就是CSS的第三大特性:CSS優先級
CSS優先級
定義CSS樣式時,經常出現兩個或更多規則應用在同一元素上,這時就會出現優先級的問題。
繼承樣式的權重為0。即在嵌套結構中,不管父元素樣式的權重多大,被子元素繼承時,他的權重都為0,也就是說子元素定義的樣式會覆蓋繼承來的樣式。
行內樣式優先。應用style屬性的元素,其行內樣式的權重非常高,可以理解為遠大於100。總之,他擁有比上面提高的選擇器都大的優先級。
權重相同時,CSS遵循就近原則。也就是說靠近元素的樣式具有最大的優先級,或者說排在最后的樣式優先級最大。
CSS定義了一個!important命令,該命令被賦予最大的優先級。也就是說不管權重如何以及樣式位置的遠近,!important都具有最大優先級。
關於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
注意:
數位之間沒有進制 比如說: 0,0,0,5 + 0,0,0,5 =0,0,0,10 而不是 0,0, 1, 0, 所以不會存在10個div能趕上一個類選擇器的情況。還有就是 繼承的 權重是 0
總結優先級:
-
-
內嵌在 HTML 元素的 style屬性里面的聲明。
-
使用了 ID 選擇器的規則。
-
使用了類選擇器、屬性選擇器、偽元素和偽類選擇器的規則。
-
使用了元素選擇器的規則。
-
只包含一個通用選擇器的規則。
-
同一類選擇器則遵循就近原則。
總結:權重是優先級的算法,層疊是優先級的表現。