CSS at 规则嵌套
使用 CSS 嵌套可以将任何包含样式规则的 at 规则嵌入到另一个规则中。嵌套在 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 (min-width: 1024px) { max-inline-size: 1024px; } } } 非嵌套等价表示
css
.foo { display: grid; } @media (orientation: landscape) { .foo { grid-auto-flow: column; } } @media (orientation: landscape) and (min-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%; } }