CSS 级联与继承 第6级

W3C 工作草案,

关于此文档的更多信息
此版本:
https://www.w3.org/TR/2024/WD-css-cascade-6-20240906/
最新发布版本:
https://www.w3.org/TR/css-cascade-6/
编辑草案:
https://drafts.csswg.org/css-cascade-6/
以前版本:
历史记录:
https://www.w3.org/standards/history/css-cascade-6/
反馈:
CSS 工作组问题存储库
规范中的内联反馈
编辑:
Elika J. Etemad / fantasai (Apple)
Miriam E. Suzanne (受邀专家)
Tab Atkins Jr. (谷歌)
建议对本规范进行编辑:
GitHub 编辑器

摘要

此 CSS 模块描述了如何整理样式规则并为所有元素上的所有属性分配值。通过级联和继承,值会被传播到所有元素的所有属性。

本级新增内容为§ 2.5 作用域样式:@scope 规则。

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

本文档的状态

本节描述了本文档在发布时的状态。 当前 W3C 出版物列表和此技术报告的最新版本可在 W3C 技术报告索引 https://www.w3.org/TR/ 中找到。

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

本文档是草案,可能随时被更新、替换或废弃。 不适合引用此文档,除非作为尚在进行中的工作。

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

本文档受 2023年11月3日 W3C 流程文档 约束。

本文档由遵循 W3C 专利政策 的小组生产。W3C 维护了与小组交付物相关的 公开专利披露列表;该页面还包括披露专利的说明。个人如果实际知道某专利并相信其中包含 必要的声明,必须按照 W3C 专利政策第6节的规定披露信息。

1. 引言与缺失部分

这是一个关于 CSS 级联与继承 第5级 的差异规范。 它目前是探索性工作草案: 如果你正在实现任何内容,请参考第5级。 一旦本草案达到 CR,我们将合并第5级的文本。

2. 级联

级联 处理给定元素上某属性的一组无序 声明值, 按照下述方式根据 声明 的优先级进行排序, 并输出一个单一的 级联值。

2.1. 层叠排序顺序

层叠将 声明 按照以下条件排序, 优先次序从高到低:

来源和重要性
来源 是指 声明 的 来源位置, 而其 重要性 则取决于 是否使用 !important 声明(见 下文)。 各个 来源 的优先次序从高到低为:
  1. 过渡声明 [css-transitions-1]
  2. 重要 用户代理 声明
  3. 重要 用户 声明
  4. 重要 作者 声明
  5. 动画声明 [css-animations-1]
  6. 普通 作者 声明
  7. 普通 用户 声明
  8. 普通 用户代理 声明

此列表中较前的 来源 所对应的声明 优先于后面的 来源 所对应的声明。

上下文
文档语言可以规定如何混合 声明,这些声明 来自不同的 封装上下文, 例如 嵌套的树上下文,它们属于 影子 树,如 [DOM] 中所述。

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

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

样式属性
分别对于 普通 和 重要 声明, 直接附加到元素上的声明 (例如 style 属性的内容), 而不是通过样式规则选择器间接映射的声明, 优先于通过样式规则映射的、具有相同 重要性 的 声明。
层
每个 声明 在各自的 来源 和 上下文 内均可显式 分配到某个 层叠层。 在此步骤中, 任何未分配到显式层的声明都会被添加到隐式的最后一层。

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

注: 这遵循了用于 确定 普通 和 重要 来源 优先次序的相同逻辑, 因此 !important 标志在这两种 情形下都具有相同的“覆盖”作用。

特异性
选择器模块 [SELECT] 描述了如何 计算选择器的特异性。 每个声明的特异性与其所在样式规则的特异性相同。 特异性最高的声明优先。
作用域邻近度
当比较出现在具有不同 作用域根 的样式规则中的声明时, 则选择在 跨越祖先代际或兄弟元素时, 从 作用域根 到 限定作用域的样式规则 的 主体 所需跳数最少的声明。 为此, 没有 作用域根 的样式规则被视为具有 无限的邻近跳数。
出现顺序
文档顺序中最后一个声明优先。 为此:
  • 样式表按照 最终 CSS 样式表 中的顺序排列。
  • 来自 导入的样式表 的声明按其样式 表被替换到 @import 规则所在位置的方式排序。
  • 来自源文档分别链接的样式表的声明 被视为按照链接顺序串接, 该顺序由宿主文档语言决定。
  • 来自样式属性的声明 按照包含该样式属性的元素在文档中的顺序排序, 并且全部排在所有样式表之后。 [CSSSTYLEATTR]

