CSS 层叠和继承 第 5 级

W3C 候选推荐快照,

更多关于本文档的详细信息
此版本:
https://www.w3.org/TR/2022/CR-css-cascade-5-20220113/
最新发布的版本:
https://www.w3.org/TR/css-cascade-5/
编辑草案:
https://drafts.csswg.org/css-cascade-5/
之前的版本:
历史:
https://www.w3.org/standards/history/css-cascade-5
实现报告:
https://wpt.fyi/results/css/css-cascade
反馈:
CSSWG 问题存储库
规范中的内联问题
编辑:
Elika J. Etemad / fantasai (特邀专家)
Miriam E. Suzanne (特邀专家)
Tab Atkins Jr. (Google)
建议对本规范进行编辑:
GitHub 编辑器

摘要

本 CSS 模块描述了如何整理样式规则并为所有元素的所有属性赋值。通过层叠和继承,所有元素的所有属性的值都会被传播。

本级别的新特性是层叠层。

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

本文档的状态

本节描述了本文档在发布时的状态。 当前 W3C 发布物的列表和本技术报告的最新修订版 可以在 W3C 技术报告索引中找到。

本文档由CSS 工作组以候选推荐快照的形式发布,使用推荐标准流程。 作为候选推荐的发布不代表 W3C 及其成员的认可。 候选推荐快照已经过 广泛审查, 旨在收集实施经验,并且工作组成员承诺对实现提供免版税许可。 本文档旨在成为 W3C 推荐标准; 它将至少保持候选推荐状态直到 以收集更多反馈。

请通过在 GitHub 中提交问题(优先)发送反馈, 包括规范代码 “css-cascade” 在标题中,如: “[css-cascade] …评论摘要…”。 所有问题和评论都在档案中存档。 或者,反馈可以发送到(存档)公共邮件列表www-style@w3.org。

本文档受2021年11月2日的 W3C 过程文档管理。

本文档由在 W3C 专利政策下运作的小组制作。 W3C 维护着一个与小组交付物相关的专利公开列表; 该页面还包含披露专利的说明。 任何个人如果知道某项专利并相信其包含必要声明,必须按照W3C 专利政策第 6 节披露信息。

以下特性存在风险,可能在候选推荐期间被移除:

“存在风险”是 W3C 过程中的术语,并不一定意味着该特性有被移除或延迟的风险。它表示工作组认为该特性可能在适时的实施中遇到困难,并将其标记为“存在风险”允许在向建议推荐阶段过渡时,如有必要,工作组可以在不先发布没有该特性的候选推荐的情况下删除该特性。

1. 简介

CSS 定义了一组有限的参数,称为 属性,用于指导文档的渲染。 每个 属性 都有一个名称 (例如,color、font-size 或 border-style), 一个值空间 (例如,<color>、 <length-percentage>、[ solid | dashed | dotted | … ]), 以及对文档渲染的定义行为。 属性值通过 属性声明 赋给文档的各个部分, 为关联的元素或框赋值 (例如 red、12pt、dotted)。

CSS 的基本设计原则之一是 层叠, 允许多个样式表影响文档的展示。 当不同的声明尝试为同一元素/属性组合设置值时, 必须以某种方式解决冲突。

相反的问题在于,当没有声明尝试为元素/属性组合设置值时, 可以通过 继承 或查看属性的 初始值 来找到一个值。

层叠 和 默认化 过程 将一组声明作为输入, 输出每个元素上每个属性的 指定值。

本规范描述了在文档中为所有元素上的所有属性查找指定值的规则。 查找页面上下文及其页边框中的指定值的规则在 [css-page-3] 中描述。

1.1. 模块交互

本节是规范性的。

本模块替换并扩展了 [CSS2] 第 6 章中定义的属性值赋值、层叠和继承的规则。

其他 CSS 模块可能会扩展此处定义的某些语法和功能的定义。 例如,媒体查询第 4 级规范, 与本模块结合时,扩展了 <media-query> 值类型在本规范中的定义。

为了本规范的目的,文本节点 被视为其关联元素的元素子节点,并拥有完整的属性集; 由于它们不能被选择器定位, 所有它们的计算值都由 默认化 赋值。

2. 导入样式表:@import 规则

@import 规则允许用户从其他样式表中导入样式规则。 如果 @import 规则引用了一个有效的样式表, 用户代理必须将该样式表的内容视为在 @import 规则的位置处编写,除以下两种情况外:

例如,导入的样式表中的样式规则中的声明与层叠的交互方式与它们在 @import 位置处编写时相同。

任何 @import 规则必须位于样式表中所有其他有效的 at 规则和样式规则之前 (忽略 @charset 和空的 @layer 定义), 并且在它与之前的 @import 规则之间不能有任何其他有效的 at 规则或样式规则, 否则 @import 规则无效。 @import 的语法如下:

@import [ <url> | <string> ]
        [ layer | layer(<layer-name>) ]?
        [ supports( [ <supports-condition> | <declaration> ] ) ]?
        <media-query-list>? ;

其中:

以下条件 @import 规则仅在用户代理 支持 display: flex 时加载样式表, 并且仅在 手持设备 上且 最大视口宽度为 400px 时应用样式表。
@import url("narrow.css") supports(display: flex) handheld and (max-width: 400px);
以下层导入分别将样式表加载到 framework.component 层和未命名层中:
@import url("tabs.css") layer(framework.component);
@import url("override.css") layer();

如果提供了 <string>, 则必须将其解释为具有相同值的 <url>。

以下两行在含义上是等价的,说明了两种 @import 语法 (一种使用 url(),一种使用裸字符串):
@import "mystyle.css";
@import url("mystyle.css");

2.1. 条件 @import 规则

导入条件 允许导入样式表根据媒体或特性支持。 如果没有任何 导入条件,则导入是无条件的。 (为 <media-query-list> 指定 all 具有相同的效果。) 如果 导入条件 不匹配, 则导入的样式表中的规则不适用, 就像导入的样式表被包裹在 @media 和/或 @supports 块中一样。

以下规则说明了如何使 @import 规则具有媒体依赖性:
@import url("fineprint.css") print;
@import url("bluish.css") projection, tv;
@import url("narrow.css") handheld and (max-width: 400px);

因此,只要 导入条件 不匹配, 用户代理可以避免获取条件导入。 此外,如果 <supports-condition> 阻止了导入的样式表的应用, 用户代理 不得 获取样式表(除非它通过其他链接加载), 并且 必须 返回 null 作为导入规则的 CSSImportRule.styleSheet 值 (即使它通过其他链接加载)。

以下规则说明了作者如何为旧版用户代理提供回退规则, 而不影响新版用户代理的网络性能:
@import url("fallback-layout.css") supports(not (display: flex));
@supports (display: flex) {
  ...
}

