CSS 条件规则模块 第4级

W3C 候选推荐草案,

关于本文档的更多信息
此版本:
https://www.w3.org/TR/2025/CRD-css-conditional-4-20250904/
最新发布版本:
https://www.w3.org/TR/css-conditional-4/
编辑草案:
https://drafts.csswg.org/css-conditional-4/
以往版本:
历史记录:
https://www.w3.org/standards/history/css-conditional-4/
实现报告:
https://wpt.fyi/results/css/css-conditional
测试套件:
https://wpt.fyi/results/css/css-conditional
https://wpt.fyi/results/css/css-conditional/
反馈:
CSSWG 问题库
规范内反馈
编辑者:
L. David Baron (Google)
Elika J. Etemad / fantasai (Apple)
Chris Lilley (W3C)
为本规范建议编辑:
GitHub 编辑页面
增量规范:

摘要

本模块包含了 CSS 的条件处理功能, 可根据处理器或样式表所应用的环境的能力, 对样式表的部分内容进行条件处理。 它包含并扩展了 CSS Conditional 3 [css-conditional-3] 的功能, 新增了通过 selector() 记法, 查询特定选择器 [SELECTORS-4] 支持情况的能力, 用于 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. 简介

第3级中的功能仍然在[css-conditional-3]中定义,尚未复制到本规范。

本级为@supports规则增加了扩展,允许检测对选择器的支持情况。

2. @supports规则的扩展

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

<supports-feature> = <supports-selector-fn> | <supports-decl>
<supports-selector-fn> = selector( <complex-selector> )
<supports-selector-fn>

如果UA支持该函数参数给定的选择器,则结果为true。

测试
本例用于测试column 连接符(||) 是否在选择器中被支持, 若支持则用其为表格中的特定单元格设置样式。
@supports selector(col || td) {
  col.selected || td {
    background: tan;
  }
}

条件分组规则中使用的任何命名空间前缀都必须已声明, 否则为无效配置[css-conditional-3]。 这同样适用于 selector 函数中的命名空间前缀。

测试
本例尝试检测带有 CSS限定名的属性选择器是否被支持, 但由于命名空间前缀未声明,属于无效情况。
@supports selector(a[xlink|href]) {
  // do something, but fail
}
本例检测带有 CSS限定名的属性选择器是否被支持。
@namespace x url(http://www.w3.org/1999/xlink);
@supports selector(a[x|href]) {
  // do something
}

2.1. 支持定义的扩展

当CSS处理器递归地接受该选择器的所有部分(而不是认为其任何语法未知或无效), 且该选择器不包含未知的 -webkit- 伪元素时, 则被认为支持CSS选择器

注意:某些函数型选择器采用宽容解析,即使某些参数未知或无效,选择器本身不会被判为无效。 这些情况依然被视为不支持。

安全性注意事项

尚未发现针对本文档的安全性问题。

隐私注意事项

selector()函数可能会暴露关于用户软件的信息, 例如其版本及是否启用或禁用某些非默认功能。

这些信息也可以通过其他API获得, 不过本规范中的相关功能是网页上暴露这些信息的途径之一。

这些信息还可用于提升用户指纹识别的准确率。

致谢

编辑者感谢上一版本模块的所有贡献者。

变更

2022年2月17日候选推荐快照以来的变更

2020年3月3日首个公开工作草案以来的变更

自第3级以来的新增内容

一致性

文档约定

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

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

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

这是一个说明性的示例。

说明性注释以“注意”开头,并用 class="note" 与规范性文本区分,如下所示:

注意,这是一个说明性注释。

建议性内容为规范性章节,并采用特殊样式突出显示,与其他规范性文本区分,形式如下:UA 必须提供无障碍替代方案。

测试

与本规范内容相关的测试可在类似于此的“测试”区块中记录。 这些区块均为非规范性内容。


一致性类别

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

样式表
CSS 样式表
渲染器
解释样式表语义并渲染使用它们的文档的UA
创作工具
用于编写样式表的UA

如果样式表中所有使用本模块定义语法的声明都符合通用 CSS 语法和本模块各特性的语法,则该样式表符合本规范。

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

创作工具符合本规范,需编写语法正确且符合本模块各特性语法的样式表,并满足本模块所述的所有其他样式表一致性要求。

部分实现

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

对不稳定和专有特性的实现

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

非实验性实现

当规范进入候选推荐阶段后,便可实现非实验性实现,且实现者应发布不带前缀的、可证明按规范正确实现的任何 CR 级特性。

为建立并保持 CSS 在各实现间的互操作性,CSS 工作组要求非实验性 CSS 渲染器在发布不带前缀的 CSS 特性实现前,向 W3C 提交实现报告(如有必要,还需提交用于该报告的测试用例)。提交给 W3C 的测试用例将由 CSS 工作组审核和修正。

提交测试用例和实现报告的更多信息可在 CSS 工作组网站 https://www.w3.org/Style/CSS/Test/ 获取。 问题可通过public-css-testsuite@w3.org 邮件列表咨询。

CR 退出标准

本规范要晋升为建议推荐,需每项特性至少有两个独立且可互操作的实现。每项特性可由不同产品实现,无需所有特性由同一产品实现。对此标准,定义如下术语:

独立
每个实现必须由不同的团队开发,不得共享、重用或派生自其他合格实现的代码。与本规范实现无关的代码可不受此限制。
可互操作
通过官方 CSS 测试套件的相关测试,或(若实现不是 Web 浏览器)通过等效测试。若使用此类 UA 声称互操作性,则需为每个相关测试创建等效测试,且需有一个或多个其他 UA 能以相同方式通过这些测试,且等效测试需公开以便同行评审。
实现
指如下用户代理:
  1. 实现了本规范。
  2. 向公众开放。可为正式产品或其他公开版本(如测试版、预览版或“nightly build”)。非正式产品需至少实现相关特性一个月,以验证稳定性。
  3. 不是实验性实现(即非专为通过测试套件而设计、未来不打算正常使用的版本)。

规范将至少保持候选推荐状态六个月。

索引

本规范定义的术语

引用定义的术语

参考文献

规范性参考

[CSS-CONDITIONAL-3]
Chris Lilley; David Baron; Elika Etemad. CSS Conditional Rules Module Level 3. 2024年8月15日. CRD. URL: https://www.w3.org/TR/css-conditional-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2024年3月12日. WD. URL: https://www.w3.org/TR/css-values-4/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. 最佳当前实践. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2022年11月11日. WD. URL: https://www.w3.org/TR/selectors-4/

参考性参考

[CSS-NAMESPACES-3]
Elika Etemad. CSS Namespaces Module Level 3. 2014年3月20日. REC. URL: https://www.w3.org/TR/css-namespaces-3/

问题索引

第3级中的功能仍然在[css-conditional-3]中定义,尚未复制到本规范。