层叠的 输出 是一个(可能为空的)经过排序的 声明 值 列表,分别对应每个元素上的每个属性。

2.2. 层叠来源

CSS 层叠 5 § 6.2 层叠来源

层叠来源

2.3. 重要声明:!important 注释

CSS 层叠 5 § 6.3 重要声明: !important 注释

重要 普通

2.4. 层叠层

CSS 层叠 5 § 6.4 层叠层

2.4.1. 层顺序

CSS 层叠 5 § 6.4.3 层顺序

2.5. 作用域样式:@scope 规则

作用域是文档的一个子树或片段, 可以被选择器用于更有针对性的匹配。 作用域通过以下方式确定:

如果一个元素满足以下条件,则该元素为在作用域内:

注意:与阴影封装不同, 阴影封装在 DOM 中描述了一个持续的一对一关系, 关系发生在阴影宿主与其嵌套的阴影树之间, 而多个重叠的作用域可以与相同的元素建立关系。

作用域样式在 CSS 中使用@scope 块 at 规则描述, 该规则声明了一个作用域根和一组关联的可选作用域限制以及一组样式规则。

例如, 作者可能有广泛的配色方案作用域, 它与一些更狭义的设计模式重叠, 例如媒体对象。 @scope规则中的选择器 建立了作用域根和可选的作用域限制元素, 而嵌套的选择器只匹配处于 所产生的作用域内的元素:
@scope (.light-scheme) {
  /* 仅匹配 light-scheme 内的链接 */
  a { color: darkmagenta; }
}

@scope (.dark-scheme) {
  /* 仅匹配 dark-scheme 内的链接 */
  a { color: plum; }
}

@scope (.media-object) {
  /* 仅匹配 media-object 内的作者图片 */
  .author-image { border-radius: 50%; }
}
通过提供作用域限制, 作者可以限制匹配更深层的后代。 例如:
@scope (.media-object) to (.content > *) {
  img { border-radius: 50%; }
  .content { padding: 1em; }
}

img选择器将仅匹配 DOM 片段中起始于任何 .media-object并包括其到 .content类的任何子节点的图像标签。

是否应在 作用域选择器的定义中添加作用域限制?

2.5.1. @scope 的影响

@scope at 规则对其包含的 样式规则有三个主要影响:

注意:与嵌套不同, @scope 规则中的选择器 不会继承 @scope 前言中的父选择器的特异性。

以下选择器具有相同的特异性(0,0,1):
@scope (#hero) {
  img { border-radius: 50%; }
}