导入条件 由 <media-query-list> 给出,并被解析和解释为 媒体查询列表, 以及 <supports-condition>,解析和解释为 [[supports query]]。 如果提供了 <declaration> 代替 <supports-condition>, 则必须将其解释为 <supports-decl>(即,额外的括号是隐含的), 并视为 <supports-condition>。

例如,以下两行是等价的:
@import "mystyle.css" supports(display: flex);
@import "mystyle.css" supports((display: flex));

导入条件 的评估和完整语法由 媒体查询 [MEDIAQ] 和 CSS 条件规则 [CSS-CONDITIONAL-3] 规范定义。

2.2. 样式表导入处理

当同一个样式表在多个地方被导入或链接到文档时, 用户代理必须处理(或表现为如此)每个链接,就像链接到一个独立的样式表一样。

注意: 这不对资源的获取方式提出任何要求, 只影响样式表在 CSSOM 中的反映方式以及在此类规范中的使用。 假设适当的缓存, 用户代理完全可以只获取样式表一次, 即使它被多次链接或导入。

导入的样式表的层叠来源 是导入它的样式表的 层叠来源。

导入样式表的环境编码 是导入它的样式表的编码。 [css-syntax-3]

2.3. CSS 样式表的内容类型

导入样式表的处理取决于所链接资源的实际类型:

如果所链接资源的类型为 text/css, 则必须将其解释为 CSS 样式表。 否则,必须将其解释为网络错误。

3. 简写属性

某些属性是简写属性, 这意味着它们允许作者使用单个属性指定多个属性的值。 一个简写属性 会设置其所有长写子属性, 就如同在原位置展开一样。

当简写形式中省略了值时, 除非另有定义, 每个“缺失的”子属性都会被赋予 其初始值。

这意味着一个简写属性声明始终会设置其所有子属性, 即使是那些没有显式设置的子属性。 如果使用不慎,这可能会导致无意中重置某些子属性。 如果使用得当,一个简写可以通过重置从其他来源无意层叠而来的子属性, 来保证一个“空白状态”。

例如,编写 background: green 而不是 background-color: green,可确保背景颜色 覆盖任何较早的声明, 这些声明可能已通过 background-image 将背景设置为图像。

例如,CSS Level 1 的 font 属性 是一个用于同时设置 font-style、font-variant、font-weight、font-size、line-height 和 font-family 的简写 属性。 此示例中的多个声明:
h1 {
  font-weight: bold;
  font-size: 12pt;
  line-height: 14pt;
  font-family: Helvetica;
  font-variant: normal;
  font-style: normal;
}

因此可以重写为

h1 { font: bold 12pt/14pt Helvetica }

随着更多 font 子属性被引入 CSS, 简写声明也会将这些属性重置为其初始值。

在某些情况下,简写可能具有不同的语法 或特殊关键字, 它们并不直接对应于其子属性的值。 (在这种情况下,简写会显式定义其值的 展开方式。)

在其他情况下,某个属性可能是简写的仅重置子属性: 与其他子属性一样,当未指定时,它会被简写重置 为其初始值, 但简写中可能不包含将该子属性设置为 其任何其他值的语法。例如,border 简写会将 border-image 重置为其初始值 none, 但没有将其设置为其他值的语法。[css-backgrounds-3]

如果一个简写被 指定为CSS 全局关键字之一 [css-values-3], 它会将其所有子属性设置为 该关键字, 包括任何仅重置子属性。 (请注意,这些关键字不能在单个声明中与其他值组合使用,即使是在 简写中也不行。)

将一个简写 属性声明为 !important,等同于将其所有子属性声明为 !important。

3.1. 属性别名

有时,属性在被支持了一段时间后会更改名称,例如供应商前缀属性被标准化。 出于兼容性原因,仍需要支持原始名称,但新名称是首选的。 为此,CSS 定义了两种将旧语法“别名化”到新语法的方法。

旧名称别名
当旧属性的值语法与新属性的值语法相同时, 两个名称通过类似于大小写映射的操作进行别名化: 在解析时,将旧属性转换为新属性。 此转换也适用于 CSSOM, 无论是字符串参数还是属性访问器: 对旧属性名的请求透明地转移到新属性名。
例如,如果 old-name 是 旧名称别名 对于 new-name, getComputedStyle(el).oldName 将返回 newName 属性的计算样式, 并且 el.style.setPropertyValue("old-name", "value") 将把 new-name 属性设置为 "value"。
旧简写
当旧属性的语法与新属性的语法不同, 两个名称通过 简写 机制进行别名化。 这些简写被定义为 旧简写,其使用是不推荐的。 它们的行为与常规简写完全相同, 唯一不同的是,在序列化声明时 CSSOM 不会使用它们。[CSSOM]
例如,page-break-* 属性 是 旧简写 对于 break-* 属性 (参见 CSS Fragmentation 3 § 3.4 页面断点别名:page-break-before、page-break-after 和 page-break-inside 属性)。

设置 page-break-before: always 在解析时展开为 break-before: page, 类似于其他简写。 同样地,如果设置了 break-before: page, 调用 getComputedStyle(el).pageBreakBefore 将返回 "always"。 然而,在序列化样式块时 (参见 CSSOM 1 § 6.7.2 序列化 CSS 值), 永远不会选择 page-break-before 作为序列化的简写, 无论是它还是 break-before 被指定; 而是总是选择 break-before。

3.2. 重置所有属性:all 属性

名称: all
值: initial | inherit | unset | revert | revert-layer
初始值: 见各个属性
适用: 见各个属性
是否继承: 见各个属性
百分比: 见各个属性
计算值: 见各个属性
动画类型: 见各个属性
规范顺序: 按语法

all 属性是一种 简写,用于重置所有 CSS 属性, 除了 direction 和 unicode-bidi。 它只接受 CSS 宽泛关键字。 它不会重置 自定义属性 [css-variables-1]。

注意: 被排除的 CSS 属性 direction 和 unicode-bidi 实际上是标记级特性, 不应在作者的样式表中设置。 (它们作为 CSS 属性存在仅是为了样式化用户代理不支持的文档语言。) 作者应使用适当的标记,例如 HTML 的 dir 属性。[css-writing-modes-3]

例如,如果作者在元素上指定了 all: initial, 它将阻止所有继承并重置所有属性, 就好像在级联的作者、用户或用户代理级别中没有出现任何规则一样。

这对于页面中包含的“小部件”的根元素非常有用, 该元素不希望继承外部页面的样式。 但是请注意,应用于该元素的任何“默认”样式 (例如,用户代理样式表对 <div> 这样的块级元素应用的 display: block) 也将被清除。

4. 值处理

