CSS 条件规则模块 第5级

W3C 工作草案

更多关于本文档的信息
本版本:
https://www.w3.org/TR/2025/WD-css-conditional-5-20251030/
最新发布版本:
https://www.w3.org/TR/css-conditional-5/
编辑草案:
https://drafts.csswg.org/css-conditional-5/
历史版本:
https://www.w3.org/standards/history/css-conditional-5/
反馈:
CSSWG 问题库
规范内反馈
编辑者:
L. David BaronGoogle
Elika J. Etemad / fantasaiApple
Chris LilleyW3C
Miriam E. Suzanne特邀专家
Lea Verou特邀专家
建议对本规范进行编辑:
GitHub 编辑器
差异规范:
测试套件:
https://wpt.fyi/results/css/css-conditional/

摘要

本模块包含 CSS 中用于根据处理器或样式表应用环境的能力,对样式表部分内容进行条件处理的功能。它包含并扩展了 CSS Conditional 4 [css-conditional-4] 的功能,新增了通用条件规则 @when 和链式条件规则 @else,并为 supports 查询 语法(用于 @supports 规则和容器查询)引入了字体处理相关的查询。

CSS 是一种用于描述结构化文档(如 HTML 和 XML)在屏幕、纸张等介质上渲染效果的语言。

此文档状态

本节描述了本文档在发布时的状态。 当前 W3C 发布的文档列表及本技术报告的最新修订版, 可在 W3C 标准与草案索引中查阅。

本文档由 CSS 工作组工作草案形式发布, 并采用推荐标准流程。 作为工作草案发布 并不代表 W3C 及其成员的认可。

本文档为草案, 可能随时被更新、替换或废弃。 除作为进展中的工作外,不应将此文档作为正式引用。

请通过 在 GitHub 提交 issue(推荐)反馈意见, 并在标题中包含规范代码“css-conditional”,格式为: “[css-conditional] …意见摘要…”。 所有问题和评论都会被归档。 或者,也可发送至(已归档)公共邮件列表 www-style@w3.org

本文件受 2025 年 8 月 18 日 W3C 流程文档 管辖。

本文件由遵循 W3C 专利政策 的工作组制作。 W3C 维护了与该组成果相关的专利披露公开列表; 该页面还包含专利披露说明。 任何知晓某项包含必要声明的专利的个人, 必须按照 W3C 专利政策第 6 节 进行披露。

1. 介绍

当前这是第 5 级中新内容的早期草案。 第 3 级和第 4 级的特性仍然定义在 [css-conditional-3][css-conditional-4] 中,尚未被复制到此处。

CSS Conditional Level 5 扩展了 @supports 规则和 supports 查询 语法, 允许检测自定义支持条件,以及受支持的 at-规则 和字体技术。

它还增加了 @when 规则, 泛化了条件规则的概念。 任何可以通过现有条件规则表达的内容, 都可以通过在 @when 中包裹合适的函数来声明条件类型来表达。 这允许作者轻松组合多种类型的查询, 例如媒体查询和 supports 查询, 用一个布尔表达式实现。 如果没有这个, 作者必须依赖嵌套不同的条件规则, 这样读写都更困难, 并且预设这些条件仅能用“and”布尔关系联结(不易表达其他关系), 同时在所提议的 条件规则链中也会受限。

它还新增了 @else 规则, 紧跟在其他条件规则之后, 并自动将其条件视为紧邻前一规则条件的反向, 从而在 条件规则链 中仅应用第一个匹配的规则。

它还新增了容器查询(Container Queries)。 它们在概念上类似于媒体查询, 但允许检测文档中元素的属性(如盒子尺寸或计算样式), 而不是针对整个文档。

2. @supports 规则的扩展

本级规范扩展了 <supports-feature> 语法如下:

<supports-feature> = <supports-selector-fn>
                   | <supports-font-tech-fn> | <supports-font-format-fn>
                   | <supports-at-rule-fn>
           | <supports-decl>
<supports-decl> = ( [ <declaration> | <supports-condition-name> ] )
<supports-font-tech-fn> = font-tech( <font-tech> )
<supports-font-format-fn> = font-format( <font-format> )
<supports-at-rule-fn> = at-rule( <at-keyword-token> )
<supports-condition-name>

如果 UA 支持该命名条件,结果为 true。 如果名称无法识别,结果为 false。

<supports-font-tech-fn>

如果 UA 支持作为参数提供的字体技术,结果为 true。

<supports-font-format-fn>

如果 UA 支持作为参数提供的字体格式,结果为 true。

<supports-at-rule-fn>

如果 UA 支持作为参数提供的 at-规则,结果为 true。

2.1. 支持定义的扩展

2.1.1. 字体技术和格式

测试

当 CSS 处理器能够在布局和渲染中利用指定的 CSS Fonts 4 § 11.1 Font tech 时,被认为支持某字体技术

当 CSS 处理器能够在布局和渲染中利用指定的 CSS Fonts 4 § 11.2 Font formats,且该格式未被指定为 <string> 时,被认为 支持某字体格式

2.1.2. At-规则

测试

如果 CSS 处理器会在任何上下文中接受以指定 at-keyword 开头的 at-规则,则被认为 支持该 at-规则

注意:由于 @charset 并不是一个有效的 at-规则, 因此在此定义下不被认为是受支持的。

2.1.3. 命名条件

当相关的 命名 supports 条件 返回 true 时,CSS 处理器被认为 支持某命名条件

3. 通用条件规则:@when 规则

@when at-规则是一个 条件分组规则,它将诸如 @media@supports 等各自的 条件分组规则进行了泛化。 其定义如下:

@when <boolean-condition> {
  <rule-list>
}

其中,<boolean-condition> 是类似 Media Queries 4 § 3 语法 的布尔代数, 但以 media()supports() 函数作为叶子。

在 Conditional 中以通用方式定义“布尔代数,以 X 为叶子”, 这样所有条件规则都可以直接引用它,而无需各自重新定义布尔代数。

media()supports() 函数定义如下:

media() = media( [ <mf-plain> | <mf-boolean> | <mf-range> ] )
supports() = supports( <declaration> )

media()supports() 函数与其所包含条件关联的布尔结果相对应。

4. 级联条件:@else 规则

通常,条件分组规则是相互独立的; 每个规则都有单独的条件, 在不直接参考任何其他规则的情况下进行评估, 并仅基于其自身条件决定是否应用其包含的规则。

这对简单条件来说没问题, 但当需要编写一组彼此互斥的条件时就会变得困难: 作者必须非常谨慎地构造条件, 以避免在其他规则应生效时被激活, 并确保这组条件不会意外地全部排除某种情况, 使其未被样式化。