:where(#hero) img { border-radius: 50%; }

额外的 #hero 选择器特异性 不适用于作用域选择器的特异性。 然而,由于其中一个 img 选择器具有作用域, 因此该选择器在层叠中被赋予更高的权重, 通过应用作用域接近性。

许多现有工具通过应用唯一的类或属性 给定作用域中的每个元素 或“单文件组件”来实现“作用域样式”。 在此示例中有两个作用域 (main-component 和 sub-component) 并且每个元素都通过使用 data-scope 属性标记为一个或两个作用域的一部分:
<section data-scope="main-component">
  <p data-scope="main-component">...<p>

  <!-- sub-component root is in both scopes -->
  <section data-scope="main-component sub-component">
    <!-- children are only in the inner scope -->
    <p data-scope="sub-component">...<p>
  </section>
</section>

然后这些自定义作用域属性会附加到 CSS 中的每个选择器上:

p[data-scope~='main-component'] { color: red; }
p[data-scope~='sub-component'] { color: blue; }

/* 两个部分都是外层作用域的一部分 */
section[data-scope~='main-component'] { background: snow; }

/* 内部部分也是内部作用域的一部分 */
section[data-scope~='sub-component'] { color: ghostwhite; }

使用 @scope 规则, 作者和工具可以仅通过将唯一的属性或类应用于 作用域根来复制类似的行为:

<section data-scope="main-component">
  <p>...<p>
  <section data-scope="sub-component">
    <p>...<p>
  </section>
</section>

然后类或属性可以用于同时建立上限和下限。 由下限选择器匹配的元素将被排除在结果作用域之外, 这样作者可以默认创建不重叠的作用域:

@scope ([data-scope='main-component']) to ([data-scope]) {
  p { color: red; }

  /* 仅外层部分是外层作用域的一部分 */
  section { background: snow; }
}

@scope ([data-scope='sub-component']) to ([data-scope]) {
  p { color: blue; }

  /* 内层部分仅是内部作用域的一部分 */
  section { color: ghostwhite; }
}

然而,作者可以使用子代组合器和通用选择器创建重叠的作用域边界, 使得内部作用域根成为两个作用域的一部分:

@scope ([data-scope='main-component']) to ([data-scope] > *) {
  p { color: red; }

  /* 两个部分都是外层作用域的一部分 */
  section { background: snow; }
}

2.5.2. @scope 的语法

@scope 规则的语法为:

@scope [(<scope-start>)]? [to (<scope-end>)]? {
  <rule-list>
}

其中:

伪元素不能作为作用域根或 作用域限制; 它们在 <scope-start> 和 <scope-end> 中都是无效的。

2.5.3. 作用域样式规则

作用域样式规则 与非作用域规则在以下方面有所不同:

默认情况下,作用域样式规则中的选择器是 相对选择器, 起始位置隐含了作用域根和后代组合器。 以下选择器将匹配相同的元素:
@scope (#my-component) {
  p { color: green; }
  :scope p { color: green; }
}

作者可以通过添加显式的组合器来调整隐含的关系:

@scope (#my-component) {
  > p { color: green; }
  :scope > p { color: green; }
}

作者还可以在选择器中通过包含 作用域根 来定位或显式地对其进行定位, 使用 :scope 或 &:

@scope (#my-component) {
  :scope { border: thin solid; }
  & { border: thin solid; }

  main :scope p { color: green; }
  main & p { color: green; }
}

虽然:scope 或 & 选择器 都可以引用作用域根, 但在此上下文中它们有不同的含义:

选择器匹配的差异

:scope 选择器将仅匹配 作用域根本身, 而& 选择器能够匹配任何由 <scope-start> 选择器列表 匹配的元素。

选择器特异性的差异

:scope 选择器的特异性 等同于其他伪类, 而& 选择器的特异性等于 <scope-start> 中 最特定的选择器。

2.5.4. 识别作用域根和限制

@scope 规则会根据以下方式生成一个或多个作用域:

找到 作用域根

对于每个由 <scope-start> 匹配的元素, 创建一个 作用域,并以该元素作为 其 作用域根。 如果没有指定 <scope-start>, 那么, 该 作用域根 是 父 元素,即 拥有者节点 的父元素,该节点对应的样式表中定义了 @scope 规则。 (如果不存在这样的元素, 且所在的 节点树 是一棵 影子 树, 那么 作用域根 就是 影子 宿主。 否则, 作用域根 就是 根,即 所在 节点树 的根。) 任何 :scope 或 & 选择器,只要位于 <scope-start> 中,就会 被解释为针对其外部上下文定义的选择器。

找到任何 作用域限制

对于由 作用域根创建的每个 作用域, 其作用域限制设置为 匹配 <scope-end> 且 在作用域内的所有元素, 解释 :scope 和 & 与 作用域样式规则 中完全相同。

作者可以通过省略 <scope-start> 选择器来为 style 元素建立局部作用域。 例如:
<div>
  <style>
    @scope {
      p { color: red; }
    }
  </style>
  <p>this is red</p>
</div>
<p>not red</p>

这相当于:

<div id="foo">
  <style>
    @scope (#foo) {
      p { color: red; }
    }
  </style>
  <p>this is red</p>
</div>
<p>not red</p>
作用域限制可以使用 :scope 伪类来要求与作用域根的特定关系:
/* .content 仅当它是 :scope 的直接子元素时才是限制 */
@scope (.media-object) to (:scope > .content) { ... }

作用域限制还可以通过使用 :scope 引用其作用域根外部的元素。 例如:

/* .content 仅当 :scope 位于 .sidebar 内时才是限制 */
@scope (.media-object) to (.sidebar :scope .content) { ... }

2.5.5. 作用域嵌套

@scope 规则可以嵌套。 在这种情况下,就像嵌套样式规则一样, 内部 @scope 的前导选择器(那些定义其 作用域) 由外部选择器限定。

注: 对于进一步嵌套的 作用域,其中的 限定作用域的样式规则 实际上 同时受到 外层和内层 @scope 规则的约束, 但 作用域根 则由 最内层的 @scope 定义。 由于 作用域邻近度 是 通过测量 限定作用域的样式规则 的 主体 与 作用域根 之间的距离来确定的, 因此,只有最内层的 @scope 才会影响 对 作用域邻近度 的确定,就 嵌套的 @scope 规则 而言。

作用域接近度计算是否应受嵌套作用域的影响? [Issue #10795]

当将 @scope 规则嵌套在其他 @scope 规则中, 或嵌套在其他选择器中时, <scope-start> 选择器相对 于 嵌套上下文, 而 <scope-end> 和任何 限定作用域的样式规则 都 相对于 作用域根。例 如,以下代码:
@scope (.parent-scope) {
  @scope (:scope > .child-scope) to (:scope .limit) {
    :scope .content {
      color: red;
    }
  }
}

等价于:

@scope (.parent-scope > .child-scope) to (.parent-scope > .child-scope .limit) {
  .parent-scope > .child-scope .content {
    color: red;
  }
}

全局名称定义的at 规则, 例如 @keyframes、@font-face 或 @layer,如果定义在 @scope 内是有效的, 但它们不会被封闭的 @scope 规则所作用或影响。 但是,由这些规则包含的任何 样式规则(例如在 @layer 中) 都是作用域样式规则。

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

CSS Cascading 5 § 6.4 级联层

3. CSSOM

3.1. CSSScopeRule 接口

CSSScopeRule 接口表示 @scope 规则:

[Exposed=Window]
interface CSSScopeRule : CSSGroupingRule {
  readonly attribute CSSOMString? start;
  readonly attribute CSSOMString? end;
};
start 类型为 CSSOMString
start 属性返回序列化规则的 <scope-start> 的结果 (不包括外围括号), 如果没有 <scope-start>,则为 null。
end 类型为 CSSOMString
end 属性返回序列化规则的 <scope-end> 的结果 (不包括外围括号), 如果没有 <scope-end>,则为 null。

4. 更改

本附录是信息性的。

4.1. 自 2023 年 3 月 21 日工作草案以来的更改

自2023 年 3 月 21 日工作草案以来的重大更改包括:

4.2. 自 2021 年 12 月 21 日首次公开工作草案以来的更改

自2021 年 12 月 21 日首次公开工作草案以来的重大更改包括:

4.3. 自第 5 级以来的新增内容

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

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

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

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

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

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

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

致谢

David Baron, Tantek Çelik, Keith Grant, Giuseppe Gurgone, Theresa O’Connor, Florian Rivoal, Noam Rosenthal, Simon Sapin, Jen Simmons, Nicole Sullivan, Lea Verou, 和 Boris Zbarsky 对本规范作出了贡献。

5. 隐私注意事项

6. 安全注意事项

一致性

文档约定

一致性要求通过描述性声明和 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"> 与其他规范性文本分开,例如:用户代理必须提供一个可访问的替代方案。

一致性类别

本规范的符合性定义了三种符合性类别:

样式表
一个 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 邮件列表。

索引

本规范定义的术语

引用定义的术语

参考文献

规范性引用

[CSS-ANIMATIONS-1]
David Baron 等. CSS 动画 第 1 级. 2023 年 3 月 2 日. WD. URL: https://www.w3.org/TR/css-animations-1/
[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr. CSS 层叠和继承 第 4 级. 2022 年 1 月 13 日. CR. URL: https://www.w3.org/TR/css-cascade-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr. CSS 层叠和继承 第 5 级. 2022 年 1 月 13 日. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CONDITIONAL-5]
Chris Lilley; David Baron; Elika Etemad. CSS 条件规则模块 第 5 级. 2024 年 7 月 23 日. WD. URL: https://www.w3.org/TR/css-conditional-5/
[CSS-FONTS-5]
Chris Lilley. CSS 字体模块 第 5 级. 2024 年 2 月 6 日. WD. URL: https://www.w3.org/TR/css-fonts-5/
[CSS-NESTING-1]
Tab Atkins Jr.; Adam Argyle. CSS 嵌套模块. 2023 年 2 月 14 日. WD. URL: https://www.w3.org/TR/css-nesting-1/
[CSS-SCOPING-1]
Tab Atkins Jr.; Elika Etemad. CSS 作用域模块 第 1 级. 2014 年 4 月 3 日. WD. URL: https://www.w3.org/TR/css-scoping-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS 语法模块 第 3 级. 2021 年 12 月 24 日. CR. URL: https://www.w3.org/TR/css-syntax-3/
[CSS-TRANSITIONS-1]
David Baron 等. CSS 过渡. 2018 年 10 月 11 日. WD. URL: https://www.w3.org/TR/css-transitions-1/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 值和单位模块 第 3 级. 2024 年 3 月 22 日. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS21]
Bert Bos 等. 层叠样式表 第 2 级 修订版 (CSS 2.1) 规范. 2011 年 6 月 7 日. REC. URL: https://www.w3.org/TR/CSS21/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS 对象模型 (CSSOM). 2021 年 8 月 26 日. WD. URL: https://www.w3.org/TR/cssom-1/
[CSSSTYLEATTR]
Tantek Çelik; Elika Etemad. CSS 样式属性. 2013 年 11 月 7 日. REC. URL: https://www.w3.org/TR/css-style-attr/
[DOM]
Anne van Kesteren. DOM 标准. 现行标准. URL: https://dom.spec.whatwg.org/
[FETCH]
Anne van Kesteren. Fetch 标准. 现行标准. URL: https://fetch.spec.whatwg.org/
[RFC2119]
S. Bradner. 在 RFC 中表示需求级别的关键字. 1997 年 3 月. 最佳现行实践. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECT]
Tantek Çelik 等. 选择器 第 3 级. 2018 年 11 月 6 日. REC. URL: https://www.w3.org/TR/selectors-3/
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr. 选择器 第 4 级. 2022 年 11 月 11 日. WD. URL: https://www.w3.org/TR/selectors-4/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 标准. 现行标准. URL: https://webidl.spec.whatwg.org/

参考性引用

[HTML]
Anne van Kesteren 等. HTML 标准. 现行标准. URL: https://html.spec.whatwg.org/multipage/

IDL 索引

[Exposed=Window]
interface CSSScopeRule : CSSGroupingRule {
  readonly attribute CSSOMString? start;
  readonly attribute CSSOMString? end;
};

问题索引

这是基于 CSS 层叠和继承 第 5 级 的差异规范。 它目前是一个探索性工作草案: 如果您正在实现任何内容,请使用第 5 级作为参考。 我们将在此草案达到 CR 时将第 5 级的内容合并进来。↵
CSS 层叠 5 § 6.2 层叠来源 ↵
CSS 层叠 5 § 6.3 重要声明:!important 注释 ↵
CSS 层叠 5 § 6.4 层叠层 ↵
CSS 层叠 5 § 6.4.3 层次顺序 ↵
应在 范围选择器 的定义中添加作用域限制吗?↵
作用域接近度的计算是否应该受到嵌套作用域的影响?[问题 #10795] ↵
CSS 层叠 5 § 6.4 层叠层 ↵