一旦用户代理解析了文档并构建了文档树,它必须为树中的每个元素,以及对应的格式化结构中的每个框,分配适用于目标媒体类型的每个属性的值。

给定元素或框的 CSS 属性的最终值是多步计算的结果:

  1. 首先,收集应用于元素的每个属性的所有声明值。 每个元素上可能有零个或多个声明值。
  2. 层叠确定层叠值。 每个元素的每个属性最多有一个层叠值。
  3. 默认值确定指定值。 每个元素的每个属性有且仅有一个指定值。
  4. 解决值依赖关系后得出计算值。 每个元素的每个属性有且仅有一个计算值。
  5. 格式化文档后得出使用值。 只有当属性适用于该元素时,元素才有该属性的使用值。
  6. 最后,使用值根据显示环境的约束转换为实际值。 与使用值一样,可能会或不会存在某个属性的实际值。

未连接或不属于文档扁平化元素树的一部分的元素不参与 CSS 值处理, 因此没有声明值、层叠值、指定值、计算值、使用值或实际值, 即使它们可能有样式声明(例如通过style属性)赋予它们。

4.1. 声明值

应用于元素的每个属性声明应用于元素为该属性提供了一个声明值。 详情请参见过滤声明。

这些值然后通过层叠处理,以选择一个“获胜值”。

4.1.1. 值别名

一些属性值具有旧版值别名: 在解析时,旧版语法被转换为新语法, 结果是一个与解析输入不同的声明值。 这些别名通常用于处理旧版兼容性要求, 例如将供应商前缀值转换为它们的标准等价物。

4.2. 层叠值

层叠值表示层叠的结果: 它是赢得层叠的声明值 (在层叠输出中排序第一)。 如果层叠输出为空列表, 则没有层叠值。

4.3. 指定值

指定值是 样式表作者为该元素指定的给定属性的值。 它是将层叠值通过默认化过程后的结果, 保证每个元素的每个属性都有一个指定值。

在许多情况下,指定 值就是层叠 值。 但是,如果根本不存在层叠值, 则指定值会取默认值。 当CSS 全局关键字是某个属性的层叠值时, 会对其进行特殊处理, 按照该关键字的要求设置指定值, 参见§ 7.3 显式默认化。

4.4. 计算值

计算值是 解析指定值的结果,如属性定义表中的“计算值”行所定义, 通常是在继承之前将其绝对化。

注: 计算值是在继承过程中从父元素传递给子元素的值。 由于历史原因, 它不一定是 getComputedStyle() 函数返回的值, 该函数有时会返回使用值。 [CSSOM] 此外,计算值是一种抽象数据表示: 它们的定义反映的是这种数据表示, 而不是该数据如何被序列化。 例如,序列化规则通常允许省略某些在解析过程中可推导出的值; 但这些值仍然是计算值的一部分。

一个指定值可以是绝对的(即,不相对于另一个值,例如 red或 2mm) 或相对的(即,相对于另一个值,例如auto,2em)。 计算相对值通常将其绝对化:

参见下表中的示例 (f)、(g) 和 (h) 在下表中。

注意: 通常来说,计算值尽可能解析指定值,而不进行文档布局 或其他昂贵且难以并行化的操作, 例如解析网络请求 或检索除该元素及其父元素之外的值。

计算值即使在属性不适用时也依然存在。 但是,某些属性可能会根据属性是否适用于元素来更改它们确定计算值的方式。

4.5. 使用值

使用值是 通过对计算值进行所有剩余的计算所得的结果,以使其成为用于格式化文档的绝对理论值。

例如, width: auto 的声明 在不知道元素祖先的布局的情况下无法解析为一个长度值, 因此计算值是 auto, 而使用值是一个绝对长度,例如 100px。[CSS2]

另一个例子,一个 <div> 可能有一个break-before的计算值为 auto, 但通过从其第一个子元素中传播,获得一个使用的break-before值为 page。[css-break-3]

如果某个属性不适用于该元素或框类型, 那么它对于该属性没有使用值。

例如, flex 属性在不是 弹性项目的元素上没有 使用值。

4.5.1. 适用的属性

如果某个属性不适用于某个元素或框类型—如其“适用于”行中所述—这意味着它不会直接对该类型的框或元素生效。

注意: 一个不适用的属性 仍然可能通过间接的方式影响格式化, 如果它的计算值影响到其他适用于该类型的属性的计算; 并且当然它的计算值, 无论如何存在, 仍然可以继承给后代元素 并对它们生效。

即使 writing-mode 和 text-orientation 不适用于表格行 (它们不影响表格行或其子元素的布局), 在这些框上设置它们 仍然会影响与字体相关的单位(如 ch)的计算, 因此也可能会影响使用 <length>的任何属性。
设置 text-transform 在一个 HTML p 元素上 (默认情况下它是 display: block) 会生效, 即使 text-transform 仅适用于 行内框, 因为该属性会继承到段落的匿名 根行内框 并应用于其中包含的文本。

注意: 适用于“所有元素”的属性适用于所有元素和 display 类型, 但不一定适用于所有 伪元素 类型, 因为伪元素通常有它们自己特定的渲染模型 或其他限制。 然而,::before 和 ::after 伪元素被定义为几乎与正常元素生成的框相同, 因此被定义为接受所有适用于“所有元素”的属性。 参见[CSS-PSEUDO-4]了解更多关于 伪元素的信息。

4.6. 实际值

使用值原则上已准备好使用, 但用户代理在特定环境中可能无法使用该值。例如,用户代理可能只能以整数像素宽度渲染边框, 因此可能需要对使用的宽度进行近似。 此外,元素的字体大小可能需要根据字体的可用性或 font-size-adjust属性的值进行调整。 实际值是 在进行这些调整后得到的使用值。

注意: 通过探查元素的实际值,可以学到很多关于文档布局的信息。 然而,并非所有信息都记录在实际值中。 例如,page-break-after属性的实际值 并不反映元素之后是否有分页符。 同样,orphans的实际值 也不反映某个元素中的孤行数量。 参见下表中的示例 (j) 和 (k) 在下表中。

4.7. 示例

CSS 值计算示例
属性 最终声明 层叠值 指定值 计算值 使用值 实际值
(a) text-align text-align: left left left left left left
(b) border-top-width, border-right-width, border-bottom-width, border-left-width border-width: inherit inherit 4.2px 4.2px 4.2px 4px
(c) width (无) (无) auto (初始值) auto 120px 120px
(d) list-style-position list-style-position: inherit inherit inside inside inside inside
(e) list-style-position list-style-position: initial initial outside (初始值) outside outside outside
(f) font-size font-size: 1.2em 1.2em 1.2em 14.1px 14.1px 14px
(g) width width: 80% 80% 80% 80% 354.2px 354px
(h) width width: auto auto auto auto 134px 134px
(i) height height: auto auto auto auto 176px 176px
(j) page-break-after (无) (无) auto (初始值) auto auto auto
(k) orphans orphans: 3 3 3 3 3 3