@else 规则是一个 条件分组规则,用于形成 条件规则链, 它将多个 条件分组规则 关联起来, 并保证只有第一个匹配的规则 会将其条件评估为 true。 其定义如下:

@else <boolean-condition>? {
  <rule-list>
}

@else 的解释与 @when 相同。 如果省略其 <boolean-condition>, 则将其视为始终为真的条件。

条件规则链 是 一系列连续的 条件分组规则, 以某个非 @else条件分组规则 开始, 后跟零个或多个 @else 规则。 在连续的 条件分组规则 之间不能有除空白和/或注释之外的任何内容; 其他任何标记都会“中断”该链。

我们是否应要求链中只有最后一个 @else 可以省略条件? 在调试代码时,通过将其中一个条件设为 “true” 来短路 if-else 链并不少见; 我认为在 CSS 中也同样有用? 如果不小心省略了条件,仍然很容易看出哪里出了问题。

在一个 条件规则链 中, 会按顺序评估每个 条件分组规则 的条件。 如果其中某个条件为真, 则链中所有后续 条件分组规则 的条件 都评估为假, 无论其声明的条件为何。

不属于 @else 规则链的 条件规则链 中的 @else 规则无效,必须被忽略。

例如,这里有一个(有点滑稽的)条件链:
@when media(width >= 400px) and media(pointer: fine) and supports(display: flex) {
  /* A */
} @else supports(caret-color: pink) and supports(background: double-rainbow()) {
  /* B */
} @else {
  /* C */
}

上述规则中将恰好选中一个, 即使第二条规则 并未排除大宽度、指针精细或对 flexbox 的支持, 而最后一条规则 根本未指定任何条件。

如果不使用 条件规则链 要实现相同效果, 需要这样写:

@media (width >= 400px) and (pointer: fine) {
  @supports (display: flex) {
  /* A */
  }
  @supports not (display: flex) {
  @supports (caret-color: pink) and (background: double-rainbow()) {
    /* B */
  }
  @supports not ((caret-color: pink) and (background: double-rainbow())) {
    /* C */
  }
  }
}
@media not ((width >= 400px) and (pointer: fine)) {
  @supports (caret-color: pink) and (background: double-rainbow()) {
  /* B */
  }
  @supports not ((caret-color: pink) and (background: double-rainbow())) {
  /* C */
  }
}

这既难以阅读, 又需要大量重复条件和内容, 并且非常难以正确编写。 如果条件更复杂一些 (这在真实内容中并不罕见), 示例会变得显著更糟。

在此示例中,按优先顺序测试三种不同的彩色字体技术, 并提供单色后备。 功能最强的 COLRv1 同时支持渐变和字体可变性; 次优选择 SVG 支持渐变, 而能力最弱的 COLRv0 仅支持纯色填充。

后备没有测试条件, 因此除非先前某个条件满足,否则将总是被选择。

@when font-tech(color-COLRv1) and font-tech(variations) {
  @font-face { font-family: icons; src: url(icons-gradient-var.woff2); }
}
@else font-tech(color-SVG) {
  @font-face { font-family: icons; src: url(icons-gradient.woff2); }
}
@else font-tech(color-COLRv0) {
  @font-face { font-family: icons; src: url(icons-flat.woff2); }
}
@else {
  @font-face { font-family: icons; src: url(icons-fallback.woff2); }
}

注意,在此示例中, 仅当同时支持 COLRv1 和字体可变性时 才会下载可变彩色字体。

还要注意,只会下载一个可用选项; 如果没有 @when@else, 就不会是这样,如下一个示例所示。

在此示例中, 尽管看起来如果支持 COLRv1 就不会使用后备, 但实际上会下载两种字体, 如果后备未被使用则会浪费带宽。

后备仍可能用于某些字符; 例如,彩色字体仅支持拉丁文, 而后备支持拉丁文和希腊文。

@font-face { font-family: icons; src: url(icons-fallback.woff2);
@supports font-tech(color-COLRv1) {
  @font-face { font-family: icons; src: url(icons-gradient-var.woff2); }
}

5. 容器查询

虽然 媒体查询提供了查询文档显示所处用户代理或设备环境方面的方法 (如视口尺寸或用户偏好), 但 容器查询 允许检测文档内元素的某些方面(如盒子尺寸或计算样式)。

默认情况下,所有元素都是用于 容器样式查询查询容器, 并且可以通过使用 container-type 属性 (或 container 简写)指定附加的查询类型, 将其建立为用于 容器尺寸查询容器滚动状态查询查询容器。 应用于 查询容器扁平树 后代的样式规则, 可以通过针对该容器进行查询来进行条件化, 使用 @container 条件分组规则

例如,我们可以将主内容区和侧边栏定义为容器, 然后描述一个 .media-object,它会根据其容器的大小 从纵向布局切换为横向布局:
main, aside {
  container: my-layout / inline-size;
}

.media-object {
  display: grid;
  grid-template: 'img' auto 'content' auto / 100%;
}

@container my-layout (inline-size > 45em) {
  .media-object {
  grid-template: 'img content' auto / auto 1fr;
  }
}

主区域和侧边栏中的媒体对象 将各自响应其所属容器的上下文。

对于表示 DOM 树中真实元素的 ::part()::slotted() 伪元素 选择器, 可由这些元素的 扁平树 祖先建立 查询容器。 对于其他 伪元素查询容器 可以由其 起始元素 的包含性 扁平树 祖先建立。

由此可见:
一个 ::before 选择器查询其起始元素的尺寸:
<style>
  #container {
  width: 100px;
  container-type: inline-size;
  }
  @container (inline-size < 150px) {
  #inner::before {
    content: "BEFORE";
  }
  }
</style>
<div id=container>
  <span id=inner></span>
</div>
用于样式化 shadow 宿主子元素的 ::slotted() 选择器 可以查询 shadow 树中的一个容器:
<div id=host style="width:200px">
  <template shadowroot=open>
  <style>
    #container {
    width: 100px;
    container-type: inline-size;
    }
    @container (inline-size < 150px) {
    ::slotted(span) {
      color: green;
    }
    }
  </style>
  <div id=container>
    <slot />
  </div>
  </template>
  <span id=slotted>Green</span>
</div>

5.1. 创建查询容器:container-type 属性

名称: container-type
值: normal | [ [ size | inline-size ] || scroll-state ]
初始值: normal
适用于: 所有元素
继承: no
百分比: n/a
计算值: 指定的关键字
规范顺序: 按语法
动画类型: 不可动画

container-type 属性将元素建立为某些类型查询的 查询容器。 对于需要特定包含类型的尺寸类 容器查询, 元素通过此属性被显式设为 查询容器。 对于其他类型的 查询容器, 任何元素都可以是 查询容器, 如用于 容器样式查询

