CSS 的 @layer 是一個最近開始被討論的屬性,他會改變我們對於權重的使用與認知。
本來我們在撰寫 CSS 的時候要先認識選擇器與權重的關係,簡單舉例就是當有一個元素長這樣:
<div class="block"></div>
如果要控制他的樣式的話,使用 .block 就會比 div 還要高。
而 @layer 這個屬性使用了以後,他的權重就會在之前所有的選擇器之下,比如:
div{
width: 200px;
height: 200px;
background: purple;
}
@layer A{
div{
background: blue;
}
}
@layer B{
div{
background: orange;
}
}
@layer 的規則是 @layer utilities,utilities 可以自訂名稱也可以不寫,我這邊就簡單定義為 A 跟 B,這時會發現在 @layer 裡定義的樣式都不會蓋過原本 div 的,所以區塊會是紫色的。
所以 @layer 可以用來定義樣式且不會去干擾到預設定義的樣式,這邊當我拿掉 div 裡的 background,就能看到 @layer 內的顏色了。
div{
width: 200px;
height: 200px;
}
@layer A{
div{
background: blue;
}
}
@layer B{
div{
background: orange;
}
}
因為 B 寫在比較後面,所以會顯示橘色:
如果有寫很多個 @layer 時,後面會蓋掉前面的,@layer 也提供了可以讓開發者自訂權重的方式,像是我在 @layer 加上這段:@layer B,C,A;
@layer B,C,A;
@layer A{
div{
background: blue;
}
}
@layer B{
div{
background: orange;
}
}
@layer C{
div{
background: red;
}
}
權重就會變成 A>C>B,所以顏色會是藍色的。
如果再加上一個沒有命名的 @layer,則其顯示的優先權就更前面,像是:
@layer B,C,A;
@layer{
div{
background: pink;
}
}
@layer A{
div{
background: blue;
}
}
@layer B{
div{
background: orange;
}
}
@layer C{
div{
background: red;
}
}
這個會是粉紅色的。
以上是 @layer 的初步介紹,目前主流瀏覽器都以支援了,應該有機會之後再實際專案上看到他的應用。