CSS 条件规则模块第 4 级

W3C 候选推荐标准快照,

更多关于本文档的详细信息
此版本:
https://www.w3.org/TR/2022/CR-css-conditional-4-20220217/
最新发布版本:
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 (Mozilla)
Elika J. Etemad / fantasai (受邀专家)
Chris Lilley (W3C)
建议对此规范进行编辑:
GitHub 编辑
增量规范:

摘要

本模块包含 CSS 中用于根据处理器或样式表应用环境的能力,对样式表的部分进行条件处理的功能。它包括并扩展了 CSS 条件规则 3 [css-conditional-3] 的功能,新增了通过 [SELECTORS-4] 的新 selector() 符号对 支持查询 进行特定选择器支持查询的能力。

CSS 是一种描述结构化文档(如 HTML 和 XML)在屏幕上、纸上等渲染方式的语言。

本文档的状态

本节描述了本文档在发布时的状态。有关当前 W3C 出版物的列表以及本技术报告的最新版本,请参见 W3C 技术报告索引 https://www.w3.org/TR/

本文档由 CSS 工作组 作为候选推荐标准快照发布,使用了 推荐轨道。发布为候选推荐标准并不意味着 W3C 及其成员的认可。候选推荐标准快照已经接受了广泛的审查,旨在收集实现经验,并且工作组成员承诺对实现进行免版税许可。本文档旨在成为 W3C 推荐标准;为收集更多反馈,它将至少保持候选推荐标准状态到

请通过在 GitHub 上提交问题(推荐)来提供反馈,并在标题中包含规范代码“css-conditional”,例如:“[css-conditional] …评论摘要…”。所有问题和评论都被存档。或者,可以将反馈发送到(存档)公共邮件列表 www-style@w3.org

本文档受 2021 年 11 月 2 日 W3C 流程文档 管辖。

本文档由遵循 W3C 专利政策 的工作组制作。W3C 维护了与该工作组交付物有关的任何专利声明的公开列表;该页面还包括披露专利的说明。知晓某项专利并相信其包含必要声明的个人,必须按照 W3C 专利政策第 6 节 的要求披露信息。

1. 介绍

第三级中的特性仍定义在[css-conditional-3]中,尚未复制到此处。

本级别对@supports规则进行了扩展,以允许测试支持的选择器。

2. @supports 规则的扩展

本级别的规范扩展了<supports-feature>语法,具体如下:

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

如果用户代理 支持提供给函数的选择器,则结果为 true。

测试
这个例子测试了列组合器 (||) 是否在选择器中受支持,如果支持,就使用它来样式化表中的特定单元格。
@supports selector(col || td) {
  col.selected || td {
    background: tan;
  }
}

条件分组规则中使用的任何命名空间前缀都必须已经声明,否则它们是无效的[css-conditional-3]。这包括选择器函数中的命名空间前缀。

测试
这个例子尝试检查带有 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 处理器支持 CSS 选择器

安全考虑

本文件未提出任何安全问题。

隐私考虑

selector()函数可能会提供有关用户软件的信息,例如其版本以及是否运行具有启用或禁用某些功能的非默认设置。

此信息也可以通过其他 API 确定。然而,本规范中的功能是这些信息在 Web 上公开的方式之一。

此信息也可以聚合用于提高用户指纹识别的准确性。

致谢

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

变更

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",例如:

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

建议性内容是为了引起特别注意的规范性部分,并与其他规范性文本分开,使用<strong class="advisement">,例如:用户代理必须(MUST)提供一个可访问的替代方案。

测试

与本规范内容相关的测试可能会在像这样的“测试”块中进行记录。任何这样的块都是非规范性的。


一致性类别

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

样式表
CSS 样式表
渲染器
用户代理(UA),解释样式表的语义并渲染使用它们的文档。
编写工具
用户代理(UA),编写样式表。

如果样式表中使用了本模块中定义的语法的所有语句都是有效的,根据通用 CSS 语法和本模块中定义的每个功能的单独语法,则该样式表符合本规范。