各值含义如下:

size
查询容器 建立对 容器尺寸查询 的支持,涵盖 行内轴块轴。 对 主框 应用 样式包含尺寸包含, 并建立一个 独立格式化上下文
inline-size
为容器自身的 行内轴 上的 容器尺寸查询 建立 查询容器。 对 主框 应用 样式包含行内尺寸包含, 并建立一个 独立格式化上下文
scroll-state
查询容器 建立 容器滚动状态查询
normal
该元素不是任何 容器尺寸查询容器滚动状态查询查询容器, 但仍是用于 容器样式查询查询容器
例如,作者可以创建对容器响应的排版, 根据容器大小调整 font-sizeline-height 和其他排版属性:
aside, main {
  container-type: inline-size;
}

h2 { font-size: 1.2em; }

@container (width > 40em) {
  h2 { font-size: 1.5em; }
}

查询条件中使用的 40em 值 相对于相关 计算值font-size, 该计算值取自对应的 查询容器

容器也可以暴露可供查询的计算样式值。 这对于在多个属性间切换行为非常有用:
@container style(--cards: small) {
  article {
  border: thin solid silver;
  border-radius: 0.5em;
  padding: 1em;
  }
}
容器还可以暴露依赖滚动偏移的状态。此示例在粘性定位元素 吸附到顶部边缘时,为其后代设置样式:
#sticky {
  container-type: scroll-state;
  position: sticky;
}
@container scroll-state(stuck: top) {
  #sticky-child {
  background-color: lime;
  }
}

5.2. 命名查询容器:container-name 属性

名称: container-name
值: none | <custom-ident>+
初始值: none
适用于: 所有元素
继承: no
百分比: n/a
计算值: 关键字 none,或 标识符 的有序列表
规范顺序: 按语法
动画类型: 不可动画
测试

container-name 属性 指定一组 查询容器名称。 这些名称可被 @container 规则使用, 以筛选要作用的 查询容器。 容器名称不是 树作用域名称

none
查询容器 没有 查询容器名称
<custom-ident>
查询容器名称 指定为 标识符。 关键字 noneandnotor 被排除在该 <custom-ident> 之外。
在某些情况下,我们希望查询特定容器的属性, 即使它不是最近的祖先容器。 例如,我们可能想查询主内容区域的高度, 以及更内层行内容器的宽度。
main {
  container-type: size;
  container-name: my-page-layout;
}

.my-component {
  container-type: inline-size;
  container-name: my-component-library;
}

@container my-page-layout (block-size > 12em) {
  .card { margin-block: 2em; }
}

@container my-component-library (inline-size > 30em) {
  .card { margin-inline: 2em; }
}

也可以仅根据容器名称来进行查询。

@container my-page-layout {
  .card { padding: 1em; }
}

5.3. 创建命名容器:container 简写

名称: container
值: <'container-name'> [ / <'container-type'> ]?
初始值: 参见各自属性
适用于: 参见各自属性
继承: 参见各自属性
百分比: 参见各自属性
计算值: 参见各自属性
动画类型: 参见各自属性
规范顺序: 按语法
测试

container 简写属性 可在同一声明中同时设置 container-typecontainer-name。 如果省略 <'container-type'>, 则其值会被重置为初始值

我们可以通过简写语法同时定义 container-typecontainer-name
main {
  container: my-layout / size;
}

.grid-item {
  container: my-component / inline-size;
}

5.4. 容器查询:@container 规则

@container 规则 是一种 条件分组规则,其条件包含 一个 容器查询, 即 容器尺寸查询 和/或 容器样式查询 的布尔组合。 <block-contents> 块内的样式声明, 只会在其条件为真、且元素的 容器查询 成立时, 通过 过滤 生效。

@container 规则的语法如下:

@container <container-condition># {
  <block-contents>
}

其中:

<container-condition> = [ <container-name>? <container-query>? ]!
<container-name> = <custom-ident>
<container-query> = not <query-in-parens>
          | <query-in-parens> [ [ and <query-in-parens> ]* | [ or <query-in-parens> ]* ]
<query-in-parens> = ( <container-query> )
          | ( <size-feature> )
          | style( <style-query> )
          | scroll-state( <scroll-state-query> )
          | <general-enclosed>

<style-query>     = not <style-in-parens>
          | <style-in-parens> [ [ and <style-in-parens> ]* | [ or <style-in-parens> ]* ]
          | <style-feature>
<style-in-parens> = ( <style-query> )
          | ( <style-feature> )
          | <general-enclosed>
<style-feature> = <style-feature-plain> | <style-feature-boolean> | <style-range>
<style-feature-plain> = <style-feature-name> : <style-feature-value>
<style-feature-boolean> = <style-feature-name>
<style-range> = <style-range-value> <mf-comparison> <style-range-value>
    | <style-range-value> <mf-lt> <style-range-value> <mf-lt> <style-range-value>
    | <style-range-value> <mf-gt> <style-range-value> <mf-gt> <style-range-value>
<style-range-value> = <custom-property-name> | <style-feature-value>

<scroll-state-query>     = not <scroll-state-in-parens>
             | <scroll-state-in-parens> [ [ and <scroll-state-in-parens> ]* | [ or <scroll-state-in-parens> ]* ]
             | <scroll-state-feature>
<scroll-state-in-parens> = ( <scroll-state-query> )
             | ( <scroll-state-feature> )
             | <general-enclosed>
测试

关键字 noneandnotor 被排除在上述 <custom-ident> 之外。

对于每个元素, 要查询的 查询容器 从该元素的祖先 查询容器 中选取, 它们需要是所有 容器特性<container-query> 内的有效 查询容器。 如果 <container-query> 包含 未知或不支持的 容器特性, 那么该 <container-condition> 将不会选中任何 查询容器<container-name> 会将被考虑的 查询容器 集合限制为名称匹配的那些。

一旦为元素选定了合格的 查询容器<container-query> 内的每个 容器特性 都会针对该 查询容器 进行评估。 如果没有祖先是合格的 查询容器, 则该元素的 容器查询unknown。 如同媒体查询,<general-enclosed> 的结果也是 unknown。 如果省略 <container-query>, 只要 <container-name> 匹配,该 查询容器 就是合格的。

如果一个 容器查询 包含多个 <container-condition>, 每个条件都会选择自己的 查询容器 并独立评估。 容器查询 若任一组成 <container-condition>true,则整体为 true; 仅当所有组成 <container-condition> 都为 false 时才为 false

类似于 媒体查询, 我们可以在一个条件中串联多个查询:
@container card (inline-size > 30em) and style(--responsive: true) {
  /* styles */
}