4.8. 按片段值处理

某些 CSS 特性可能会在每个片段的基础上干扰值的处理。 例如,参见 CSS Pseudo-Elements 4 § 2.1.3 Inheritance and the ::first-line Pseudo-element, 它改变了 ::first-line 伪元素中的片段的继承。 在这种情况下,个别片段被赋予了不同的指定值, 任何基于其他属性的计算值解析的值 (例如 currentcolor 或 em 单位) 都会在每个框片段中进行解析。 在每个片段中,后续的值处理正常进行。

假设每个框(而不是每个框片段)具有单一值的 API 必须忽略非树遵循的伪元素的影响。 (例如,::first-line 样式对 getComputedStyle() 返回的值没有影响。)

例如,给定以下标记:
<div><span>First line<br />Second line</span></div>
<div><span>First line</span></div>
<div>First line<br><span>Second line</span></div>
<style>
div { color: blue; }
div::first-line { color: yellow; }
span { border: thin solid currentcolor; }
</style>

在每个 div 中, “First line” 文本是黄色,“Second line” 文本是蓝色; 包裹每一行的 span 的每个片段的边框与该颜色相匹配。

但是,对所有三个 span 执行 getComputedStyle(), 返回的 border-color 的值都是 "blue", 因为 ::first-line 伪元素的影响对于不支持片段的 API 被忽略。

5. 过滤

为了找到声明的值, 实现必须首先识别所有适用于每个元素的声明。 如果声明符合以下条件之一,则适用于某个元素:

适用的声明值形成了, 对于每个元素的每个属性, 一个声明值列表。 下一节, 层叠, 对这些列表进行优先级排序。

6. 层叠

层叠对给定元素的给定属性的无序 声明值列表, 根据下文确定的声明优先级进行排序, 并输出一个层叠值。

6.1. 层叠排序顺序

层叠根据以下标准对声明进行排序,按优先级从高到低排列:

来源和重要性
声明的来源取决于 它来自何处, 而其重要性则取决于 是否使用 !important 进行声明(参见下文)。 各种来源的优先级按降序排列如下:
  1. 过渡声明 [css-transitions-1]
  2. 重要的用户代理 声明
  3. 重要的用户 声明
  4. 重要的作者声明
  5. 动画声明 [css-animations-1]
  6. 普通的作者声明
  7. 普通的用户声明
  8. 普通的用户代理声明

此列表中较早的来源的声明优先于 较晚的来源的声明。

上下文
文档语言可以规定混合来自 不同封装上下文的声明, 例如 [DOM] 中影子 树的嵌套树上下文。

当比较两个 来自不同封装上下文的声明时, 对于普通规则, 来自外部上下文的声明优先, 而对于重要规则, 来自内部上下文的声明优先。 为此,[DOM] 树 上下文被视为按照包含影子树的树顺序嵌套。

注: 这实际上意味着,属于某个封装上下文的普通声明可以设置容易被外部上下文 覆盖的默认值, 而属于某个封装上下文的重要声明则可以强制实施 无法被外部上下文覆盖的要求。

附加到元素的样式
对普通声明和重要声明分别而言, 直接附加到元素的声明 (例如style 属性的内容) 而不是通过样式规则选择器间接映射的声明, 优先于通过样式规则映射的具有相同重要性的声明。

参见 [css-style-attr]。

注: 非 CSS 表现提示(例如表现性 标记) 会单独处理, 参见§ 6.5 非 CSS 表现提示的优先级。

层
每个来源和上下文 中的声明可以显式分配到一个层叠层。 就此步骤而言, 任何未分配到显式层的声明 都会被添加到一个隐式的最终层中。

层叠层(与声明一样)按出现顺序排列。 当比较属于不同层的声明时, 对于普通规则, 其层叠层最后的声明优先, 而对于重要规则, 其层叠层最先的声明优先。

注: 这遵循与对普通和重要的来源进行分层时所使用的相同逻辑, 因而 !important 标志在两种情况下都保持相同的“覆盖”作用。

优先级
选择器模块 [SELECT] 描述了如何计算选择器的优先级。 每个声明都具有与其所在样式规则相同的优先级。 优先级最高的声明胜出。
出现顺序
文档顺序中最后的声明胜出。 为此:
  • 样式表按照最终 CSS 样式表中的顺序排列。
  • 来自导入样式表的声明,其顺序如同其样式 表在 @import 规则所在位置被替换进去一样。
  • 来自源文档独立链接的样式表的声明 被视为按照链接顺序连接在一起, 该顺序由宿主文档语言确定。
  • 来自样式属性的声明 按照该样式属性所在元素的文档顺序排列, 并且全部置于任何样式表之后。

层叠输出是每个元素的每个属性的(可能为空的)声明值的排序列表。

6.2. 层叠来源

每个样式规则都有一个层叠来源, 它决定了规则在层叠中的位置。 CSS 定义了三个核心的来源:

作者来源
作者根据文档语言的约定为源文档指定样式表。 例如,在 HTML 中, 样式表可以包含在文档中或外部链接。
用户来源
用户可以为特定文档指定样式信息。 例如,用户可以指定包含样式表的文件, 或用户代理可以提供生成用户样式表的接口 (或表现得像是生成了样式表)。
用户代理来源
合格的用户代理必须应用默认样式表 (或表现得像是应用了样式表)。 用户代理的默认样式表应以符合文档语言的一般表现预期的方式呈现文档语言的元素 (例如,对于可视浏览器,HTML 中的 EM 元素使用斜体字体呈现)。 参见例如 HTML 用户代理样式表。[HTML]

CSS 的扩展定义了以下附加的来源:

动画来源
CSS 动画 [css-animations-1] 在运行时生成表示其效果的“虚拟”规则。
过渡来源
类似于 CSS 动画,CSS 过渡 [css-transitions-1] 在运行时生成表示其效果的“虚拟”规则。

6.3. 重要声明:!important 注解

CSS 尝试在作者和用户样式表之间创造权衡。 默认情况下,作者样式表中的规则会覆盖用户样式表中的规则, 而用户样式表会覆盖用户代理默认样式表中的规则。 为了平衡这一点,可以将声明标记为重要, 这会增加它在层叠中的权重,并倒置优先顺序。

如果声明的值中最后两个(非空格,非注释)符号是分隔符 ! 和标识符 important, 则该声明是重要的, 如[css-syntax-3] 所定义。 所有其他声明都是普通的(非重要的)。

[hidden] { display: none !important; }

