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%;
  }
}

另见