上述样式只会在存在名为 "card" 的祖先容器,并且同时满足 inline-sizestyle 条件时应用。

我们也可以将多个条件合并为一个列表, 每个条件分别针对不同的容器进行评估:

@container card (inline-size > 30em), style(--large: true) {
  /* styles */
}

上述样式会在存在名为 "card" 的祖先容器且满足 inline-size 条件或最近的样式容器满足 style 条件时应用。

定义在多个嵌套 容器查询 内的元素上的样式规则, 仅当所有包裹的 容器查询 对该元素均为真时才会应用。

注意: 嵌套的 容器查询 可针对不同容器进行评估, 因此并不总能将各个 <container-condition> 合并为一个查询。

使用单个逗号分隔的 容器查询, 可以同时查询多个容器:
@container card (inline-size > 30em), style(--responsive: true) {
  /* styles */
}

上述样式会在元素处于 任一 满足 inline-size 条件的名为 "card" 的容器 满足 style 条件的容器内时应用。

如果要要求多个条件 全部 满足且需要查询多个容器, 则需要嵌套多个查询:

@container card (inline-size > 30em) {
  @container style(--responsive: true) {
  /* styles */
  }
}

上述样式仅在同时存在名为 "card" 的祖先容器且满足 inline-size 条件, 并且 存在满足 style 条件的祖先容器时应用。

全局的、定义名称的 at-规则,如 @keyframes@font-face@layer, 如果定义在 容器查询 内,并不受 容器查询 条件的限制。

5.5. 动画容器

容器查询 的评估发生变化时, 必须作为 样式变更事件 的一部分处理, 即便该变化是由 动画效果 引起的。

对兄弟元素的过渡可以间接影响容器的尺寸, 这会在容器查询的结果发生变化时触发 样式变更事件
main {
  display: flex;
  width: 300px;
}

#container {
  container-type: inline-size;
  flex: 1;
}

/* Resolved width is initially 200px, but changes as the transition
   on #sibling progresses. */
#inner {
  transition: 1s background-color;
  background-color: tomato;
}

/* When this container query starts (or stops) applying, a transition
   must start on background-color on #inner. */
@container (width <= 150px) {
  #inner {
  background-color: skyblue;
  }
}
<main>
  <div id=container>
  <div id=inner>Inner</div>
  </div>
  <div id=sibling>Sibling</div>
</main>

计算值 引起的 容器查询长度 单位的变化, 也必须作为 样式变更事件 的一部分处理。

6. 容器特性

容器特性 用于查询查询容器的某个具体方面。

容器特性在评估时遵循与 媒体特性相同的规则, 当它们处于布尔上下文时。

6.1. 尺寸容器特性

容器尺寸查询允许查询 查询容器主框的尺寸。 它是由多个单独尺寸特性<size-feature>)的布尔组合,每个尺寸特性都查询 查询容器的某一具体维度特性。 <size-feature> 的语法与 媒体特性相同: 即特性名、比较符和数值。[mediaqueries-5] 组合 尺寸特性尺寸查询的布尔语法和逻辑 与CSS 特性查询相同。 (参见@supports[css-conditional-3]

测试

如果查询容器 没有主框, 或主框不是布局包含盒, 或查询容器不支持相关轴上的 容器尺寸查询, 那么对尺寸特性的评估结果为 unknown(未知)。

相对长度单位 (包括容器查询长度单位) 以及自定义属性容器查询条件中 的计算基于查询容器的计算值。

树计数函数(CSS Values 5 § 9 树计数函数:sibling-count() 和 sibling-index() 表示法)在容器元素上计算。

注意: 这与媒体查询中相对单位的处理方式不同。

注意: 如果自定义属性替换后导致 尺寸特性的值无效,则按其他无效特性值处理, 尺寸特性的结果为 unknown

例如,具有不同字体大小的查询容器会将基于 em 的查询相对于各自的字体大小来计算:
aside, main {
  container-type: inline-size;
}

aside { font-size: 16px; }
main { font-size: 24px; }

@container (width > 40em) {
  h2 { font-size: 1.5em; }
}

查询条件中用到的 40em 值 相对于相关查询容器font-size计算:

类似地,查询容器会将基于 var() 的查询 相对于各自的计算值进行计算, 该自定义属性 与相关查询容器相关联:
aside, main {
  container-type: inline-size;
}

aside { --query: 300px; }
main { --query: 500px; }

@container (width > var(--query)) {
  h2 { font-size: 1.5em; }
}

查询条件中用到的 var(--query) 的值 会被替换为对应 查询容器--query 自定义属性 的计算值:

6.1.1. 宽度:width 特性

名称: width
适用于: @container
值: <length>
类型: range

width 容器特性查询查询容器内容区的宽度。

6.1.2. 高度:height 特性

名称: height
适用于: @container
值: <length>
类型: range

height 容器特性查询查询容器内容区的高度。

6.1.3. 行内尺寸:inline-size 特性

名称: inline-size
适用于: @container
值: <length>
类型: range

inline-size 容器特性查询查询容器内容区查询容器行内轴上的尺寸。

6.1.4. 块级尺寸:block-size 特性

名称: block-size
适用于: @container
值: <length>
类型: range

block-size 容器特性查询查询容器内容区查询容器块轴上的尺寸。

6.1.5. 宽高比:aspect-ratio 特性

名称: aspect-ratio
适用于: @container
值: <ratio>
类型: range

aspect-ratio 容器特性被定义为 width 容器特性 的值与 height 容器特性的值之比。

6.1.6. 方向:orientation 特性

名称: orientation
适用于: @container
值: portrait | landscape
类型: discrete
portrait
orientation 容器特性height 容器特性的值大于等于 width 容器特性的值时,为 portrait
landscape
否则orientationlandscape

6.2. 样式容器特性

容器样式查询 允许查询查询容器的计算值。 它是多个单独样式特性<style-feature>)的布尔组合, 每个样式特性都查询 查询容器的单一、具体属性。 <style-feature> 的语法可以是 合法的声明<style-feature-name> 或合法的样式范围<style-range>)。 <style-feature-name> 可以是 支持的 CSS 属性或 合法的<custom-property-name><style-feature-value> 产生式匹配任何 合法的<declaration-value>, 只要不包含<mf-lt><mf-gt><mf-eq> 记号。

测试

<style-feature-plain>查询容器上给定属性的计算值 等于给定值时为 true (此值也基于 查询容器 计算),否则为 false。

没有值的样式特性<style-feature-boolean>)在 计算值 与该属性初始值不同则为 true。

