CSS 显示模块第 3 级

W3C 候选推荐标准快照,

关于此文档的更多细节
此版本
https://w3org.cn/TR/2023/CR-css-display-3-20230330/
最新发布版本
https://w3org.cn/TR/css-display-3/
编辑草案
https://drafts.csswg.org/css-display/
历史
https://w3org.cn/standards/history/css-display-3
实现报告
https://wpt.fyi/results/css/css-display?label=master&label=experimental&aligned
测试套件
http://test.csswg.org/suites/css-display-3_dev/nightly-unstable/
https://wpt.fyi/results/css/css-flexbox/
反馈
CSS 工作组问题仓库
编辑
Tab Atkins Jr. (Google)
Elika J. Etemad / fantasai (特邀专家)
建议编辑此规范
GitHub 编辑器

摘要

本模块描述了如何从文档元素树生成 CSS 格式化框树,并定义了用于控制该过程的 display 属性。

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

关于本文档

本部分描述了本文档在发布时的状态。当前 W3C 出版物列表及本技术报告的最新版本可在 W3C 技术报告索引(https://w3org.cn/TR/)中找到。

本文档由 CSS 工作组推荐标准轨道发布,作为候选推荐标准快照。发布为候选推荐标准并不意味着 W3C 及其成员的认可。候选推荐标准快照已经过广泛审阅,旨在收集实施经验,且工作组成员已承诺为实施提供免版税许可。本文档旨在成为 W3C 推荐标准;它将保持候选推荐标准状态至少至 ,以收集更多反馈。

请通过在 GitHub 上提交 issue(首选方式)发送反馈,并在标题中包含规范代码“css-display”,例如:“[css-display] …评论摘要…”。所有议题和评论均已存档。或者,也可以将反馈发送至(已存档的)公共邮件列表 www-style@w3.org

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

本文档由在 W3C 专利政策下运作的组织制作。W3C 维护一份与该组织交付成果相关的 公开专利披露列表;该页面还包含披露专利的说明。任何知悉其认为包含 必要权利要求 的专利的个人,必须按照 W3C 专利政策第 6 节披露该信息。

提供了一份初步实施报告。在候选推荐标准期间将增加更多测试。

以下功能存在风险,可能会在 CR 期间被删除:

“风险(At-risk)”是 W3C 流程中的术语,并不一定意味着该特性面临被删除或推迟的危险。这表示工作组认为该特性可能难以及时实现互操作,将其标记为此类允许工作组在转向“建议推荐标准(Proposed Rec)”阶段时,在必要的情况下删除该特性,而无需先发布一个不包含该特性的新“候选推荐标准(Candidate Rec)”。

1. 简介

本节是规范性的。

CSS 接收一个组织为 元素树 的源文档(其中包含 元素文本节点 的混合),以及 文本节点(包含文本),并将其渲染到诸如屏幕、纸张或音频流等画布上。尽管任何此类源文档都可以使用 CSS 渲染,但最常用的类型是 DOM。[DOM](其中一些更复杂的树类型可能具有额外的节点类型,例如 DOM 中的注释节点。就 CSS 而言,所有这些额外的节点类型都会被忽略,如同它们不存在一样。)

为此,它会生成一个中间结构,即 框树 (box tree),它代表了渲染文档的格式化结构。框树中的每个 框 (box) 代表其对应的元素(或伪元素)在画布上的空间和/或时间,而框树中的每个 文本序列 同样代表其对应文本节点的内容。

为了创建框树,CSS 首先使用层叠与继承,为源树中的每个元素文本节点分配一个 CSS 属性的计算值。(参见 [CSS-CASCADE-3]。)

然后,对于每个元素,CSS 根据该元素的 display 属性生成零个或多个。通常,一个元素会生成一个主体框,它代表元素本身,并包含其在框树中的内容。然而,某些 display 值(例如 display: list-item)会生成多个框(例如一个主体块框和一个子标记框)。有些值(如 nonecontents)会导致元素和/或其后代根本不生成任何通常通过其 display 类型来称呼——例如,由具有 display: block 的元素生成的被称为“块框”或仅称为“块”。

除非另有说明,被分配与其生成元素相同的样式。通常,继承属性分配给主体框,然后通过框树继承给由同一元素生成的任何其他框。非继承属性默认应用于主体框,但当元素生成多个框时,有时定义为应用于不同的框:例如,应用于 table 元素的边框 (border) 属性应用于其表格网格框,而不是其主体表格包装框。如果值计算过程更改了这些框的样式,并且请求了元素的样式(例如通过 getComputedStyle()),元素会针对每个属性反映其应用到的框的值。

同样,每个连续的同级文本节点序列会生成一个包含其文本内容的文本序列,该序列被分配与生成文本节点相同的样式。但是,如果序列不包含文本,则不会生成文本序列

在构建框树时,由元素生成的框是任何祖先元素主体框的后代。一般情况下,元素主体框的直接父框是其最近生成的祖先元素的主体框;但也有一些例外,例如 run-in 框、生成多个容器框的显示类型(如表格)以及介入的匿名框

匿名框 (anonymous box) 是不与任何元素关联的框。匿名框在特定情况下生成,用于在框树需要特定嵌套结构而元素树生成的框未能提供时修正框树。例如,表格单元格框需要特定类型的父框(表格行框),如果其父级不是表格行框,它将围绕自身生成一个匿名表格行框。(参见 [CSS2] § 17.2.1。)与元素生成的框(其样式严格通过元素树继承)不同,匿名框(仅存在于框树中)通过其框树父级关系进行继承

在布局过程中,文本序列可以分解为多个片段。例如,当行内框和/或文本序列在行之间断开,或者当块框在页面或列之间断开时,就会发生这种情况,这个过程称为碎片化 (fragmentation)。它也可能因为文本的双向重排(参见 CSS 书写模式中的应用双向重排算法)或更高级的显示类型框拆分(例如行内块拆分,参见 CSS2§9.2,或跨列块拆分,参见 CSS 多栏布局)而发生。因此,一个由一个或多个框片段组成,一个文本序列由一个或多个文本片段组成。有关碎片化的更多信息,请参见 [CSS-BREAK-3]。

注意:许多 CSS 规范在这些术语完善之前就已经编写,或者引用时存在错误,因此在阅读使用这些术语的旧规范时需保持谨慎。通常可以根据上下文推断出它们真正指代的术语。发现规范中的错误时请报告错误,以便进行更正。

注意:关于“听觉”框树及其与 display 属性的交互的更多信息,可以在 CSS 语音模块中找到。[CSS-SPEECH-1]

1.1. 模块交互

本模块替换并扩展了 [CSS2] 第 9.2.4 节中定义的 display 属性定义。

本模块中的属性均不适用于 ::first-line::first-letter 伪元素。

1.2. 值定义

本规范遵循 [CSS2] 中的 CSS 属性定义约定,并使用 [CSS-VALUES-3] 中的 值定义语法。本规范中未定义的值类型在 CSS Values & Units [CSS-VALUES-3] 中定义。与其他 CSS 模块的组合可能会扩展这些值类型的定义。

除了定义中列出的属性特定值外,本规范中定义的所有属性也都接受 CSS 全局关键字 作为其属性值。为了可读性,未明确重复列出。

2. 框布局模式:display 属性

名称display
[ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy>
初始值 inline
应用于 所有元素
可继承
百分比 不可用
计算值 表示内部外部显示类型的一对关键字,加上可选的 list-item 标志,或者是 <display-internal><display-box> 关键字;有关计算规则,请参见各种规范中的正文
规范顺序 按语法
动画类型 不可动画

用户代理应在所有媒体(包括非视觉媒体)上支持此属性。display 属性定义了元素的显示类型 (display type),它由元素如何生成框的两个基本特质组成:

文本序列没有显示类型

某些 display 值具有额外的副作用:例如 list-item,它还会生成一个 ::marker 伪元素,以及 none,它导致元素的整个子树从框树中被遗漏。

display 属性对元素的语义没有任何影响:语义由文档语言定义,不受 CSS 影响。除了 none 值(该值也会影响元素及其后代的听觉/语音输出 [CSS-SPEECH-1] 和交互性)外,display 属性仅影响视觉布局:其目的是让设计师能够自由更改元素的布局行为,而不影响底层文档语义。

值定义如下

<display-outside>  = block | inline | run-in
<display-inside>   = flow | flow-root | table | flex | grid | ruby
<display-listitem> = <display-outside>? && [ flow | flow-root ]? && list-item
<display-internal> = table-row-group | table-header-group |
                     table-footer-group | table-row | table-cell |
                     table-column-group | table-column | table-caption |
                     ruby-base | ruby-text | ruby-base-container |
                     ruby-text-container
<display-box>      = contents | none
<display-legacy>   = inline-block | inline-table | inline-flex | inline-grid

下方的非规范性表格总结了 display 的值:

简写 display全称 display生成的框
none(无) 子树从框树中省略
内容 元素在框树中被内容替换
block block flow 块级 (block-level) 块容器 (block container),又称 块框 (block box)
flow-root block flow-root 块级 块容器,建立一个新的块格式化上下文 (BFC)
inline inline flow 行内盒 (inline box)
inline-block inline flow-root 行内级 (inline-level) 块容器,又称 行内块 (inline block)
run-in run-in flow Run-in 框(具有特殊框树合并规则的行内框
list-item block flow list-item 带有额外标记框 (marker box)块框
inline list-item inline flow list-item 带有额外标记框行内框
flex block flex 块级 弹性容器 (flex container)
inline-flex inline flex 行内级 弹性容器
grid block grid 块级 网格容器 (grid container)
inline-grid inline grid 行内级 网格容器
ruby inline ruby 行内级 Ruby 容器
block ruby block ruby 包含 Ruby 容器块框
table block table 块级 表格包装框,包含表格网格框
inline-table inline table 行内级 表格包装框,包含表格网格框
<display-internal> 类型布局特定的内部框

注意:遵循“最向后兼容,其次是最短”的优先规则,等效 display 值的序列化使用“简写 display”列。[CSSOM]

2.1. 流式布局的外部显示角色:blockinlinerun-in 关键字

<display-outside> 关键字指定元素的外部显示类型,这本质上是其主体框流式布局中的角色。它们定义如下:

block
元素生成的框在放置于流式布局中时是块级框 (block-level box)。[CSS2]
inline
元素生成的框在放置于流式布局中时是行内级框 (inline-level box)。[CSS2]
run-in
元素生成一个 run-in 框,这是一种具有特殊行为的行内级框,它会尝试合并到后续的块容器中。详情请参见 § 5 Run-In 布局

注意:外部显示类型确实会影响替换元素

如果指定了 <display-outside> 值但省略了 <display-inside>,则元素的内部显示类型默认为 flow

2.2. 内部显示布局模型:flowflow-roottableflexgridruby 关键字

<display-inside> 关键字指定元素的内部显示类型,它定义了布局其内容的格式化上下文类型(假设它是非替换元素)。它们定义如下:

flow
元素使用流式布局 (flow layout)块和行内布局)布局其内容。

如果其外部显示类型inlinerun-in,并且它正在参与行内格式化上下文,则它生成一个行内框

否则它生成一个块容器框。

根据其他属性的值(例如 positionfloatoverflow)以及它本身是否参与块或行内格式化上下文,它要么为其内容建立一个新的块格式化上下文,要么将其内容集成到其父级格式化上下文中。参见 CSS2.1 第 9 章。[CSS2] 建立新块格式化上下文块容器被视为具有 flow-root 的所用内部显示类型

flow-root
元素生成一个块容器框,并使用流式布局布局其内容。它始终为其内容建立一个新的块格式化上下文。[CSS2]
table
元素生成一个主体表格包装框,它建立一个块格式化上下文,并包含一个额外生成的表格网格框,该框建立一个表格格式化上下文。[CSS2]
flex
元素生成一个主体弹性容器框,并建立一个弹性格式化上下文。[CSS-FLEXBOX-1]
grid
元素生成一个主体网格容器框,并建立一个网格格式化上下文。[CSS-GRID-1]

(使用 subgrid 的网格可能不会生成新的网格格式化上下文;详情请参见 [CSS-GRID-2]。)

ruby
元素生成一个Ruby 容器框,并在将其基级内容集成到父级格式化上下文(如果它是行内元素)或生成一个适当外部显示类型的包装框(如果不是)之外,建立一个Ruby 格式化上下文。[CSS-RUBY-1]

如果指定了 <display-inside> 值但省略了 <display-outside>,则元素的外部显示类型默认为 block——除了 ruby,它默认为 inline

2.3. 生成标记框:list-item 关键字

list-item 关键字使元素生成一个内容由其 list-style 属性(CSS 2.1§12.5 列表)指定的 ::marker 伪元素 [CSS-PSEUDO-4],以及一个用于其自身内容的指定类型的主体框。[CSS2]

如果未指定内部显示类型值,则主体框的内部显示类型默认为 flow。如果未指定外部显示类型值,则主体框的外部显示类型默认为 block

注意:在本级别中,正如语法所限制的那样,列表项仅限于流式布局显示类型(block/inline/run-in 配合 flow/flow-root 内部类型)。此限制在未来的模块版本中可能会放宽。

2.4. 布局内部显示类型:table-*ruby-* 关键字

一些布局模型,如 tableruby,具有复杂的内部结构,其子元素和后代可以扮演多种不同的角色。本节定义了这些“布局内部 (layout-internal)”的 display 值,它们仅在特定的布局模式内才有意义。

除非另有说明,使用这些 display 值的元素的内部显示类型外部显示类型均设置为给定的关键字。

替换元素display 属性计算为 布局内部 值之一时,它会被视为具有 inline 的所用值。空白折叠和匿名框生成必须基于该 inline 值围绕这些替换元素进行,就好像从未对其应用布局内部显示值一样。

作者不应将布局内部显示值分配给替换元素

<display-internal> 关键字定义如下:

table-row-grouptable-header-grouptable-footer-grouptable-rowtable-celltable-column-grouptable-column
该元素是一个内部表格元素。它生成相应的内部表格框,参与表格格式化上下文。参见 CSS2§17.2 [CSS2]。

table-cell 框具有 flow-root内部显示类型

table-caption
该元素生成一个表格标题框,它是一个相对于表格和表格包装框具有特殊行为的块框。参见 CSS2§17.2 [CSS2]。

table-caption 框具有 flow-root内部显示类型

ruby-baseruby-textruby-base-containerruby-text-container
该元素是一个内部 Ruby 元素。它生成相应的内部 Ruby 框,参与Ruby 格式化上下文。[CSS-RUBY-1]

ruby-baseruby-text 具有 flow内部显示类型

具有布局特定显示类型的框,在置于不兼容的父级中时,会根据其各自的规范在其周围生成匿名包装框。

例如,表格布局要求 table-cell 框必须具有 table-row 父框。

如果父级错误,如下所示:

<div style="display:block;">
  <div style="display:table-cell">...</div>
</div>

它将在自身周围生成包装框,产生如下结构:

block box
└anonymous table box
 └anonymous table-row-group box
  └anonymous table-row box
   └table-cell box

即使父级是另一个内部表格元素,如果它不是正确的那个,也会生成包装框。例如,在以下标记中:

<div style="display:table;">
  <div style="display:table-row">
    <div style="display:table-cell">...</div>
  </div>
</div>

匿名包装框生成将产生:

table box
└anonymous table-row-group box
 └table-row box
  └table-cell box

这种“修正”确保了表格布局具有可预测的运行结构。

2.5. 框生成:nonecontents 关键字

虽然 display 可以控制元素将生成框的类型,但它也可以控制元素是否生成任何框。

<display-box> 关键字定义如下:

内容
元素本身不生成任何框,但其子元素和伪元素仍会正常生成文本序列。就框的生成和布局而言,该元素必须被视为在元素树中被其内容所替换(包括其源文档子元素及其伪元素,例如 ::before::after,它们像往常一样在元素的子元素之前/之后生成)。

注意:由于仅影响框树,因此基于文档树的任何语义(如选择器匹配、事件处理和属性继承)均不受影响。但截至编写本文时,主流浏览器中并未正确实现这一点,因此在 Web 上使用此功能必须小心,因为它可能会阻止可访问性工具访问元素的语义。

此值在替换元素和其他渲染不由 CSS 完全控制的元素上计算为 display: none;详情请参见 附录 B:display: contents 对特殊元素的影响

注意:替换元素和表单控件受到特殊对待,因为只移除元素自身的生成框是一个定义模糊的操作。由于如果用例(和更精确的渲染模型)发展,此行为可能会细化,因此为了前向兼容性,作者应在这些元素上使用 display: none 而不是 display: contents

none(无)
元素及其后代不生成任何文本序列

同样,如果文本节点被定义为表现为 display: none,它不会生成任何文本序列

具有这两个值之一的元素没有内部外部显示类型,因为它们根本不生成任何框。

注意:由于这些值导致受影响的元素不生成框,匿名框生成规则将完全忽略被省略的元素,就好像它们在框树中不存在一样。

然而,基于标记的关系不受这些值的影响,因为它们纯粹是渲染时的效果。 例如,虽然它们可能会影响哪个表格单元格显示在某一列中,但它们不会影响哪个表格单元格与特定的列元素相关联。同样,它们不能影响哪个 HTML summary 元素与特定表格相关联,也不能影响 legend 是否被视为特定 fieldset 内容的标签。

2.6. 预组合的行内级显示值

CSS 2 级为 display 使用单关键字语法,要求为同一布局模式的块级和行内级变体分别提供关键字。这些 <display-legacy> 关键字映射如下:

inline-block
计算为 inline flow-root
inline-table
计算为 inline table
inline-flex
计算为 inline flex
inline-grid
计算为 inline grid

注意:尽管这些关键字及其等效项计算为相同的值,但它们的指定值仍然是不同的。

注意:getComputedStyle() 序列化规则将始终输出这些预组合关键字,而不是等效的双关键字对,这是由于最短、最向后兼容的序列化原则

2.7. 自动框类型转换

一些布局效果需要框类型的块化 (blockification)行内化 (inlinification),这会将框的计算外部显示类型分别设置为 blockinline。(这对根本不生成框的显示类型没有影响,例如 nonecontents。)此外:

注意:当框与其上下文不匹配时,有两种方法可用于修正框类型。一种是转换 display计算值,例如此处描述的块化行内化。另一种是在框树构建期间(确定计算值后)发生的,即创建中间匿名框,这发生在表格Ruby流式布局中。

计算值修正的一些示例包括:

2.8. 根元素的主体框

根元素的显示类型始终被块化,且其主体框始终建立一个独立格式化上下文。此框的包含块初始包含块

此外,displaycontents 时,在根元素上计算为 block

3. 显示顺序:order 属性

名称order
<integer>(整数)
初始值 0
应用于 弹性项目 (flex items)网格项目 (grid items)
可继承
百分比 不可用
计算值 指定的整数
规范顺序 按语法
动画类型 按计算值类型

框通常按照它们在源文档中出现的顺序显示和布局。在某些格式化上下文中,可以使用 order 属性重新排列框的顺序,以刻意制造元素逻辑顺序与它们在 2D 视觉画布上空间排列的差异。(参见 § 3.1 重排与可访问性。)

具体而言,order 属性通过将弹性项目网格项目分配到序数组中,来控制它们在其容器中出现的顺序。它接受单个 <integer> 值,指定项目所属的序数组。

这是一个目录项目卡片的示例,它包含标题、照片和描述。在每个条目中,源文档内容在逻辑上按标题、描述、照片的顺序排列。这为语音渲染和非 CSS 浏览器提供了合理的排序。然而,为了获得更具吸引力的视觉呈现,使用 order 将图像从内容靠后的位置提取到卡片顶部。
article.sale-item {
  display: flex;
  flex-flow: column;
}
article.sale-item > img {
  order: -1; /* Shift image before other content (in layout order) */
  align-self: center;
}
<article class="sale-item">
  <h1>Computer Starter Kit</h1>
  <p>This is the best computer money can buy, if you don’t have much money.
  <ul>
    <li>Computer
    <li>Monitor
    <li>Keyboard
    <li>Mouse
  </ul>
  <img src="images/computer.jpg"
    alt="You get: a white desktop computer with matching peripherals.">
</article>
You get: a white desktop computer with matching keyboard and monitor.

电脑入门套件

这是如果您预算不多,能买到的最好的电脑。

  • 电脑
  • 显示器
  • 键盘
  • 鼠标
上述代码的渲染示例。

弹性网格容器顺序修改后的文档顺序 (order-modified document order)布局其内容,从编号最小的序数组开始递增。属于同一序数组的项目按照它们在源文档中出现的顺序布局。这也会影响绘制顺序 [CSS2],就像弹性/网格项目在源文档中被重新排序一样。绝对定位的弹性/网格容器子元素在确定它们相对于弹性/网格项目的绘制顺序时,被视为具有 order: 0

除非未来的规范另有说明,此属性对非弹性项目网格项目的框没有影响。

3.1. 重排与可访问性

order 属性不会影响非视觉媒体(如语音)中的排序。同样,order 不会影响顺序导航模式(如循环切换链接)的默认遍历顺序,请参见例如 tabindex [HTML]。

作者必须仅将 order 用于内容的视觉重排,而不是逻辑重排。使用 order 执行逻辑重排的样式表是不符合规范的。

注意:这是为了让非视觉媒体和非 CSS 用户代理(通常呈线性内容)能够依赖逻辑源顺序,同时使用 order 来定制布局顺序。(由于视觉感知是二维且非线性的,所需的布局顺序并不总是逻辑上的顺序。)

为了在所有呈现模式下保留作者预期的顺序,创作工具——包括 WYSIWYG 编辑器以及基于 Web 的创作辅助工具——必须重新排列底层的文档源,并且不得使用 order 执行重排,除非作者明确指出了空间顺序应该与底层文档顺序(决定语音和导航顺序)不同步

例如,工具可能会提供弹性项目的拖放式重排,以及针对不同屏幕尺寸范围处理媒体查询的布局替代方案。

由于大多数情况下,重排应影响所有屏幕范围以及导航和语音顺序,工具通常会在 DOM 层执行拖放重排。然而,在某些情况下,作者可能希望针对不同屏幕尺寸设置不同的布局。工具可以通过结合使用 order 和媒体查询来实现此功能,但也应将最小屏幕尺寸的排序与底层 DOM 顺序挂钩(因为这很可能是逻辑线性呈现顺序),同时使用 order 定义其他尺寸范围内的视觉呈现顺序。

该工具将是符合规范的,而仅使用 order 处理拖放重排(无论实现起来多么方便)的工具则是不符合规范的。

注意:包括浏览器、辅助技术和扩展在内的用户代理可能会提供空间导航功能。本节并不排除在确定此类空间导航模式下的元素顺序时尊重 order 属性;事实上,要使此类功能工作,确实需要考虑这一点。但 order 并不是实现此类空间导航功能时唯一(甚至不是主要)需要考虑的 CSS 属性。一个实现完善的空间导航功能需要考虑 CSS 中所有修改空间关系的布局特性。

4. 不可见性:visibility 属性

名称visibility
visible | hidden | collapse
初始值 visible
应用于 所有元素
可继承
百分比 不适用
计算值 按指定值
规范顺序 按语法
动画类型 离散 (discrete)
媒体视觉

visibility 属性指定盒子是否被渲染。不可见 (Invisible) 盒子仍会影响布局。(将 display 属性设置为 none 可完全抑制盒子的生成)。各属性值含义如下:

visible
生成的盒子正常可见。
该组件可以在本包或其他任何使用包的其他组件中被引用;它不能在使用包中被不同的组件覆盖。
元素生成的任何盒子均为 不可见。但是,如果元素的后代具有 visibility: visible,则该后代可以可见。
collapse
表示盒子是 折叠的 (collapsed),这可能导致它以特定于格式化上下文的方式占用比平时更少的空间。参见 表格中的动态行列效果 [CSS2] 以及 Flex 布局中的 折叠弹性项目 [CSS-FLEXBOX-1]。但在所有其他情况下(即除非另有规定),这只会使盒子变得 不可见,就像 hidden 一样。

注意: 目前,许多用户代理和/或辅助功能工具未能正确实现与 不可见 元素具有语义关联的可见元素所带来的辅助功能影响。因此,例如,将具有特殊角色(如表格行)的父元素设为 不可见,同时保留具有特殊角色(如表格单元格)的子元素为可见,可能会给这些工具的用户带来问题。在工具支持改善之前,作者应避免创建此类情况。

不可见 (Invisible) 盒子不会被渲染(就像它们完全透明一样),无法与之交互(其行为如同拥有 pointer-events: none),会被从导航中移除(类似于 display: none),并且不会被语音渲染(除非 speak 属性为 always [CSS-SPEECH-1])。然而,与 display: contents 一样,它们作为容器的语义角色不会受到影响,以确保任何 可见 的后代都能得到正确解读。

注意: 如果 speak 属性为 always,则原本 不可见 的盒子被渲染为语音,并且可以通过非视觉/空间方法与之交互。

虽然使用 display: none 暂时隐藏内容通常已足够,但这样做会将元素完全从布局中移除,当元素被隐藏或显示时,可能会导致页面出现不必要的移动或重排。visibility: hidden 则可以用来在隐藏或显示某物时保持页面布局稳定。

例如,以下是一个“剧透”元素的(故意简化的)可能实现方式,点击隐藏文本即可显示。

<p>The symbolism earlier in the movie becomes obvious at the end,
  when it’s revealed that <spoiler-text><span>Luke is his own father</span></spoiler-text>,
  making the wizard’s cryptic riddles meaningful.
<style>
spoiler-text { border-bottom: 1px solid; }
spoiler-text > span { visibility: hidden; }
spoiler-text.shown > span { visibility: visible; }
</style>
<script>
[...document.querySelectorAll("spoiler-text")].forEach(el=>{
  el.addEventListener("click", e=>el.classList.toggle("shown"));
});
</script>

此示例故意进行了大幅简化。它缺少了设计良好的剧透元素应具备的许多辅助功能和用户体验特性,以更清楚地展示 visibility 的用法。请勿在真实网站中直接复制此代码。

5. Run-In 布局

Run-in 盒子 是一种合并到其后续块中的盒子,它将自身插入到该块行内级内容的开头。这对于格式化紧凑的标题、定义和其他类似内容非常有用,因为虽然在 DOM 结构上标题位于正文之前,但期望的显示效果却是作为行内标题与文本并排布局。

例如,字典定义通常格式化为词条与定义处于同一行。
<dl class='dict'>
  <dt>dictionary
  <dd>a book that lists the words of a language in alphabetical
      order and gives their meaning, or that gives the equivalent
      words in a different language.
  <dt>glossary
  <dd>an alphabetical list of terms or words found in or relating
      to a specific subject, text, or dialect, with explanations; a
      brief dictionary.
</dl>
<style>
.dict > dt {
  display: run-in;
}
.dict > dt::after {
  content: ": "
}
</style>

其格式化结果为

dictionary: a book that lists the words of a language
in alphabetical order and explains their meaning.

glossary: an alphabetical list of terms or words found
in or relating to a specific subject, text, or dialect,
with explanations; a brief dictionary.

Run-in 盒子的行为与其他任何 行内级盒子完全相同,但以下情况除外:

Run-in 序列 是连续兄弟 Run-in 盒子以及中间出现的 空白 和/或 流外盒子 (out-of-flow boxes) 的最大序列。

注意: 此陈述暗示流外盒子如果在两个 Run-in 盒子之间,会被重新父级化。另一种选择是保留中间的流外盒子,或者让流外盒子阻碍早期盒子的 Run-in。鼓励实现者和作者如果对此有倾向性的行为,请联系 CSSWG,因为当前这种行为是随机选择的。

此修正发生在 CSS2§9.2 中描述的匿名块和行内盒子修正之前,并影响受影响元素 第一格式化行 的确定,就好像 Run-in 序列最初就在盒子树中的最终位置一样。

注意: 由于最早的 Run-in 代表了其包含块 第一格式化行 上的首个文本,因此应用于该块元素的 ::first-letter 伪元素会选中 Run-in 的首字母,而不是其自身内容的首字母。

注意: 该 Run-in 模型与 [CSS2] 早期版本中提出的模型略有不同。

附录 A:术语表

以下术语在此定义以便查阅:

根元素
文档树 根部的 元素。在 DOM 下生成的 文档树 中,这是 文档元素;在 HTML 中它是 html 元素。[DOM] [HTML]
主体盒
当一个 元素 生成一个或多个 盒子 时,其中一个是 主体盒子 (principal box),它包含其后代盒子和生成的内容,也是涉及任何定位方案的盒子。

某些元素除主体盒子外可能还会生成额外的盒子(例如 list-item 元素会生成额外的标记盒子,或 table 元素会生成一个 主体 表格包装盒子 和一个额外的 表格网格盒子)。这些额外的盒子相对于主体盒子放置。

行内级
参与行内布局的内容。具体来说,即行内级盒子和 文本序列
块级
参与 块布局 的内容。具体来说,即块级盒子。
行内盒 (inline box)
一个非替换的 行内级 盒子,其 内部显示类型flow。行内盒子的内容参与与行内盒子本身相同的行内格式化上下文。
inline
在无歧义时用作 行内盒子行内级盒子 的简写,或作为形容词意为 行内级。后一种用法已弃用。
原子行内 (atomic inline)
一种行内级盒子,它是被替换的(如图像)或建立了新的格式化上下文(如 inline-blockinline-table),并且不能跨行拆分(如 行内盒子ruby 容器 可以跨行拆分)。

任何其 内部显示类型 不为 flow 的行内级盒子,都会建立一个新的指定 内部显示类型 的格式化上下文。

块状容器
块容器要么仅包含参与 行内格式化上下文 的行内级盒子,要么仅包含参与 块格式化上下文 的块级盒子(必要时生成匿名块盒子以确保此约束,定义见 CSS2§9.2.1.1)。

仅包含行内级内容的块容器会建立一个新的 行内格式化上下文。该元素随后还会生成一个 根行内盒子 (root inline box),用于包裹其所有行内内容。注意,此 根行内盒子 概念有效地取代了 CSS2§9.2.2.1 中引入的“匿名行内元素”概念。

如果块容器的父格式化上下文不是 块格式化上下文,则它建立一个新的 块格式化上下文;否则,当自身参与 块格式化上下文 时,它要么为内容建立新的 块格式化上下文,要么沿用其参与的上下文,具体取决于其他属性(如 overflowalign-content)的约束。

注意: 块容器盒子可以同时建立块格式化上下文行内格式化上下文。

块盒 (block box)
同时也是 块容器块级盒子

注意: 并非所有 块容器 盒子都是 块级 盒子:例如,非替换的 行内块 (inline blocks) 和非替换的表格单元格是块容器,但不是块级盒子。同样,并非所有块级盒子都是块容器:例如,块级替换元素(display: block)和 Flex 容器(display: flex)就不是块容器。

block
在无歧义时,用作 块盒子块级盒子块容器盒子 的简写。
被替换元素
内容超出 CSS 格式化模型范围的元素,例如图像或嵌入文档。 例如,HTML img 元素的内容通常被其 src 属性所指向的图像所取代。

替换元素通常具有 固有尺寸 (natural dimensions)。例如,位图图像具有以绝对单位指定的固有宽度和高度(从中显然可以确定固有比例)。另一方面,其他对象可能没有任何固有尺寸(例如,一个空白的 HTML 文档)。参见 [css-images-3]

如果用户代理认为 替换元素 的尺寸可能向第三方泄露敏感信息,则可以认为它没有任何 固有尺寸。例如,如果 HTML 文档的固有尺寸根据用户的银行余额而改变,那么 UA 可能希望表现得好像该资源没有 固有尺寸 一样。

替换元素的内容不被视为 CSS 格式化模型的一部分;然而,它们的 固有尺寸 用于各种布局计算。替换元素总是建立一个 独立的格式化上下文

非替换 (non-replaced) 元素是指未被 替换 的元素,即其渲染由 CSS 模型决定。

包含块 (containing block)
构成与其关联的 盒子 的尺寸和定位基础的矩形。值得注意的是,包含块 (containing block) 不是一个 盒子(它是一个矩形),但它通常源自 盒子 的尺寸。每个 盒子 都会相对于其 包含块 获得一个位置,但它并不受该 包含块 的限制;它可以 溢出。“盒子的包含块”一词指“盒子所处的包含块”,而不是它生成的包含块。

通常,盒子边缘 作为后代盒子的 包含块;我们称一个盒子为其后代“建立”了 包含块。如果引用了 包含块 的属性,则它们引用的是生成该 包含块盒子 上的值。(对于 初始包含块,除非另有规定,值取自根元素。)

详细信息请参见 [CSS2] 第 9.1.2 节第 10.1 节 以及 CSS 定位布局 3 § 2.1 定位盒子的包含块

包含块链 (containing block chain)
通过 包含块 关系形成祖先-后代链的一系列连续 包含块。例如,行内盒子 的包含块是其最接近的 块容器 祖先的内容盒;如果该块容器是流内 ,那么的包含块由其父 块容器 形成;如果该祖父 块容器绝对定位的,那么的包含块是其最接近的定位祖先(不一定是父元素)的内边距边缘,依此类推,直到 初始包含块
initial containing block
根元素包含块初始包含块 建立了一个 块格式化上下文。有关其位置和尺寸,请参见 CSS2.1§10.1(针对 连续媒体)以及 [CSS-PAGE-3](针对 分页媒体)。
格式化上下文 (formatting context)
格式化上下文 是布局一组相关盒子的环境。不同的 格式化上下文 根据不同的规则布局其盒子。例如,Flex 格式化上下文 根据 Flex 布局 规则 [CSS-FLEXBOX-1] 布局盒子,而 块格式化上下文 根据块级和行内布局规则 [CSS2] 布局盒子。此外,某些类型的 格式化上下文 会交错并共存:例如,行内格式化上下文 存在于建立它的元素的 块格式化上下文 之内并与之交互,ruby 容器 在其 ruby 基础容器 所参与的 行内格式化上下文 之上覆盖了一个 ruby 格式化上下文

一个盒子要么建立一个新的 独立格式化上下文,要么沿用其包含块的 格式化上下文。在某些情况下,它可能额外建立一个新的(非独立的)共存格式化上下文。然而,除非另有规定,建立一个新的 格式化上下文 都会产生一个 独立格式化上下文。该盒子建立的格式化上下文类型由其 内部显示类型 决定。例如,网格容器 建立一个新的 网格格式化上下文ruby 容器 建立一个新的 ruby 格式化上下文,而 块容器 可以建立一个新的 块格式化上下文 和/或 一个新的 行内格式化上下文。参见 display 属性。

独立格式化上下文
当一个盒子建立一个独立的格式化上下文时(无论该 格式化上下文 类型是否与其父级相同),它本质上创建了一个新的、独立的布局环境:除了通过盒子本身的尺寸外,其后代的布局(通常)不受盒子外部 格式化上下文 的规则和内容影响,反之亦然。

例如,在 块格式化上下文 中,浮动盒子会影响周围盒子的布局。但它们的影响不会逃出其 格式化上下文:建立它们的 格式化上下文 的盒子会增长以完全包含它们,而外部的浮动不允许突出并影响该盒子内部的内容。

再例如,外边距不会跨越 格式化上下文 边界进行折叠。

排除项 (Exclusions) 能够影响跨越 独立格式化上下文 边界的内容。(在撰写本文时,它们是唯一能这样做的布局功能。) [CSS3-EXCLUSIONS]

某些属性可以强制一个盒子在原本不会的情况下 建立一个独立格式化上下文。例如,使一个盒子 流外 (out-of-flow) 会导致它 块化 (blockify) 以及 建立一个独立格式化上下文。再例如,contain 属性的某些值会导致盒子 建立一个独立格式化上下文。将一个块变成 滚动容器 会导致它 建立一个独立格式化上下文;然而,将一个 子网格 (subgrid) 变成 滚动容器 则不会——它继续充当子网格,其内容参与父 网格容器 的布局。

一个 块盒子,如果 建立了一个独立格式化上下文,则会为其内容建立一个新的 块格式化上下文。在大多数其他情况下,强制盒子 建立一个独立格式化上下文 是无操作的——要么盒子已经建立了 独立格式化上下文(例如 Flex 容器),要么无法在该类型的盒子上建立完全独立的格式化上下文(例如非替换的 行内盒子)。

块格式化上下文
行内格式化上下文
行内格式化上下文 定义于 CSS 2.1 第 9.4 节行内格式化上下文 存在于(作为其包含的)块格式化上下文 内部;例如,属于 行内格式化上下文 的行盒会与属于 块格式化上下文 的浮动元素交互。
块布局(block layout)
块格式化上下文 内执行的 块级盒子 的布局。
块格式化上下文根(block formatting context root)
建立一个新的 块格式化上下文块容器
BFC
块格式化上下文块格式化上下文根 的缩写。有各种非正式定义,指代那些包含内部浮动、排除外部浮动并抑制外边距折叠的盒子,因此可能专门指代以下之一:
流外
流内
如果一个盒子被从其预期的位置和与周围内容的交互中提取出来,并使用其父格式化上下文中内容正常流之外的另一种范式进行布局,则该盒子是 流外 (out-of-flow) 的。如果盒子被浮动(通过 float)或 绝对定位(通过 position),则会发生这种情况。如果盒子不是 流外 的,则它是 流内 (in-flow) 的。

注意: 一些 格式化上下文 会抑制浮动,因此具有 float: left 的元素并不一定是 流外 的。

文档顺序
文档中盒子或内容出现的顺序(可能与渲染时出现的顺序不同)。为了确定伪元素的相对顺序,使用盒子树顺序,参见 CSS 伪元素 4 § 4 遵守树结构的伪元素

有关这些术语的更完整定义,请参见 [CSS2] 第 9 章

附录 B:display: contents 对特殊元素的影响

本节(目前)是非规范性的。

有些元素并非纯粹通过 CSS 盒子概念来渲染;例如,替换元素(如 img)、许多表单控件(如 input)以及 SVG 元素。

本附录定义了它们如何与 display: contents 交互。

HTML 元素

br
wbr
meter
progress
画布 (canvas)
embed
object
audio
iframe
img
video
frame
frameset
input (输入)
textarea
select

display: contents 计算为 display: none

图例 (legend)

根据 HTML,具有 display: contentslegend 元素不是 渲染后的图例,因此它没有神奇的显示行为。(因此,它会对 display: contents 做出正常反应。)

button
details
fieldset

这些元素没有任何特殊行为;display: contents 仅仅移除它们的 主体盒子,而其内容照常渲染。

任何其他 HTML 元素

其行为与 display: contents 的正常行为一致。

SVG 元素

具有 CSS 盒子布局的 svg 元素(这包括所有父元素为 HTML 元素的 svg,以及文档根元素)

display: contents 计算为 display: none

所有其他同时也是 可渲染元素 的 SVG 容器元素
SVG 文本内容子元素
use

display: contents 将该元素从格式化树中剥离,并将其内容提升到原位置显示。这些内容包括 use 的 shadow-DOM 内容。

任何其他 SVG 元素

display: contents 计算为 display: none

这里的意图是,每当元素内部的“渲染上下文”与外部上下文不同时,display: none 行为就适用。如果元素的子元素不是其父元素的合法子元素,则无法简单地将它们提升到格式化树中。

例如,SVG 中的文本内容和文本格式化元素需要 text 元素上下文;如果您移除了 text,其子文本内容和元素就不再合法。因此,text 上的 display: contents 会阻止整个文本元素被渲染。相反,tspantextPath 内的任何合法内容也是父文本格式化上下文中的合法内容,因此这些元素的提升行为适用。

同样,如果提升会将子元素从 非渲染元素(例如,patternsymbol 内部的形状)转换为 渲染元素(例如,作为 svg 直接子元素的形状),这是非法的渲染上下文变更。因此,从不渲染的容器元素不能被 display: contents“取消盒子化 (un-boxed)”。

当一个元素从格式化树中剥离时,该元素上控制布局和视觉格式的任何 SVG 属性在渲染内容时都会被忽略。然而,映射到 CSS 属性的 SVG 呈现属性 仍会影响值处理和继承 [CSS-CASCADE-3];因此,此类属性可以通过影响这些后代上相应属性的值,从而影响该元素后代的布局和视觉格式。

MathML 元素

对于所有 MathML 元素,display: contents 计算为 display: none

附录 C:规范作者的盒子构建指南

本节是非规范性的,为规范作者提供指导。

致谢

我们要感谢多年来试图分离盒子生成中不同细节的许多人,特别是 Bert Bos,他最后一次使用 display-modeldisplay-role 的尝试虽然没有成功,但为当前的规范做了准备;Anton Prowse,他对 CSS2.1 第 9 章的不懈抨击迫使混乱中产生了一些秩序;以及 Oriol Brufau,他梳理了本规范中数十个细微的区别和错误。还要特别提到 David Baron、Mats Palmgren、Ilya Streltsyn 和 Boris Zbarsky 的反馈。

变更 (Changes)

2020 候选推荐标准以来的变更

2020 年 5 月 19 日候选推荐标准 以来的 意见处置 已发布。

2020 年 5 月 19 日候选推荐标准 以来的变更包括:

2019 候选推荐标准以来的变更

2019 年 7 月 11 日候选推荐标准 以来的变更包括:

2018 年 8 月 28 日候选推荐标准 以来的变更包括:

达到候选推荐标准状态之前的变更

有可用的 意见处置

2018 年 4 月 20 日工作草案 以来的变更包括:

2017 年 7 月 20 日工作草案 以来的变更包括:

2017 年 1 月 26 日工作草案 以来的变更包括:

还有一个可用的 意见处置

2015 年 10 月 15 日工作草案 以来的变更包括:

2015 年 7 月 21 日工作草案 以来的变更包括:

2014 年 9 月 11 日工作草案 以来的变更包括:

隐私考虑

本规范未引入新的隐私考虑。

安全考虑

本规范未引入任何新的安全考量。

自我评估问卷

根据 自我评估问卷:安全与隐私:需考虑的问题

  1. 本规范是否处理个人身份信息?

    不。

  2. 本规范是否处理高价值数据?

    不。

  3. 本规范是否为跨浏览会话持久化的源引入了新状态?

    不。

  4. 本规范是否向 Web 暴露了持久的、跨源的状态?

    不。

  5. 本规范是否向一个源暴露了它目前无法访问的其他数据?

    不。

  6. 本规范是否启用了新的脚本执行/加载机制?

    不。

  7. 本规范是否允许源访问用户位置?

    不。

  8. 本规范是否允许源访问用户设备上的传感器?

    不。

  9. 本规范是否允许源访问用户本地计算环境的各个方面?

    不。

  10. 本规范是否允许源访问其他设备?

    不。

  11. 本规范是否允许源对用户代理的原生 UI 有一定程度的控制?

    不。

  12. 本规范是否向 Web 暴露临时标识符?

    不。

  13. 本规范是否区分第一方和第三方上下文中的行为?

    不。

  14. 本规范应如何在用户代理的“隐身”模式上下文中工作?

    没有区别。

  15. 本规范是否将数据持久化到用户的本地设备?

    不。

  16. 本规范是否有“安全考虑”和“隐私考虑”部分?

    是的。

  17. 本规范是否允许降低默认安全特性?

    不。

一致性

文档约定

一致性要求通过描述性断言和 RFC 2119 术语相结合来表达。本文档规范性部分中的关键词“MUST”(必须)、“MUST NOT”(不得)、“REQUIRED”(必需)、“SHALL”(应)、“SHALL NOT”(不应)、“SHOULD”(推荐)、“SHOULD NOT”(不推荐)、“RECOMMENDED”(建议)、“MAY”(可以)和“OPTIONAL”(可选)应按照 RFC 2119 中的描述进行解释。然而,为了可读性,这些词在本文档中不以全大写形式出现。

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

本规范中的示例均以“例如”一词引入,或者通过 class="example" 与规范性文本隔开,如下所示

这是一个说明性示例。

说明性注释以“Note”一词开头,并使用 class="note" 与规范性文本隔开,如下所示

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

建议(Advisements)是规范性章节,旨在引起特别注意,并使用 <strong class="advisement"> 与其他规范性文本区分开来,如下所示: 用户代理必须提供可访问的替代方案。

一致性类别

本规范为三类一致性定义了一致性要求。

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

如果样式表包含的所有使用本模块定义语法的语句,根据通用 CSS 语法及本模块定义的各功能语法均有效,则该样式表符合本规范。

如果渲染器除了按相应规范解释样式表外,还通过正确解析本规范定义的所有功能并相应地渲染文档来支持这些功能,则该渲染器符合本规范。然而,由于设备限制导致 UA 无法正确渲染文档,并不意味着该 UA 不符合规范。(例如,UA 无需在单色显示器上渲染颜色。)

如果创作工具编写的样式表根据通用 CSS 语法及本模块中各功能的语法是句法正确的,并符合本模块中描述的所有其他样式表一致性要求,则该创作工具符合本规范。

部分实现

为了使作者能够利用前向兼容的解析规则来指定后备值,CSS 渲染器 **必须** 将其无法使用支持级别的任何 @规则、属性、属性值、关键字和其他语法结构视为无效(并 适当忽略)。特别地,用户代理 **不得** 在单一多值属性声明中选择性地忽略不支持的组件值而保留支持的值:如果任何值被视为无效(因为不支持的值必须如此),CSS 要求忽略整个声明。

不稳定和专有特性的实现

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

非实验性实现

一旦规范达到候选推荐阶段,非实验性实现即可成为可能,实现者应发布他们能够证明根据规范正确实现的任何 CR 级别特性的无前缀实现。

为建立并保持 CSS 在不同实现间的互操作性,CSS 工作组请求非实验性的 CSS 渲染器在发布任何 CSS 功能的无前缀实现之前,向 W3C 提交一份实现报告(并在必要时提交用于该实现报告的测试用例)。提交给 W3C 的测试用例需经 CSS 工作组审阅和修正。

有关提交测试用例和实现报告的详细信息,请访问 CSS 工作组网站 https://w3org.cn/Style/CSS/Test/。问题可发送至 public-css-testsuite@w3.org 邮件列表。

候选推荐标准 (CR) 退出标准

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

independent
每个实现必须由不同的方开发,并且不能共享、重用或派生自另一个合格实现所使用的代码。对本规范实现无影响的代码段不受此要求限制。
可互操作
通过官方 CSS 测试套件中的相应测试用例,或者如果实现不是 Web 浏览器,则通过等效测试。如果此类用户代理 (UA) 用于声明互操作性,则测试套件中的每个相关测试都应创建等效测试。此外,如果此类 UA 用于声明互操作性,则必须有一个或多个额外的 UA,它们也可以以相同的方式通过这些等效测试,以实现互操作性的目的。等效测试必须公开,以供同行评审。
实现
用户代理,即
  1. 实现了该规范。
  2. 对公众可用。该实现可以是出货产品或其他公开可用的版本(即测试版、预览发布版或“每日构建版”)。非出货产品发布版必须已实现该功能至少一个月,以证明其稳定性。
  3. 不是实验性的(即,专门为通过测试套件设计且不打算用于正常使用的版本)。

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

索引

本规范定义的术语

通过引用定义的术语

引用

规范性引用

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr.. CSS Box Alignment Module Level 3. 2023年2月17日. WD. URL: https://w3org.cn/TR/css-align-3/
[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS 背景和边框模块第 3 级. 2023 年 2 月 14 日. CR. URL: https://w3org.cn/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2022年11月3日. WD. URL: https://w3org.cn/TR/css-box-4/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 2018年12月4日. CR. URL: https://w3org.cn/TR/css-break-3/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 4. 2018年12月18日. WD. URL: https://w3org.cn/TR/css-break-4/
[CSS-CASCADE-3]
Elika Etemad; Tab Atkins Jr.. CSS 层叠和继承第 3 级. 2021 年 2 月 11 日. REC. URL: https://w3org.cn/TR/css-cascade-3/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022年1月13日. CR. URL: https://w3org.cn/TR/css-cascade-5/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS Containment Module Level 2. 2022年9月17日. WD. URL: https://w3org.cn/TR/css-contain-2/
[CSS-FLEXBOX-1]
Tab Atkins Jr.; et al. CSS Flexible Box Layout Module Level 1. 2018年11月19日. CR. URL: https://w3org.cn/TR/css-flexbox-1/
[CSS-GRID-1]
Tab Atkins Jr.; 等人. CSS Grid Layout Module Level 1. 2020年12月18日. CR. URL: https://w3org.cn/TR/css-grid-1/
[CSS-GRID-2]
Tab Atkins Jr.; Elika Etemad; Rossen Atanassov. CSS Grid Layout Module Level 2. 2020年12月18日. CR. URL: https://w3org.cn/TR/css-grid-2/
[CSS-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS 图像模块第 3 级. 2020年12月17日. CR. URL: https://w3org.cn/TR/css-images-3/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad. CSS 行内布局模块第 3 级. 2022年11月14日. WD. URL: https://w3org.cn/TR/css-inline-3/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS 溢出模块第 3 级. 2023年3月21日. WD. URL: https://w3org.cn/TR/css-overflow-3/
[CSS-PAGE-3]
Elika Etemad; Simon Sapin. CSS 分页媒体模块 Level 3. 2018 年 10 月 18 日. WD. URL: https://w3org.cn/TR/css-page-3/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS 定位布局模块第 3 级. 2023年2月17日. WD. URL: https://w3org.cn/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS 伪元素模块 Level 4. 2022年12月30日. WD. URL: https://w3org.cn/TR/css-pseudo-4/
[CSS-RUBY-1]
Elika Etemad; et al. CSS Ruby Annotation Layout Module Level 1. 2022年12月31日. WD. URL: https://w3org.cn/TR/css-ruby-1/
[CSS-SPEECH-1]
Léonie Watson; Elika Etemad. CSS Speech Module Level 1. 2023年2月14日. CR. URL: https://w3org.cn/TR/css-speech-1/
[CSS-TABLES-3]
François Remy; Greg Whitworth; David Baron. CSS Table Module Level 3. 2019年7月27日. WD. URL: https://w3org.cn/TR/css-tables-3/
[CSS-TEXT-4]
Elika Etemad; 等. CSS 文本模块第 4 级. 2023年3月1日. WD. URL: https://w3org.cn/TR/css-text-4/
[CSS-UI-4]
Florian Rivoal. CSS Basic User Interface Module Level 4. 2021年3月16日. WD. URL: https://w3org.cn/TR/css-ui-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块第 3 级. 2022年12月1日. CR. URL: https://w3org.cn/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位模块第 4 级. 2022年10月19日. WD. URL: https://w3org.cn/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019年12月10日. REC. URL: https://w3org.cn/TR/css-writing-modes-3/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://w3org.cn/TR/CSS21/
[CSS22]
Bert Bos. Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification. 2016年4月12日. WD. URL: https://w3org.cn/TR/CSS22/
[CSSOM]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021年8月26日. WD. URL: https://w3org.cn/TR/cssom-1/
[DOM]
Anne van Kesteren. DOM 标准. Living Standard. URL: https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML 标准. Living Standard. URL: https://html.whatwg.cn/multipage/
[MEDIAQUERIES-5]
Dean Jackson; 等人. Media Queries Level 5. 2021年12月18日. WD. URL: https://w3org.cn/TR/mediaqueries-5/
[RFC2119]
S. Bradner. RFC 中用于指示要求级别的关键词. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. 选择器第 4 级. 2022 年 11 月 11 日. WD. URL: https://w3org.cn/TR/selectors-4/
[SVG2]
Amelia Bellamy-Royds; et al. Scalable Vector Graphics (SVG) 2. 2018年10月4日. CR. URL: https://w3org.cn/TR/SVG2/

参考资料

[CSS3-EXCLUSIONS]
Rossen Atanassov; Vincent Hardy; Alan Stearns. CSS 排除模块 Level 1. 2015 年 1 月 15 日. 工作草案 (WD). URL: https://w3org.cn/TR/css3-exclusions/

属性索引

名称初始值应用于继承百分比动画类型 (Animation type)规范顺序计算值媒体
display [ <display-outside> || <display-inside> ] | <display-listitem> | <display-internal> | <display-box> | <display-legacy>inline所有元素不可用不可动画按语法一对表示内部和外部显示类型的关键字,加上可选的 list-item 标记,或者一个 <display-internal> 或 <display-box> 关键字;计算规则请参见各类规范中的正文
order <integer>(整数)0 flex 项目和 grid 项目不可用按计算值类型按语法指定的整数
visibility visible | hidden | collapsevisible所有元素不适用离散 (discrete)按语法按指定值视觉