CSS 巢狀 at-規則

任何其主體包含樣式規則的 at-規則 都可以使用 CSS 巢狀在一個樣式規則中。巢狀在 at-規則中的樣式規則從最近的祖先樣式規則獲取其巢狀選擇器定義。屬性可以直接包含在巢狀的 at-規則中,其作用就像它們巢狀在 & {...} 塊中一樣。

可以巢狀的 at-規則

示例

巢狀 @media at-規則

在此示例中,我們看到三塊 CSS。第一個展示瞭如何編寫典型的 at-規則巢狀,第二個是瀏覽器解析巢狀的擴充套件方式,第三個展示了非巢狀的等效寫法。

巢狀 CSS

css
.foo {
  display: grid;
  @media (orientation: landscape) {
    grid-auto-flow: column;
  }
}

擴充套件的巢狀 CSS

css
.foo {
  display: grid;
  @media (orientation: landscape) {
    & {
      grid-auto-flow: column;
    }
  }
}

非巢狀等效

css
.foo {
  display: grid;
}

@media (orientation: landscape) {
  .foo {
    grid-auto-flow: column;
  }
}

多個巢狀的 @media at-規則

At-規則可以巢狀在其他 at-規則中。下面您可以看到一個示例,以及如果沒有巢狀如何編寫。

巢狀 at-規則

css
.foo {
  display: grid;
  @media (orientation: landscape) {
    grid-auto-flow: column;
    @media (width >= 1024px) {
      max-inline-size: 1024px;
    }
  }
}

非巢狀等效

css
.foo {
  display: grid;
}
@media (orientation: landscape) {
  .foo {
    grid-auto-flow: column;
  }
}
@media (orientation: landscape) and (width >= 1024px) {
  .foo {
    max-inline-size: 1024px;
  }
}

巢狀級聯層(@layer

級聯層 可以巢狀以建立子層。它們使用 .(點)連線。

定義父層和子層

我們首先定義命名的級聯層,在使用它們之前,不進行任何樣式分配。

css
@layer base {
  @layer support;
}

使用巢狀為層分配規則

在這裡,.foo 選擇器將其規則分配給 base @layer。巢狀的 support @layer 建立 base.support 子層,並且 & 巢狀選擇器用於為 .foo .bar 選擇器建立規則。

css
.foo {
  @layer base {
    block-size: 100%;
    @layer support {
      & .bar {
        min-block-size: 100%;
      }
    }
  }
}

不巢狀的等效寫法

css
@layer base {
  .foo {
    block-size: 100%;
  }
}
@layer base.support {
  .foo .bar {
    min-block-size: 100%;
  }
}

另見