评估<style-range>,需执行以下步骤:
  1. 如果<style-range-value><custom-property-name>, 则应像将 <custom-property-name> 包裹在 var() 中一样进行替换。

  2. 任意替换函数 内执行 <style-range-value> 的替换。

  3. <style-range-value>解析为 <number><percentage><length><angle><time><frequency><resolution>。 如果无法完成,评估为 false。

  4. 如果范围内的每个<style-range-value>类型相同, 则分别计算并进行比较; 单位为零的零在与<length>比较时视为零长度。

  5. 否则评估为 false。

样式特性组合为 样式查询的布尔语法和逻辑 与CSS 特性查询相同。 (参见@supports[css-conditional-3]

查询样式特性简写属性,当所有长属性计算值均匹配时为真,否则为假。

依赖级联的关键字,如revertrevert-layer, 在样式特性中作为值无效, 会导致容器样式查询为 false。

注意: 其余非级联依赖的 CSS-wide 关键字会相对于查询容器计算, 与其它值一致。

6.3. 滚动状态容器特性

容器滚动状态查询 允许针对依赖滚动位置的状态对容器进行查询。它是由多个 单独的滚动状态特性<scroll-state-feature>)的布尔组合组成,每个特性 都查询查询容器的单一特性。<scroll-state-feature> 的语法与 媒体特性相同:特性名、比较符和值。

滚动状态特性 既可以匹配滚动器自身的状态,也可以匹配受祖先 滚动容器滚动视口滚动位置影响的元素状态。前者的例子是 scrollable 特性,后者是 snapped

6.3.1. 滚动状态的更新

滚动状态可能会引发布局循环,因为被查询的滚动状态可能导致样式变化, 而样式变化又可能在布局之后引起滚动状态变化。

为避免此类布局循环,scroll-state 查询容器会在 运行快照布局后状态步骤时更新其当前状态,该步骤只会在 HTML 事件循环处理模型的特定时机运行。

当被要求运行快照布局后状态步骤时,需更新每个 scroll-state 查询容器的当前状态。该快照状态将在下次再次运行这些步骤之前, 用于所有样式与布局更新。

6.3.2. 粘性定位:stuck 特性

名称: stuck
适用于: @container
值: none | top | right | bottom | left | block-start | inline-start | block-end | inline-end
类型: discrete
测试

stuck 容器特性用于查询某个粘性定位的容器是否为保持在指定边缘的 粘性视图矩形内而发生了可见的偏移。逻辑边会基于 查询容器的方向与写字模式映射到物理边。 如果查询容器不是粘性定位,则任何值都不匹配。

来自相互垂直的两个轴的值可能会同时匹配, 但同一轴上的对立边不会同时匹配。

可能匹配:
@container scroll-state((stuck: top) and (stuck: left)) { ... }

永远不会匹配:

@container scroll-state((stuck: left) and (stuck: right)) { ... }
none
粘性容器未在任何方向发生偏移。
top
粘性容器为保持在顶部边缘而发生了偏移。
right
粘性容器为保持在右侧边缘而发生了偏移。
bottom
粘性容器为保持在底部边缘而发生了偏移。
left
粘性容器为保持在左侧边缘而发生了偏移。
block-start
粘性容器为保持在block-start 边缘而发生了偏移。
inline-start
粘性容器为保持在inline-start 边缘而发生了偏移。
block-end
粘性容器为保持在block-end 边缘而发生了偏移。
inline-end
粘性容器为保持在inline-end 边缘而发生了偏移。

6.3.3. 滚动吸附:snapped 特性

名称: snapped
适用于: @container
值: none | x | y | block | inline | both
类型: discrete
测试

snapped 容器特性用于查询某个吸附目标 是否已经或将要在给定轴上吸附到其滚动吸附容器。也就是说, 它匹配任何会触发 scrollsnapchanging 事件的吸附目标

none
查询容器 不是吸附目标
x
snapped 容器特性匹配 x 时,表示查询容器是其滚动容器的 水平吸附目标
y
snapped 容器特性匹配 y 时,表示查询容器是其滚动容器的 垂直吸附目标
block
snapped 容器特性匹配 block 时,表示查询容器是其吸附目标,且位于滚动吸附容器的块方向上。
inline
snapped 容器特性匹配 inline 时,表示查询容器是其吸附目标,且位于滚动吸附容器的行内方向上。
both
snapped 容器特性匹配 both 时,表示查询容器是其吸附目标,且位于滚动吸附容器的两个方向上。

6.3.4. 可滚动:scrollable 特性

名称: scrollable
适用于: @container
值: none | top | right | bottom | left | block-start | inline-start | block-end | inline-end | x | y | block | inline
类型: discrete
测试

scrollable 容器特性用于查询某个滚动容器在给定方向上是否具有 通过用户发起滚动即可到达的、已裁剪的可滚动溢出矩形内容。 换言之,scrollable 不会匹配 hidden 容器,也不会匹配 negative scrollable overflow region

这些逻辑值会基于查询容器 的方向与写字模式映射为物理方向。若该容器不是滚动容器, 则任何值都不匹配。

none
滚动容器在任何方向上都没有可滚动溢出
top
滚动容器在顶部边缘之外有可滚动溢出
right
滚动容器在右侧边缘之外有可滚动溢出
bottom
滚动容器在底部边缘之外有可滚动溢出
left
滚动容器在左侧边缘之外有可滚动溢出
block-start
滚动容器block-start 边缘之外有可滚动溢出
inline-start
滚动容器inline-start 边缘之外有可滚动溢出
block-end
滚动容器block-end 边缘之外有可滚动溢出
inline-end
滚动容器inline-end 边缘之外有可滚动溢出
x
滚动容器在水平方向上存在可滚动溢出
y
滚动容器在垂直方向上存在可滚动溢出
block
滚动容器在其块方向上存在可滚动溢出
inline
滚动容器在其行内方向上存在可滚动溢出

6.3.5. 已滚动:scrolled 特性

名称: scrolled
适用于: @container
值: none | top | right | bottom | left | block-start | inline-start | block-end | inline-end | x | y | block | inline
类型: discrete
测试

对于一个查询容器, 若其是滚动容器, 则scrolled 容器特性用于查询其最近一次相对滚动的方向。 这些逻辑值会基于查询容器的方向与写字模式映射为物理方向。 若该容器不是滚动容器,则任何值都不匹配。

none
查询容器 尚未发生过相对滚动
top
最近一次相对滚动方向为向上。
right
最近一次相对滚动方向为向右。
bottom
最近一次相对滚动方向为向下。
left
最近一次相对滚动方向为向左。
block-start
最近一次相对滚动方向指向block-start
inline-start
最近一次相对滚动方向指向inline-start
block-end
最近一次相对滚动方向指向block-end
inline-end
最近一次相对滚动方向指向inline-end
x
最近一次相对滚动发生在水平方向。
y
最近一次相对滚动发生在垂直方向。
block
最近一次相对滚动发生在块方向。
inline
最近一次相对滚动发生在行内方向。