重要的声明优先于普通的声明。 作者和用户样式表中可以包含重要的声明, 其中用户来源的重要的声明 会覆盖作者来源的重要的声明。 这种 CSS 特性通过给予有特殊需求的用户 (大字体、颜色组合等) 对表现的控制,提高了文档的可访问性。

来自所有来源的重要的声明优先于动画。 这允许作者在重要的情况下覆盖动画值。 (动画值通常覆盖所有其他规则。)[css-animations-1]

用户代理样式表中也可以包含重要的声明。 这些声明会覆盖所有作者和用户声明。

以下示例中,用户样式表中的第一个规则包含了 !important 声明, 它覆盖了作者样式表中的相应声明。 第二个规则中的声明也由于标记为 !important 而获胜。 然而,用户样式表中的第三个声明不是 !important,因此会输给作者样式表中的第二个规则 (其恰好在一个简写属性上设置了样式)。 同样,作者样式表中的第三个规则也会输给作者样式表中的第二个规则,因为第二个声明是 !important。 这表明 !important 声明在作者样式表中也有作用。
/* 来自用户样式表 */
p { text-indent: 1em !important }
p { font-style: italic !important }
p { font-size: 18pt }

/* 来自作者样式表 */
p { text-indent: 1.5em !important }
p { font: normal 12pt sans-serif !important }
p { font-size: 24pt }
属性 获胜值
text-indent 1em
font-style italic
font-size 12pt
font-family sans-serif

6.4. 层叠层

就像层叠来源在用户和作者样式之间提供了平衡, 层叠层提供了一种结构化的方法, 用于在单一来源中组织和平衡各种需求。 单个层叠层中的规则彼此叠加, 而不会与层外的样式规则交织。

作者可以创建层来表示元素的默认值、 第三方库、主题、组件、 覆盖和其他样式需求,并能够以明确的方式重新排列层的层叠顺序, 而无需更改每个层中的选择器或特异性, 或依赖源代码顺序来解决层之间的冲突。

例如,以下内容生成了一个显式的 reset 层, 其层叠权重低于任何未分层的样式:
audio {
  /* specificity of 0,0,1 - implicit (final) layer */
  display: flex;
}

@layer reset {
  audio[controls] {
    /* specificity of 0,1,1 - explicit "reset" layer */
    display: block;
  }
}

未分层的声明在 audio 元素上优先于显式分层的 audio[controls] 声明 —即使未分层样式具有较低的特异性, 并且在源代码顺序中优先。

定义名称的at-rule,例如在层叠层内部定义的 @keyframes 或 @font-face,在 解决名称冲突时也使用层的顺序。

例如, 作者可以通过在更高优先级层中提供相同名称的关键帧来覆盖框架中的动画:
/* establish the layer order, so the "override" layer takes precedence */
@layer framework, override;

@layer override {
  @keyframes slide-left {
    from { translate: 0; }
    to { translate: -100% 0; }
  }
}

@layer framework {
  @keyframes slide-left {
    from { margin-left: 0; }
    to { margin-left: -100%; }
  }
}

.sidebar { animation: slide-left 300ms; }

在这种情况下,override 层的层叠优先级高于 framework 层, 因此 slide-left 动画将使用 translate 属性而不是 margin-left。

6.4.1. 声明层叠层

层叠层可以通过以下方式声明:

