CSS的新成員:@layer
CSS領域出現了一項新特性: @layer
。這要歸功於Miriam Suzanne,她對影響CSS發展起到了關鍵作用。我之前聽說過這個特性,但它突然出現在了實驗性瀏覽器中。
Bramus撰寫了一篇精彩的文章,深入探討了這一特性:
@layer
的出現為我們開發者提供了更多控制層疊樣式表(Cascade) 的工具。@layer
的真正強大之處在於它在層疊樣式表中的獨特位置:位於選擇器特異性(Selector Specificity) 和出現順序之前。正因如此,我們無需擔心其他層中使用的CSS 的選擇器特異性,也不必擔心將CSS 加載到這些層的順序——這對於大型團隊或加載第三方CSS 時非常有用。Bramus Van Damme , “CSS 的未來:層疊層(CSS@layer)*“
(加粗部分為原文強調)
關鍵在於:這是一個影響選擇器優先級的新特性。這需要我們重新調整對CSS的理解,因為@layer
是決定實際應用樣式的全新(且強大的)機制。
我說它強大,是因為“更高層”的樣式可以戰勝傳統上更強的選擇器,即使該層中的選擇器本身較弱。
/* 第一層*/ @layer base-layer { body#foo { background: tan; } } /* 更高層,因此勝出,即使選擇器較弱*/ @layer theme-layer { body.foo { background: #eee; } } /* 注意!未分層的樣式比分層樣式更強大,即使選擇器較弱*/ body { background: red; }
因為底部這段CSS根本沒有放在任何層中,所以它勝出,即使選擇器較弱。
而且,你並不局限於一層。你可以隨意定義和使用它們。
@layer reset; /* 創建名為“reset”的第一層*/ @layer base; /* 創建名為“base”的第二層*/ @layer theme; /* 創建名為“theme”的第三層*/ @layer utilities; /* 創建名為“utilities”的第四層*/ /* 或者,@layer reset, base, theme, utilities; */ @layer reset { /* 追加到名為“reset”的層*/ /* ... */ } @layer theme { /* 追加到名為“theme”的層*/ /* ... */ } @layer base { /* 追加到名為“base”的層*/ /* ... */ } @layer theme { /* 追加到名為“theme”的層*/ /* ... */ }
這真是令人震驚。
我想知道一種常見的模式是否會變成……
你無需擔心在層之間留出空間(就像使用z-index
時那樣),因為你可以隨時調整它而無需附加數字。
時間會證明一切。
我希望開發者工具能夠非常清晰地表達層級關係,因為當我們看到由於層級位置而導致看起來較弱的選擇器勝出時,一段時間內可能會出現一些嚴重的困惑。
看起來caniuse 已經關注到這個問題了!
此瀏覽器支持數據來自Caniuse,其中包含更多詳細信息。數字表示瀏覽器在該版本及更高版本中支持該功能。
這些內容非常新(在撰寫本文時),因此可以預期會存在不穩定性。看起來在2021 年10 月6 日,人們決定未分層的樣式實際上是最強的樣式,而不是最弱的。我已經嘗試更新文章以顯示這一點。
以上是級聯層的詳細內容。更多資訊請關注PHP中文網其他相關文章!