7. 容器相对长度:cqwcqhcqicqbcqmincqmax 单位

容器查询长度单位 指定一个相对于查询容器尺寸的长度。 使用容器查询长度单位的样式表可以更方便地将组件从一个查询容器迁移到另一个容器。

容器查询长度单位包括:

容器单位信息摘要
单位 相对对象
cqw 查询容器宽度的1%
cqh 查询容器高度的1%
cqi 查询容器行内尺寸的1%
cqb 查询容器块级尺寸的1%
cqmin cqicqb 中较小的值
cqmax cqicqb 中较大的值
测试

对于每个元素,容器查询长度单位的计算 作为对应轴(或多轴)上的容器尺寸查询进行。 每个轴的查询容器 是最近的祖先中在该轴上支持容器尺寸查询的容器。 如果在某个轴上没有可用的查询容器,则使用该轴的小视口尺寸

注意: 某些情况下,同一元素上的cqicqb单位 可能是针对不同的查询容器进行计算。 同样,cqmincqmax 单位 分别代表 cqicqb 的较大或较小值, 即便这两个尺寸来自不同的查询容器

子元素不会继承父元素指定的相对值; 它们继承的是计算值

作者可以通过在依赖相同container-type容器查询长度单位的容器查询内使用这些单位,确保它们有合适的查询容器。可以在容器查询外部定义自定义回退值:
/* 回退值不依赖于容器性 */
h2 { font-size: 1.2em; }

@container (inline-size >= 0px) {
  /* 仅在有 inline-size 容器可用时生效 */
  h2 { font-size: calc(1.2em + 1cqi); }
}

8. 定义自定义支持查询:@supports-condition 规则

@supports-condition at-规则 是一种条件分组规则,允许作者定义并命名一个supports 查询以便后续复用, 创建一个命名支持条件。 这样可以用名称引用复杂或常用的特性查询,提高可维护性和可读性。

@supports-condition <supports-condition-name> {
  <block-contents>
}
测试

其中 <supports-condition-name> 是定义 supports 查询名称的<extension-name>

块内的所有内容都将被评估以测试用户代理是否支持相关特性。 这些内容不会影响文档的实际渲染。

一旦定义,命名支持条件即可在后续的@supports@when 条件中使用。

如果定义了多个同名的@supports-condition规则, 则以文档顺序最后一个为准,之前的都被忽略。

例如,我们可以定义一个同时检测多个属性的 supports 查询:
@supports-condition --thicker-underlines {
  text-decoration-thickness: 0.2em;
  text-underline-offset: 0.3em;
}

/* 等价于 (text-decoration-thickness: 0.2em) and (text-underline-offset: 0.3em) */
@supports (--thicker-underlines) {
  a {
    text-decoration: underline;
    text-decoration-thickness: 0.2em;
    text-underline-offset: 0.3em;
  }
}

@supports-condition 规则允许出现在 @import@namespace 规则之前(若有 @charset 规则,则应在其后)。

由于支持查询可包含任意声明,因此可用于检测如嵌套这样的复杂特性支持情况:
@supports-condition --nesting {
  & { }
}

@import url("nested-styles.css") supports(--nesting);
支持查询还可用于检测 at-规则的支持情况:
@supports-condition --stuck-container-feature {
  @container scroll-state(stuck: top) { }
}

@supports (--stuck-container-feature) {
  div { border-color: navy; }
}

at-规则名称尚在讨论中。 备选方案包括 @supports-query@supports-test@custom-supports。 名称应与自定义媒体查询保持一致。

9. API

9.1. CSSContainerRule 接口

CSSContainerRule 接口表示一个@container 规则。

[Exposed=Window]
interface CSSContainerRule : CSSConditionRule {
  readonly attribute CSSOMString containerName;
  readonly attribute CSSOMString containerQuery;
};
conditionText 类型为 CSSOMString (CSSContainerRule 对 CSSConditionRule 上属性的专属定义)
conditionText 属性(定义于父类 CSSConditionRule)的取值如下:
@container 规则有关联的 <container-name>
返回 containerNamecontainerQuery 属性的值,用空格拼接。
否则
返回 containerQuery 属性值。
containerName 类型为 CSSOMString
containerName 属性取值如下:
@container 规则有关联的 <container-name>
返回序列化后的 <container-name>
否则
返回空字符串。
containerQuery 类型为 CSSOMString
containerQuery 属性的返回值为 指定的 <container-query>, 不做任何逻辑简化, 保证返回的查询在任何符合规范的实现中 (包括实现本规范允许的未来扩展的实现,例如 <general-enclosed> 扩展机制)都能得到相同的结果。 换言之, 可以做 token 流简化(如多空格合并为一个空格、在可选空格处省略), 但不得做逻辑简化(如去掉多余括号或基于结果做简化)。

