Cascade Layers
減少選擇器權重的問題
Last updated
減少選擇器權重的問題
Last updated
以往 CSS 的管理,只能依靠撰寫者的功力制定規範區分 CSS 的使用與權重,更進階的則會使用例如使用 BEM、OOCSS 等方式,但仍舊需要在意權重,導致 CSS 的 .selector 越加越多、權重越來越重已經分不清到底是誰重了。為了解決這樣的問題,CSS 被發明出一種新的「權重」方式,叫做 Cascade Layers 。
優先判斷 Cascade Layers 權重,再判斷一般 CSS 權重。
其真正原理其實是採用順序變成顛倒,但可以簡化成標題那樣的說法,為什麼呢?
首先,先觀看規則 1 的範例,根據規則 1 與 2 ,優先採用的順序是: 沒有放入@layer的 > @layer theme > @layer base
如果我們只將 @layer base 裡的 color 屬性,加上 !important,則優先採用的順序:
@layer base > @layer theme >沒有放入@layer的
同理,如果我們只將 theme 裡的 color 屬性,加上 !important,則優先採用的順序:
@layer theme > @layer base >沒有放入@layer的
如果我們同時將 base 和 theme 裡的 color 屬性,加上 !important,則優先採用的順序:
@layer base > @layer theme >沒有放入@layer的
如果我們把三個的 color 都加上 !important,則優先採用的順序:
@layer base > @layer theme >沒有放入@layer的
因為原本 theme 會優先於 base,所以當都有 !important 時,base 反而優先於 theme。
如此,我們便可以得知,只要其中一個 layer 裡的 color 有 !important,經過顛倒之後, 沒有放入@layer 的肯定是順位最低。
再來,因為原本的優先順序是後寫的優先,經過顛倒之後,不管是先寫的、後寫的或是兩者裡面的 color,只要有加上 !important 而且是最先出現的,優先順序最高。
也就是說,在導入 Cascade Layers 時,因為已經不是直覺上設定 !important 就一定會出現你要的結果。
不過正確來說,非緊急狀況,本來就不應該隨意使用 !important。
所以導入 Cascade Layers ,就是要更加慎重考慮使用 !important 的時機
隨著 Cascade Layers 的出現,CSS 的管理方法將再一次顛覆,但目前大家都還在嘗試中,所以也還不成熟。
以下附上 css-trick 的完整優先順序:
請試著自己寫看看本篇所有的範例,印象才會比較深刻。