天天看點

css層疊優先級,CSS樣式的優先級(層疊)

CSS叫做層疊樣式表

Cascading Style Sheets

層疊樣式的概念是非常重要的,在最基礎的層面上表示了CSS規則的順序很重要,但是它更加複雜。什麼選擇器在層疊中勝出取決于三個因素

重要性 importance

專有性 specificity

源代碼次序 source order

重要性

CSS中,有一個特殊的文法享有絕對優先級 ! important 把他加載在屬性值的後面,可以讓這條聲明擁有最高優先級。

字元字元字元字元字元字元

p {

color:red ! important;

}

#app {

color:black

}

一旦設定了 !important,那麼源代碼次序即使是在後面,也不會起效果。同時,專有性也不會其效果。

但也并非絕對

如果你合理的利用 源代碼次序和重要性這兩個特性,

字元字元字元字元字元字元

p {

color:red ! important;

}

#app {

color:black ! important

}

(不建議)(不建議)(不建議)(不建議)(不建議)(不建議)

由于大家都是!important 而且按照 源代碼次序,那麼後來的color一定會把前面的顔色給覆寫掉。

(不建議) (不建議)(不建議)(不建議)

因為大量的事實證明 !important 本身的出現往往是不得已而為之的情況,也就是說隻有到了你不得不使用它(事實證明,極少出現這種情況,往往是因為懶)。

為什麼重要性 !important 不建議使用?

因為 !important 很重要的一點是,他改變了另外兩條CSS的層疊規則!

一旦使用了絕對權力的 !important ,層疊順序就會亂了套,在大型項目中往往會出現很多不可預期的錯誤。

專有性

專有性是基本上衡量選擇器具體成都的一種辦法 --- 它能夠比對多少元素

不同的選擇器對應的優先級完全不同,其中ID選擇器是最高的。

選擇器

千位

百位

十位

個位

總計值

H1

1

0001

#id

1

0100

h1+p::first-letter

3

0003

li>a[name='demo'] > .inline

2

2

0022

無選擇器,位于style屬性中

1

1000

注意 通用選擇器(*) 符合選擇器(+ > ~ '')以及否定選擇僞類(:not) 不會影響優先級。

不過由于他們之後往往都跟随者其它選擇器,是以還是要注意。

源代碼次序

如果比較了 重要性和專有性 之後,依然沒有比較出來誰勝利,那麼久按照後來者優先,由 源代碼次序來決定獲勝。

混合規則

注意!!! 注意!!!

以上所有的規則均沒有優先級之分,也就是說三個規則會同時其效果,層疊樣式才是最佳實踐。

前面所說的,我們利用 !important來重寫後面的規則,其實就是破壞了層疊的順序(源代碼次序淩駕于!important之上),導緻了誰靠後引入,誰就更高優先級。

字元字元字元字元字元字元

p {

color:red ! important;

}

#app {

color:black ! important

}