CSS層疊性
所謂層疊性是指多種CSS樣式的疊加。
是瀏覽器處理沖突的一個能力,如果一個屬性通過兩個相同選擇器設置到同一個元素上茴厉,那么這個時候一個屬性就會將另一個屬性層疊掉
比如先給某個標簽指定了內(nèi)部文字顏色為紅色旅掂,接著又指定了顏色為藍色赏胚,此時出現(xiàn)一個標簽指定了相同樣式不同值的情況,這就是樣式?jīng)_突商虐。
一般情況下觉阅,如果出現(xiàn)樣式?jīng)_突,則會按照CSS書寫的順序秘车,以最后的樣式為準典勇。
- 樣式?jīng)_突,遵循的原則是就近原則叮趴。 那個樣式離著結(jié)構(gòu)近割笙,就執(zhí)行那個樣式。
- 樣式不沖突,不會層疊
CSS繼承性
所謂繼承性是指書寫CSS樣式表時伤溉,子標簽會繼承父標簽的某些樣式般码,如文本顏色和字號。想要設置一個可繼承的屬性乱顾,只需將它應用于父元素即可板祝。
注意:恰當?shù)厥褂美^承可以簡化代碼,降低CSS樣式的復雜性走净。子元素可以繼承父元素的樣式(text-券时,font-,line-這些元素開頭的都可以繼承伏伯,以及color屬性)
CSS優(yōu)先級
定義CSS樣式時橘洞,經(jīng)常出現(xiàn)兩個或更多規(guī)則應用在同一元素上,這時就會出現(xiàn)優(yōu)先級的問題舵鳞。
在考慮權重時震檩,初學者還需要注意一些特殊的情況,具體如下:
繼承樣式的權重為0蜓堕。即在嵌套結(jié)構(gòu)中抛虏,不管父元素樣式的權重多大,被子元素繼承時套才,他的權重都為0迂猴,也就是說子元素定義的樣式會覆蓋繼承來的樣式。
行內(nèi)樣式優(yōu)先背伴。應用style屬性的元素沸毁,其行內(nèi)樣式的權重非常高,可以理解為遠大于100傻寂∠⒊撸總之,他擁有比上面提高的選擇器都大的優(yōu)先級疾掰。
權重相同時搂誉,CSS遵循就近原則。也就是說靠近元素的樣式具有最大的優(yōu)先級静檬,或者說排在最后的樣式優(yōu)先級最大炭懊。
CSS定義了一個!important命令,該命令被賦予最大的優(yōu)先級拂檩。也就是說不管權重如何以及樣式位置的遠近侮腹,!important都具有最大優(yōu)先級。
CSS特殊性(Specificity)
關于CSS權重稻励,我們需要一套計算公式來去計算父阻,這個就是 CSS Specificity,我們稱為CSS 特性或稱非凡性,它是一個衡量CSS值優(yōu)先級的一個標準 具體規(guī)范入如下:
specificity用一個四位的數(shù) 字串(CSS2是三位)來表示至非,更像四個級別钠署,值從左到右,左面的最大荒椭,一級大于一級,數(shù)位之間沒有進制舰蟆,級別之間不可超越趣惠。
繼承或者* 的貢獻值 | 0,0,0,0 |
---|---|
每個元素(標簽)貢獻值為 | 0,0,0,1 |
每個類,偽類貢獻值為 | 0,0,1,0 |
每個ID貢獻值為 | 0,1,0,0 |
每個行內(nèi)樣式貢獻值 | 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
注意:數(shù)位之間沒有進制 比如說: 0,0,0,5 + 0,0,0,5 =0,0,0,10 而不是 0,0, 1, 0身害, 所以不會存在10個div能趕上一個類選擇器的情況味悄。
總結(jié)優(yōu)先級:
- 使用了 !important聲明的規(guī)則。
- 內(nèi)嵌在 HTML 元素的 style屬性里面的聲明塌鸯。
- 使用了 ID 選擇器的規(guī)則侍瑟。
- 使用了類選擇器、屬性選擇器丙猬、偽元素和偽類選擇器的規(guī)則涨颜。
- 使用了元素選擇器的規(guī)則。
- 只包含一個通用選擇器的規(guī)則茧球。
- 同一類選擇器則遵循就近原則庭瑰。
總結(jié):權重是優(yōu)先級的算法,層疊是優(yōu)先級的表現(xiàn)