如果渲染器除了按照适当的规范解释样式表外,还能通过正确解析支持本规范中定义的所有功能并相应地渲染文档,则该渲染器符合本规范。然而,由于设备的限制而导致用户代理无法正确渲染文档,并不使其不符合规范。(例如,用户代理不要求在单色显示器上呈现颜色。)

如果编写工具编写的样式表在语法上是根据通用 CSS 语法和本模块中定义的每个功能的单独语法正确的,并且符合本模块中描述的样式表的所有其他一致性要求,则该编写工具符合本规范。

部分实现

为了让作者能够利用向前兼容的解析规则来分配后备值,CSS 渲染器必须将所有不具备可用支持级别的 at 规则、属性、属性值、关键字和其他语法结构视为无效(并适当忽略)。特别是,用户代理不得选择性地忽略不支持的组件值并在单个多值属性声明中保留支持的值:如果任何值被认为是无效的(如同不支持的值必须是的那样),CSS 要求整个声明被忽略。

不稳定和专有功能的实现

为了避免与未来的稳定 CSS 功能发生冲突,CSS 工作组建议遵循最佳实践来实现不稳定的功能和专有扩展

非实验性实现

一旦规范达到候选推荐(CR)阶段,就可以进行非实验性实现,且实现者应发布不加前缀的实现版本,对于任何符合 CR 级别且能够证明正确实现的功能。

为了建立和保持 CSS 在实现之间的互操作性,CSS 工作组要求非实验性 CSS 渲染器在发布不加前缀的 CSS 功能实现之前向 W3C 提交实现报告(如有必要,还需提交实现报告所用的测试用例)。提交给 W3C 的测试用例须由 CSS 工作组进行审查和修正。

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

CR 退出标准

为了将本规范推进到提议推荐(PR),每个功能必须至少有两个独立且互操作的实现。每个功能可以由不同的产品实现,不要求所有功能都由同一产品实现。为满足此标准,我们定义以下术语:

独立
每个实现必须由不同的开发方开发,且不能共享、重用或派生于另一符合条件的实现所使用的代码。对本规范的实现没有影响的代码部分不在此要求范围之内。
互操作
通过官方 CSS 测试套件中的相应测试用例,或如果实现不是 Web 浏览器,则通过等效测试。如果使用这样的用户代理(UA)来声明互操作性,则每个相关的测试套件应有一个等效的测试被创建。此外,如果使用这样的用户代理(UA)来声明互操作性,则必须有一个或多个其他的用户代理也能通过这些等效测试,目的是证明互操作性。这些等效测试必须公开以供同行审查。
实现
用户代理,需符合以下条件:
  1. 实现规范。
  2. 对公众可用。该实现可以是正式发布的产品或其他公开可用的版本(例如,测试版本、预览版或“每夜构建版”)。非正式发布的产品版本必须在至少一个月内实现该功能以证明其稳定性。
  3. 不是实验性(例如,专门为了通过测试套件而设计的版本且不是为了正常使用的)。

规范将在候选推荐阶段保留至少六个月。

索引

本规范定义的术语

通过引用定义的术语

参考文献

规范性参考文献

[CSS-CONDITIONAL-3]
David Baron; Elika Etemad; Chris Lilley. CSS 条件规则模块第 3 级. 2022 年 1 月 13 日. CR. URL: https://www.w3.org/TR/css-conditional-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块第 4 级. 2021 年 12 月 16 日. WD. URL: https://www.w3.org/TR/css-values-4/
[RFC2119]
S. Bradner. 在 RFC 中用于表示要求级别的关键词. 1997 年 3 月. 最佳当前实践. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SCROLL-ANIMATIONS]
滚动链接动画. cg-draft. URL: https://wicg.github.io/scroll-animations/
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. 选择器第 4 级. 2018 年 11 月 21 日. WD. URL: https://www.w3.org/TR/selectors-4/

说明性参考文献

[CSS-NAMESPACES-3]
Elika Etemad. CSS 命名空间模块第 3 级. 2014 年 3 月 20 日. REC. URL: https://www.w3.org/TR/css-namespaces-3/

问题索引

第 3 级中的功能仍在 [css-conditional-3] 中定义,尚未复制到此处。