容器查询应有 matchContainer 方法。 该方法将以 matchMedia()MediaQueryList 接口为模型, 但应用于 Element 而不是 Window。 在测量布局尺寸时,其行为类似 resizeObserver, 但还提供额外的容器查询语法和特性。[Issue #6205]

9.2. CSSSupportsConditionRule 接口

CSSSupportsConditionRule 接口表示一个@supports-condition 规则。

[Exposed=Window]
interface CSSSupportsConditionRule : CSSGroupingRule {
  readonly attribute CSSOMString name;
};
name 类型为 CSSOMString
该属性为命名支持条件的名称。

安全性说明

目前没有针对本文件提出安全性问题。

隐私说明

font-tech()font-format() 函数 可能会泄露用户软件的信息,比如其版本、 以及是否启用了或禁用了某些功能的非默认设置。

这些信息也可以通过其他 API 获得。 但本规范中的特性是信息在 Web 上披露的方式之一。

这些信息也可能被聚合后用于提升对用户指纹识别的准确性。

变更记录

2024年11月5日工作草案以来的变更

2024年7月23日工作草案以来的变更

2021年12月21日首个公开工作草案以来的变更

Level 4 以来的新增内容

致谢

@when@else 规则 基于 Tab Atkins 的提案。

感谢 Adam Argyle、 Amelia Bellamy-Royds、 Anders Hartvoll Ruud、 Brian Kardell、 Chris Coyier、 Christopher Kirk-Nielsen、 David Herron、 Eric Portis、 Ethan Marcotte、 Florian Rivoal、 Geoff Graham、 Gregory Wild-Smith、 Ian Kilpatrick、 Jen Simmons、 Kenneth Rohde Christiansen、 Lea Verou、 Martin Auswöger、 Martine Dowden、 Mike Riethmuller、 Morten Stenshorne、 Nicole Sullivan、 Rune Lillesveen、 Scott Jehl、 Scott Kellum、 Stacy Kvernmo、 Theresa O’Connor、 Una Kravets 以及许多其他人为本规范做出的评论和贡献。

一致性

文档约定

一致性要求通过描述性断言和 RFC 2119 术语组合表达。规范性部分中的关键词 “MUST”(必须)、 “MUST NOT”(禁止)、“REQUIRED”(要求)、“SHALL”(应当)、“SHALL NOT”(不得)、 “SHOULD”(应该)、“SHOULD NOT”(不应)、“RECOMMENDED”(推荐)、“MAY”(可以)和 “OPTIONAL”(可选), 均应按 RFC 2119 的说明解释。不过,为了可读性,本规范中这些词并不全部大写。

除非明确标记为非规范性、示例和注释,本规范的所有内容均为规范性内容。[RFC2119]

本规范的示例以“例如”开头,或通过 class="example" 与规范性文本区分, 如下所示:

这是一个信息性示例。

信息性注释以“注意”开头,并通过 class="note" 与规范性文本区分,如下所示:

注意,这是一个信息性注释。

警示性内容是规范性章节,具有特殊样式,以引起注意,并通过 <strong class="advisement"> 区分,如下所示:UA 必须提供无障碍替代方案。

测试

与本规范内容相关的测试可以记录在如本块所示的 “Tests” 区块中。任何此类区块均为非规范性内容。


一致性类别

本规范定义了三类一致性:

样式表
一个 CSS 样式表
渲染器
一个用户代理(UA),解释样式表语义并渲染 使用这些样式表的文档。
编辑工具
一个UA,用于编写样式表。

如果样式表中的所有使用本模块语法的语句都符合通用 CSS 语法和本模块中每个特性的具体语法,则该样式表符合本规范。

渲染器符合本规范,需在按照相关规范解释样式表的基础上,正确解析并渲染本规范定义的所有特性。 但由于设备限制导致 UA 无法正确渲染文档,并不视为 UA 不符合规范。(例如,UA 在单色显示器上不需要渲染颜色。)

编辑工具符合本规范,需编写满足通用 CSS 语法和本模块中每个特性的具体语法的样式表,并满足本模块描述的所有其他样式表一致性要求。

部分实现

为便于作者利用前向兼容的解析规则指定回退值,CSS 渲染器必须将所有不支持的 at-规则、属性、属性值、关键字 及其它语法结构视为无效(并按需忽略)。 特别是,用户代理不得在一个多值属性声明中选择性忽略不支持的部分并保留支持的部分:只要有一个值被视为无效(不支持的值必须如此),整个声明都应被 CSS 忽略。

不稳定和专有特性的实现

为避免与未来稳定 CSS 特性冲突,CSSWG 推荐遵循最佳实践 实现不稳定特性专有扩展

非实验性实现

一旦规范进入候选推荐(CR)阶段,就可能出现非实验性实现,实现者应当发布任何已证明确实按规范实现的 CR 级特性的无前缀实现。

为了建立和维护 CSS 在不同实现间的互操作性,CSS 工作组要求非实验性 CSS 渲染器在发布任何 CSS 特性的无前缀实现前向 W3C 提交实现报告(及必要时用于该报告的测试用例)。 向 W3C 提交的测试用例需经 CSS 工作组审查与修正。

关于提交测试用例和实现报告的更多信息,可参见 CSS 工作组网站:https://www.w3.org/Style/CSS/Test/。 如有问题,请联系 public-css-testsuite@w3.org 邮件列表。

索引

本规范定义的术语

引用定义的术语

参考文献

规范性引用

[CSS-ANIMATIONS-1]
David Baron 等。CSS Animations Level 1。2023年3月2日。WD。网址:https://www.w3.org/TR/css-animations-1/
[CSS-BOX-4]
Elika Etemad。CSS Box Model Module Level 4。2024年8月4日。WD。网址:https://www.w3.org/TR/css-box-4/
[CSS-CASCADE-4]
Elika Etemad;Tab Atkins Jr.。CSS Cascading and Inheritance Level 4。2022年1月13日。CR。网址:https://www.w3.org/TR/css-cascade-4/
[CSS-CASCADE-5]
Elika Etemad;Miriam Suzanne;Tab Atkins Jr.。CSS Cascading and Inheritance Level 5。2022年1月13日。CR。网址:https://www.w3.org/TR/css-cascade-5/
[CSS-CONDITIONAL-3]
Chris Lilley;David Baron;Elika Etemad。CSS Conditional Rules Module Level 3。2024年8月15日。CRD。网址:https://www.w3.org/TR/css-conditional-3/
[CSS-CONDITIONAL-4]
Chris Lilley;David Baron;Elika Etemad。CSS Conditional Rules Module Level 4。2025年9月4日。CRD。网址:https://www.w3.org/TR/css-conditional-4/
[CSS-CONTAIN-2]
Tab Atkins Jr.;Florian Rivoal;Vladimir Levin。CSS Containment Module Level 2。2022年9月17日。WD。网址:https://www.w3.org/TR/css-contain-2/
[CSS-CONTAIN-3]
Tab Atkins Jr.;Florian Rivoal;Miriam Suzanne。CSS Containment Module Level 3。2022年8月18日。WD。网址:https://www.w3.org/TR/css-contain-3/
[CSS-DISPLAY-4]
Elika Etemad;Tab Atkins Jr.。CSS Display Module Level 4。2024年12月19日。FPWD。网址:https://www.w3.org/TR/css-display-4/
[CSS-EXTENSIONS-1]
CSS Extensions Module Level 1。 编辑草案。网址:https://drafts.csswg.org/css-extensions-1/
[CSS-FONTS-4]
Chris Lilley。CSS Fonts Module Level 4。2024年2月1日。WD。网址:https://www.w3.org/TR/css-fonts-4/
[CSS-FONTS-5]
Chris Lilley。CSS Fonts Module Level 5。2024年2月6日。WD。网址:https://www.w3.org/TR/css-fonts-5/
[CSS-NAMESPACES-3]
Elika Etemad。CSS Namespaces Module Level 3。2014年3月20日。REC。网址:https://www.w3.org/TR/css-namespaces-3/
[CSS-OVERFLOW-3]
Elika Etemad;Florian Rivoal。CSS Overflow Module Level 3。2025年10月7日。WD。网址:https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Elika Etemad;Tab Atkins Jr.。CSS Positioned Layout Module Level 3。2025年10月7日。WD。网址:https://www.w3.org/TR/css-position-3/
[CSS-SCOPING-1]
Tab Atkins Jr.;Elika Etemad。CSS Scoping Module Level 1。2014年4月3日。FPWD。网址:https://www.w3.org/TR/css-scoping-1/
[CSS-SCROLL-SNAP-1]
Matt Rakow 等。CSS Scroll Snap Module Level 1。2021年3月11日。CR。网址:https://www.w3.org/TR/css-scroll-snap-1/
[CSS-SCROLL-SNAP-2]
Elika Etemad;Tab Atkins Jr.;Adam Argyle。CSS Scroll Snap Module Level 2。2024年7月23日。FPWD。网址:https://www.w3.org/TR/css-scroll-snap-2/
[CSS-SHADOW-PARTS-1]
Tab Atkins Jr.;Fergal Daly。CSS Shadow Parts。2018年11月15日。FPWD。网址:https://www.w3.org/TR/css-shadow-parts-1/
[CSS-SIZING-3]
Tab Atkins Jr.;Elika Etemad。CSS Box Sizing Module Level 3。2021年12月17日。WD。网址:https://www.w3.org/TR/css-sizing-3/
[CSS-SYNTAX-3]
Tab Atkins Jr.;Simon Sapin。CSS Syntax Module Level 3。2021年12月24日。CRD。网址:https://www.w3.org/TR/css-syntax-3/
[CSS-TRANSITIONS-1]
David Baron 等。CSS Transitions。2018年10月11日。WD。网址:https://www.w3.org/TR/css-transitions-1/
[CSS-VALUES-4]
Tab Atkins Jr.;Elika Etemad。CSS Values and Units Module Level 4。2024年3月12日。WD。网址:https://www.w3.org/TR/css-values-4/
[CSS-VALUES-5]
Tab Atkins Jr.;Elika Etemad;Miriam Suzanne。CSS Values and Units Module Level 5。2024年11月11日。WD。网址:https://www.w3.org/TR/css-values-5/
[CSS-VARIABLES-1]
Tab Atkins Jr.。CSS Custom Properties for Cascading Variables Module Level 1。2022年6月16日。CR。网址:https://www.w3.org/TR/css-variables-1/
[CSS-WRITING-MODES-4]
Elika Etemad;Koji Ishii。CSS Writing Modes Level 4。2019年7月30日。CR。网址:https://www.w3.org/TR/css-writing-modes-4/
[CSSOM-1]
Daniel Glazman;Emilio Cobos Álvarez。CSS Object Model (CSSOM)。2021年8月26日。WD。网址:https://www.w3.org/TR/cssom-1/
[CSSOM-VIEW-1]
Simon Fraser;Emilio Cobos Álvarez。CSSOM View Module。2025年9月16日。WD。网址:https://www.w3.org/TR/cssom-view-1/
[MEDIAQUERIES-4]
Florian Rivoal;Tab Atkins Jr.。Media Queries Level 4。2021年12月25日。CRD。网址:https://www.w3.org/TR/mediaqueries-4/
[MEDIAQUERIES-5]
Dean Jackson 等。Media Queries Level 5。2021年12月18日。WD。网址:https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner。Key words for use in RFCs to Indicate Requirement Levels。1997年3月。最佳当前实践。网址:https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad;Tab Atkins Jr.。Selectors Level 4。2022年11月11日。WD。网址:https://www.w3.org/TR/selectors-4/
[WEB-ANIMATIONS-1]
Brian Birtles 等。Web Animations。2023年6月5日。WD。网址:https://www.w3.org/TR/web-animations-1/
[WEBIDL]
Edgar Chen;Timothy Gu。Web IDL Standard。实时标准。网址:https://webidl.spec.whatwg.org/

参考性引用

[CSS-POSITION-4]
Elika Etemad;Tab Atkins Jr.。CSS Positioned Layout Module Level 4。2025年10月7日。WD。网址:https://www.w3.org/TR/css-position-4/
[CSS-PSEUDO-4]
Elika Etemad;Alan Stearns。CSS Pseudo-Elements Module Level 4。2025年6月27日。WD。网址:https://www.w3.org/TR/css-pseudo-4/
[CSS2]
Bert Bos 等。Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification。2011年6月7日。REC。网址:https://www.w3.org/TR/CSS2/

属性索引

名称 取值 初始值 适用对象 可继承 % 百分比 动画类型 规范顺序 计算值
container <'container-name'> [ / <'container-type'> ]? 见各自属性 见各自属性 见各自属性 见各自属性 见各自属性 按语法 见各自属性
container-name none | <custom-ident>+ none 所有元素 n/a 不可动画 按语法 关键字 none 或有序标识符列表
container-type normal | [ [ size | inline-size ] || scroll-state ] normal 所有元素 n/a 不可动画 按语法 指定关键字

@container 描述符

名称 取值 初始值 类型
aspect-ratio <ratio> 范围
block-size <length> 范围
height <length> 范围
inline-size <length> 范围
orientation portrait | landscape 离散
scrollable none | top | right | bottom | left | block-start | inline-start | block-end | inline-end | x | y | block | inline 离散
scrolled none | top | right | bottom | left | block-start | inline-start | block-end | inline-end | x | y | block | inline 离散
snapped none | x | y | block | inline | both 离散
stuck none | top | right | bottom | left | block-start | inline-start | block-end | inline-end 离散
width <length> 范围

IDL 索引

[Exposed=Window]
interface CSSContainerRule : CSSConditionRule {
  readonly attribute CSSOMString containerName;
  readonly attribute CSSOMString containerQuery;
};

[Exposed=Window]
interface CSSSupportsConditionRule : CSSGroupingRule {
  readonly attribute CSSOMString name;
};

问题索引

当前为 Level 5 新内容的早期草案。 Level 3 和 Level 4 的特性仍定义在 [css-conditional-3][css-conditional-4] 中,尚未复制至本处。
应在 Conditional 中以通用方式定义“以 X 为叶的布尔代数”, 以便所有条件规则都能直接引用, 而无需各自重定义布尔代数。
是否应要求只有链中的最后一个 @else 可以省略条件? 在调试代码时,将 if-else 链中某一项设为 "true" 以短路并不罕见; 我猜 CSS 也会有类似用途? 如果你不小心漏掉了条件,也很容易发现问题。
at-规则的名称仍在讨论中。 备选包括 @supports-query@supports-test@custom-supports。 该名称应与自定义媒体查询保持一致。
容器查询应有 matchContainer 方法。 该方法将以 matchMedia()MediaQueryList 接口为模型, 但应用于元素而非 Window。 在测量布局尺寸时,其行为类似 resizeObserver, 但还提供容器查询语法和功能。[Issue #6205]