首頁 > web前端 > css教學 > 級聯層

級聯層

Joseph Gordon-Levitt
發布: 2025-03-19 10:22:16
原創
823 人瀏覽過

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”的層*/
  /* ... */
}
登入後複製

這真是令人震驚。

我們將如何使用它?

我想知道一種常見的模式是否會變成……

  1. 將所有內容都分層,以便優先級非常清晰。也許只允許未分層的CSS 用於超級強大的覆蓋,但理想情況下,即使這樣做也應該作為高層級層。
  2. 將重置作為最低層。
  3. 將第三方內容作為中間層。
  4. 將團隊編寫的任何內容作為最高層。

你無需擔心在層之間留出空間(就像使用z-index時那樣),因為你可以隨時調整它而無需附加數字。

時間會證明一切。

偵錯

我希望開發者工具能夠非常清晰地表達層級關係,因為當我們看到由於層級位置而導致看起來較弱的選擇器勝出時,一段時間內可能會出現一些嚴重的困惑。

瀏覽器支持

看起來caniuse 已經關注到這個問題了!

此瀏覽器支持數據來自Caniuse,其中包含更多詳細信息。數字表示瀏覽器在該版本及更高版本中支持該功能。

桌面端

移動端/平板端

更新

這些內容非常新(在撰寫本文時),因此可以預期會存在不穩定性。看起來在2021 年10 月6 日,人們決定分層的樣式實際上是最強的樣式,而不是最弱的。我已經嘗試更新文章以顯示這一點。

Cascade Layers

以上是級聯層的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板