提供用于将 link 或 style 元素分配给层叠层的属性?[Issue #w3c/csswg-drafts#5853]

6.4.2. 层命名和嵌套

一个层叠层有一个层名称, 它是一个表示每个层嵌套级别的有序列表, 其中每个部分都可以命名(作为CSS 标识符)或匿名。 (因此,当一个层嵌套在另一个层中时, 其名称会连接在一起。) 当一个层在另一个层的范围内声明时, 它就是嵌套的, 例如,一个 @layer 规则在另一个 @layer 内, 一个嵌套导入中的@import, 或者一个嵌套导入中的 @layer 规则。

层名称如果包含相同顺序的相同部分, 则表示相同的层叠层; 然而,匿名部分在每次出现时都有唯一的身份。 请注意,嵌套可能导致多个层共享相同的匿名部分。

显式层标识符提供了一种将多个样式块分配到单个层的方法。 在以下示例中, headings.css 和 links.css 的内容与 audio[controls] 规则在同一层内进行层叠:
@import url(headings.css) layer(default);
@import url(links.css) layer(default);

@layer default {
  audio[controls] {
    display: block;
  }
}
在此示例中, 嵌套的 framework.base 层与顶级的 base 层是不同的:
@layer base {
  p { max-width: 70ch; }
}

@layer framework {
  @layer base {
    p { margin-block: 0.75em; }
  }

  @layer theme {
    p { color: #222; }
  }
}

生成的层可以表示为树结构:

  1. base

  2. framework

    1. base

    2. theme

或者表示为具有嵌套标识符的扁平列表:

  1. base

  2. framework.base

  3. framework.theme

在语法上,显式的层名称由<layer-name>表示, 该名称用于@layer 和 @import 规则中, 它是由<ident>标记组成的以点分隔的列表, 中间没有空格:

<layer-name> = <ident> [ '.' <ident> ]*

CSS 全局关键字保留供将来使用, 如果在 <ident> 中作为 <layer-name> 使用, 则会导致该规则在解析时无效。 当多个标识符使用句点连接时, 这是表示这些层按顺序嵌套的简写形式。

@layer framework {
  @layer default {
     p { margin-block: 0.75em; }
  }

  @layer theme {
    p { color: #222; }
  }
}

@layer framework.theme {
  /* 这些样式将添加到 framework 层中的 theme 层中 */
  blockquote { color: rebeccapurple; }
}

注意:嵌套层不能“逃逸”其父层来引用其外部的层。

6.4.2.1. 匿名层

当 @layer 规则省略其<layer-name>, 或者 @import 规则使用 layer 关键字(没有提供 <layer-name>), 其层名称获得唯一的匿名段; 因此它不能从外部引用。

每次出现匿名层声明时都代表一个唯一的层叠层, 因此:
没有<layer-name>声明的层 不提供任何用于重新排列或添加样式的外部挂钩。

这可能只是为了简洁方便, 也可以作为团队强制组织约定的一种方式 (该层中的所有代码必须在同一个地方定义), 或者由希望合并并隐藏一组内部“私有”层的库使用, 这些层不希望向作者公开进行操作:

/* bootstrap-base.css */
/* 未命名的包装层包围每个子文件 */
@import url(base-forms.css) layer;
@import url(base-links.css) layer;
@import url(base-headings.css) layer;
/* bootstrap.css */
/* 内部名称被隐藏无法访问,包含在“base”中 */
@import url(bootstrap-base.css) layer(base);
/* author.css */
/* 作者可以访问 bootstrap.base 层,但无法进入未命名的层 */
@import url(bootstrap.css) layer(bootstrap);

/* 向 bootstrap 层添加额外的样式: */
@layer bootstrap {...}

6.4.3. 层顺序

层叠层按照首次声明的顺序进行排序, 嵌套的层在其父层内分组, 排在未分层规则之前。

给定以下层规则:
/* 未分层样式在层顺序中排在最后 */
h1 { color: darkslateblue; }

@layer reset.type {
  strong { font-weight: bold; }
}

@layer framework {
  .title { font-weight: 100; }

  @layer theme {
    h1, h2 { color: maroon; }
  }
}

@layer reset {
  [hidden] { display: none; }
}

首先对外层进行排序, 任何未分层的样式规则 被添加到一个隐含的外层中, 其优先级高于(在后面)显式层:

  1. reset

  2. framework

  3. (隐含外层)

在每个层内, 嵌套的层按照出现顺序排序, 没有进一步嵌套的样式规则 同样被添加到显式嵌套层之后的隐含子层中:

  1. reset.type

  2. reset(隐含子层)

  3. framework.theme

  4. framework(隐含子层)

  5. (隐含外层)

在条件组规则内定义的层不会影响层顺序, 除非条件为真 或除非条件组规则在文档中针对不同元素可以有不同的评估结果。

注意:由于层顺序在全局范围内适用, 在元素敏感的条件组规则内定义的任何层在建立全局层顺序时需要被考虑, 无论规则的条件如何。 然而,文档全局的条件 (如 @media 和 @supports) 可以根据条件处理这样的@layer规则。

例如, 以下层顺序 将取决于匹配的媒体条件:
@media (min-width: 30em) {
  @layer layout {
    .title { font-size: x-large; }
  }
}

@media (prefers-color-scheme: dark) {
  @layer theme {
    .title { color: white; }
  }
}

@layer theme, layout;

如果第一个媒体查询基于视口尺寸匹配, 则layout层将首先出现在层顺序中。 如果颜色方案偏好查询匹配, 或者两个条件都不成立, 则 theme 将首先出现在层顺序中。

希望避免此行为的作者可以提前建立 层的显式顺序, 并避免在条件规则中定义新层。

注意:层叠层限定于其来源和上下文, 因此光 DOM 中层的顺序不会对 阴影 DOM 中同名层的顺序产生影响 (反之亦然)。

允许作者在层顺序中显式放置未分层样式 [Issue #6323]

6.4.4. 内联声明层:@layer规则

@layer规则 声明了一个层叠层, 并可以选择分配样式规则。

6.4.4.1. 内联分配样式:@layer块规则

@layer 块规则将其子样式规则分配给特定的命名层叠层。 这种块层分配语法为:

@layer <layer-name>? {
  <stylesheet>
}

这样的@layer块规则与条件为真的条件组规则[CSS-CONDITIONAL-3]具有相同的限制和处理。

例如,@layer和@media可以混合使用:
@layer framework {
  h1, h2 { color: maroon; background: white;}

  @media (prefers-color-scheme: dark) {
    h1, h2 { color: red; background: black; }
  }
}

注意:@layer块规则 不能与@import规则交错使用。

6.4.4.2. 无样式声明:@layer声明规则

@layer 规则也可以通过仅提供层名称来定义新的层, 而不分配任何样式规则:

@layer <layer-name>#;

这样的空 @layer 规则允许出现在 @import 和 @namespace 规则之前 (如果存在 @charset 规则,则在其之后), 也允许出现在任何允许 @layer 块 at-rule 的位置。

注: 在 @import 和 @namespace 规则之间不允许有任何 @layer 规则。 任何出现在 @import 或 @namespace 规则之后的 @layer 规则 都会导致其后的任何 @import 或 @namespace 规则被忽略。

与块语法不同, 此语法中可以提供多个以逗号分隔的层名称, 并按照指定的顺序声明每个层。

注: 由于层的顺序由层名称的首次出现来定义 (参见§ 6.4.3 层的顺序), 此规则允许页面预先声明其层的顺序, 从而无需读取整个样式表即可看出它们的顺序。 它还允许内联层与导入层交错排列, 这是块语法无法做到的。

语句语法 允许预先确定层的顺序, 而不受样式规则添加到各层中的顺序影响。 预先确定该层顺序可能会有所帮助, 尤其是在任何 @import 规则之前。 在此示例中, 导入的 theme.css 样式规则将覆盖 后面的 default 块中添加的任何规则, 因为层的顺序已经确定:
@layer default, theme, components;
@import url(theme.css) layer(theme);

@layer default {
  audio[controls] {
    display: block;
  }
}

也可以让 @import 规则 帮助确定顺序, 方法是将它们放在 @layer 规则之间。 此示例将得到相同的结果:

@layer default;
@import url(theme.css) layer(theme);
@layer components;

@layer default {
  audio[controls] {
    display: block;
  }
}

但是,@import 和 @namespace 规则必须 连续出现, 中间不能插入任何其他规则。 以下内容无效:

@import url(default.css) layer(default);
@layer theme;
@import url(components.css) layer(components);

@layer theme {
  audio[controls] {
    display: block;
  }
}

6.5. 非CSS呈现提示的优先级

用户代理(UA)可以选择在源文档的标记中尊重呈现提示, 例如bgcolor属性或 s 元素在[HTML]中。 所有基于文档语言的样式必须转换为相应的CSS规则, 并作为规则进入级联,位于 UA来源或特殊的 作者呈现提示来源,位于常规 用户来源和 作者来源之间。 对于级联的目的, 此作者呈现提示来源被视为独立的 来源, 但对于revert关键字的目的, 它被视为作者来源的一部分。

文档语言可以定义这种呈现提示是否作为级联的 UA来源或 作者来源进入; 如果是,则UA必须相应地执行。 例如,[SVG11]将其呈现属性映射到 作者来源中。

注意:作为级联的UA来源规则的呈现提示 可以被作者来源或用户来源的样式覆盖。 作为作者呈现提示来源规则的呈现提示 可以被作者来源的样式覆盖, 但不能被非important的 用户来源样式覆盖。 主机语言在选择呈现提示的适当来源时应考虑这些因素。

7. 默认值

当级联未产生值时, 必须通过其他方式找到指定值。 继承属性通过 继承从其父元素中获得默认值; 所有其他属性都采用其初始值。 作者可以通过使用inherit和initial关键字显式请求继承或初始化。

7.1. 初始值

每个属性都有一个初始值, 在属性的定义表中定义。 如果该属性不是继承属性, 并且级联未产生值, 则该属性的指定值 是其初始值。

7.2. 继承

继承将属性值从父元素传播到其子元素。 元素上某属性的继承值 是该元素父元素上该属性的计算值。 对于根元素, 它没有父元素, 其继承值是该属性的 初始值。

对于带有影子树的 [DOM] 树, 继承作用于扁平化元素树。这意味着被分配到插槽的元素 从它们被分配到的 slot 继承, 而不是直接从其浅 树父元素继承。伪元素按照为每个伪元素描述的虚构标签序列 进行继承。[CSS-PSEUDO-4]

某些属性是继承属性, 如其属性定义表中所定义。 这意味着, 除非层叠产生了一个值, 否则该值将由继承确定。

属性也可以显式继承。参见 inherit 关键字。

注: 继承遵循文档树,不会被 匿名盒截断, 也不会以其他方式受到盒树操作的影响。

7.3. 显式默认化

下方定义了几个CSS全局属性值; 声明属性具有这些值将显式指定某种默认化行为。 如CSS值与单位所述 [css-values-3], 所有CSS属性都可以接受这些值。

7.3.1. 重置属性:initial关键字

如果属性的级联值 是initial关键字, 则该属性的指定值 是其初始值。

7.3.2. 显式继承:inherit关键字

如果属性的级联值 是inherit关键字, 则该属性的指定值和 计算值 是继承值。

7.3.3. 清除所有声明:unset关键字

如果属性的级联值 是unset关键字, 则如果它是一个继承属性,则其被视为inherit, 如果不是,则视为initial。 该关键字有效地清除声明值在级联中先前发生的所有部分, 正确继承或不继承,具体取决于属性的性质 (或简写属性的所有长手属性)。

7.3.4. 回滚级联来源:revert关键字

如果属性的级联值 是revert关键字, 则行为取决于声明所属的级联来源:

用户代理来源
等同于unset。
用户来源
将级联值 回滚到用户代理级别, 使指定值被计算 得好像该元素上未指定任何作者来源或用户来源规则。
作者来源
将级联值 回滚到用户级别, 使指定值被计算 得好像未指定任何作者来源规则 于此属性的此元素。 对于revert,此来源包括动画来源。

7.3.5. 回滚级联层:revert-layer 关键字

如果某属性的层叠值是 revert-layer 关键字, 则层叠值会回退到下方的层, 从而使指定 值的计算 就如同对于此元素上的此属性,当前层叠层中没有指定任何规则一样——或者在层叠中其 普通和重要级别之间没有指定任何规则一样——。 但是,对于重要附加到元素的样式中的 revert-layer, 它只会回退附加到元素的样式以及介于其间的动画 来源, 而不会回退任何介于其间的作者来源重要 规则。

注: 如果在与 revert-layer 值相同的层叠来源中 没有优先级更低的声明, 则层叠值将 回退到前一个来源。

注: 为此,动画来源不会像 revert 那样与作者 来源合并, 因此实际上形成其自身的层叠层。

8. 层 API

8.1. 扩展CSSImportRule接口

CSSImportRule接口扩展如下:

partial interface CSSImportRule {
  readonly attribute CSSOMString? layerName;
};

其layerName属性表示在at规则中声明的层名称, 如果该层是匿名的,则为空字符串,如果at规则未声明层,则为null。

8.2. CSSLayerBlockRule接口

CSSLayerBlockRule接口表示 @layer块规则:

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

其name属性表示 由at规则本身声明的层名称, 如果该层是匿名的,则为空字符串。

例如,额外的嵌套上下文不会从包装层规则中添加。
@layer outer {
  @layer foo.bar { }
}

在这种情况下,内层@layer规则的name 是“foo.bar”(而不是“outer.foo.bar”)。

8.3. CSSLayerStatementRule接口

CSSLayerStatementRule接口表示 @layer声明:

[Exposed=Window]
interface CSSLayerStatementRule : CSSRule {
  readonly attribute FrozenArray<CSSOMString> nameList;
};

其nameList属性表示 由at规则声明的层名称列表, 按照与CSSLayerBlockRule的 name 属性相同的规则进行规范化。

9. 变更

9.1. 自 2021 年 10 月 15 日工作草案以来的变更

自 2021 年 10 月 15 日工作草案以来的非平凡变更:

9.2. 自 2021 年 8 月 29 日工作草案以来的变更

自 2021 年 8 月 29 日工作草案以来的变更包括:

9.3. 自 2021 年 6 月 8 日工作草案以来的变更

自 2021 年 6 月 8 日工作草案以来的显著变更包括:

9.4. 自 2021 年 3 月 19 日工作草案以来的变更

自 2021 年 3 月 19 日工作草案以来的显著变更包括:

9.5. 自 2021 年 1 月 19 日工作草案以来的变更

自 2021 年 1 月 19 日首次公开工作草案以来的显著变更包括:

9.6. 自第 4 级以来的新增内容

自 第 4 级以来,添加了以下功能:

9.7. 自第 3 级以来的新增内容

自 第 3 级以来,添加了以下功能:

9.8. 自第 2 级以来的新增内容

自 第 2 级以来,添加了以下功能:

致谢

David Baron、Tantek Çelik、Florian Rivoal、Simon Sapin、Jen Simmons 和 Boris Zbarsky 为本规范作出了贡献。

隐私和安全考量

一致性

文档约定

一致性要求通过描述性断言和 RFC 2119 术语的组合来表示。术语“必须”、“不得”、“需要”、“应”、“不应”、“建议”、“可以”和“可选”在本规范的规范性部分中应按照 RFC 2119 中的描述进行解释。然而,为了提高可读性,这些词在本规范中不会全部以大写字母形式出现。

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

本规范中的示例用“例如”引入,或使用 class="example" 与规范性文本分开,如下所示:

这是一个信息性示例。

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

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

建议性内容是规范部分,样式设置为引起特别注意,并使用 <strong class="advisement"> 与其他规范文本分开,如下所示:用户代理必须提供可访问的替代方案。

一致性类别

本规范的一致性定义适用于三种一致性类别:

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

如果样式表中的所有语句在此模块中使用的语法均符合通用 CSS 语法及本模块定义的每个特性的个别语法,则该样式表符合本规范。

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

如果创作工具编写的样式表在语法上符合通用 CSS 语法和本模块中每个特性的个别语法,并且符合本模块中描述的样式表的所有其他一致性要求,则该创作工具符合本规范。

部分实现

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

不稳定和专有特性的实现

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

非实验性实现

一旦规范达到候选推荐阶段,便可以进行非实验性实现,实施者应发布符合规范的 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)创建等效测试,如果该用户代理用于声称互操作性。此外,如果该用户代理用于声称互操作性,则必须有一个或多个其他用户代理也能以相同方式通过这些等效测试,以确保互操作性。这些等效测试必须公开提供以供同行审查。
实现
一个用户代理,其:
  1. 实现了规范。
  2. 向公众提供。实现可以是正式发布的产品或其他公开可用的版本(如测试版、预览版或“夜间构建”)。非正式发布的产品版本必须至少实现该特性一个月,以证明其稳定性。
  3. 不是实验性的(即该版本不是专为通过测试套件而设计的,且不打算作为未来正常使用的版本)。

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

索引

本规范定义的术语

引用定义的术语

参考文献

规范性参考文献

[CSS-2021]
Tab Atkins Jr.; Elika Etemad; Florian Rivoal. CSS Snapshot 2021,2021年12月31日,NOTE。URL: https://www.w3.org/TR/css-2021/
[CSS-ANIMATIONS-1]
Dean Jackson 等。CSS Animations Level 1,2018年10月11日,WD。URL: https://www.w3.org/TR/css-animations-1/
[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3,2021年7月26日,CR。URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4,2018年12月18日,WD。URL: https://www.w3.org/TR/css-break-4/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley; Lea Verou. CSS Color Module Level 4,2021年12月15日,WD。URL: https://www.w3.org/TR/css-color-4/
[CSS-CONDITIONAL-3]
David Baron; Elika Etemad; Chris Lilley. CSS Conditional Rules Module Level 3,2021年12月23日,CR。URL: https://www.w3.org/TR/css-conditional-3/
[CSS-CONDITIONAL-5]
David Baron; Elika Etemad; Chris Lilley. CSS Conditional Rules Module Level 5,2021年12月21日,WD。URL: https://www.w3.org/TR/css-conditional-5/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3,2021年9月3日,CR。URL: https://www.w3.org/TR/css-display-3/
[CSS-FONTS-5]
Myles Maxfield; Chris Lilley. CSS Fonts Module Level 5,2021年12月21日,WD。URL: https://www.w3.org/TR/css-fonts-5/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4,2020年12月31日,WD。URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SCOPING-1]
Tab Atkins Jr.; Elika Etemad. CSS Scoping Module Level 1,2014年4月3日,WD。URL: https://www.w3.org/TR/css-scoping-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS Syntax Module Level 3,2021年12月24日,CR。URL: https://www.w3.org/TR/css-syntax-3/
[CSS-TRANSITIONS-1]
David Baron 等。CSS Transitions,2018年10月11日,WD。URL: https://www.w3.org/TR/css-transitions-1/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3,2019年6月6日,CR。URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4,2021年12月16日,WD。URL: https://www.w3.org/TR/css-values-4/
[CSS-VARIABLES-1]
Tab Atkins Jr. CSS Custom Properties for Cascading Variables Module Level 1,2021年11月11日,CR。URL: https://www.w3.org/TR/css-variables-1/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3,2019年12月10日,REC。URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS2]
Bert Bos 等。Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification,2011年6月7日,REC。URL: https://www.w3.org/TR/CSS21/
[CSSOM]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM),2021年8月26日,WD。URL: https://www.w3.org/TR/cssom-1/
[DOM]
Anne van Kesteren. DOM Standard,现行标准。URL: https://dom.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch Standard,现行标准。URL: https://fetch.spec.whatwg.org/
[HTML]
Anne van Kesteren 等。HTML Standard,现行标准。URL: https://html.spec.whatwg.org/multipage/
[MEDIAQ]
Florian Rivoal; Tab Atkins Jr. Media Queries Level 4,2021年12月25日,CR。URL: https://www.w3.org/TR/mediaqueries-4/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels,1997年3月,最佳现行做法。URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECT]
Tantek Çelik 等。Selectors Level 3,2018年11月6日,REC。URL: https://www.w3.org/TR/selectors-3/
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr. Selectors Level 4,2018年11月21日,WD。URL: https://www.w3.org/TR/selectors-4/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard,现行标准。URL: https://webidl.spec.whatwg.org/

非规范性参考文献

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr. CSS Box Alignment Module Level 3,2021年12月24日,WD。URL: https://www.w3.org/TR/css-align-3/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3,2018年12月4日,CR。URL: https://www.w3.org/TR/css-break-3/
[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr. CSS Cascading and Inheritance Level 4,2021年12月3日,WD。URL: https://www.w3.org/TR/css-cascade-4/
[CSS-CONTAIN-1]
Tab Atkins Jr.; Florian Rivoal. CSS Containment Module Level 1,2020年12月22日,REC。URL: https://www.w3.org/TR/css-contain-1/
[CSS-FLEXBOX-1]
Tab Atkins Jr. 等。CSS Flexible Box Layout Module Level 1,2018年11月19日,CR。URL: https://www.w3.org/TR/css-flexbox-1/
[CSS-FONTS-4]
John Daggett; Myles Maxfield; Chris Lilley. CSS Fonts Module Level 4,2021年12月21日,WD。URL: https://www.w3.org/TR/css-fonts-4/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad; Steve Zilles. CSS Inline Layout Module Level 3,2020年8月27日,WD。URL: https://www.w3.org/TR/css-inline-3/
[CSS-LISTS-3]
Elika Etemad; Tab Atkins Jr. CSS Lists and Counters Module Level 3,2020年11月17日,WD。URL: https://www.w3.org/TR/css-lists-3/
[CSS-PAGE-3]
Elika Etemad; Simon Sapin. CSS Paged Media Module Level 3,2018年10月18日,WD。URL: https://www.w3.org/TR/css-page-3/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3,2021年12月17日,WD。URL: https://www.w3.org/TR/css-sizing-3/
[CSS-STYLE-ATTR]
Tantek Çelik; Elika Etemad. CSS Style Attributes,2013年11月7日,REC。URL: https://www.w3.org/TR/css-style-attr/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS Text Module Level 3,2021年4月22日,CR。URL: https://www.w3.org/TR/css-text-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4,2019年7月30日,CR。URL: https://www.w3.org/TR/css-writing-modes-4/
[SVG11]
Erik Dahlström 等。Scalable Vector Graphics (SVG) 1.1 (Second Edition),2011年8月16日,REC。URL: https://www.w3.org/TR/SVG11/

属性索引

名称 值 初始值 适用于 继承性 % 值 动画类型 规范顺序 计算值
all initial | inherit | unset | revert | revert-layer 参见各个属性 参见各个属性 参见各个属性 参见各个属性 参见各个属性 按语法 参见各个属性

IDL 索引

partial interface CSSImportRule {
  readonly attribute CSSOMString? layerName;
};

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

[Exposed=Window]
interface CSSLayerStatementRule : CSSRule {
  readonly attribute FrozenArray<CSSOMString> nameList;
};

问题索引

提供一个属性用于将链接或样式元素分配到层叠层?[问题 #w3c/csswg-drafts#5853] ↵
允许作者在层次顺序中显式放置未分层的样式 [问题 #6323] ↵