CSS 盒子对齐模块第 3 级

W3C 工作草案,

更多文档详情
此版本:
https://www.w3.org/TR/2026/WD-css-align-3-20261008/
最新发布版本:
https://www.w3.org/TR/css-align-3/
编者草案:
https://drafts.csswg.org/css-align/
历史:
https://www.w3.org/standards/history/css-align-3/
反馈:
CSSWG Issues Repository
规范内问题索引
编者:
Elika J. Etemad / fantasai (Apple)
Tab Atkins Jr. (Google)
为此规范提出修改建议:
GitHub 编辑器

摘要

本模块包含了与 CSS 相关的功能,主要涉及各种 CSS 盒模型(块布局、表布局、弹性布局和网格布局)中容器内盒子的对齐方式。(文本和内联级内容的对齐在 [CSS-TEXT-3] 和 [CSS-INLINE-3] 中定义。)

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

本文件状态

本节描述本文件在发布时的状态。 当前 W3C 出版物清单及本技术报告的最新修订版本 可在 W3C 标准及草案索引 中找到。

本文件由 CSS 工作组 作为 工作草案,依据推荐流程发布。 作为工作草案的发布 并不代表 W3C 及其成员的背书。

此文件为草案, 可能随时更新、替换或废止, 不适合作为最终成果引用。

请通过 在 GitHub 提交 issue(推荐)反馈意见, 并在标题中包含规范代码 “css-align”,格式如下: “[css-align] …评论摘要…”。 所有问题和评论都会被归档。 另外,也可将反馈发送至(归档)公共邮件列表 www-style@w3.org。

本文件受 2025年8月18日 W3C 流程文件 管辖。

本文件由在 W3C 专利政策下运作的小组制作。 W3C 保有一份 与小组成果相关的公开专利披露列表; 该页面还包括专利披露的操作说明。 若个人实际知晓某项专利并认为其中含有必要权利要求, 则必须按照 W3C 专利政策第6节 进行披露。

以下特性处于风险之中,并可能在 CR(候选推荐标准)阶段被删除:

“At-risk”(处于风险中)是 W3C 流程中的一个术语,并不一定意味着该特性有被删除或延迟的危险。它意味着工作组认为该特性可能难以按时实现互操作性,标记为此允许工作组在必要时,在过渡到提议推荐标准 (Proposed Rec) 阶段时删除该特性,而无需首先发布不包含该特性的新的候选推荐标准 (Candidate Rec)。

1. 引言

CSS 第 1 级和第 2 级允许通过 text-align 对齐文本,并通过平衡 auto 外边距来对齐块级元素。 然而,除了表格单元格之外, 垂直对齐是不可能的。 随着 CSS 增加更多功能, 在各个维度上对齐盒子的能力变得更加重要。 本模块试图创建一个内聚且通用的盒子对齐模型,以便在所有 CSS 中共享。

注意:文本和行内级内容的对齐在 [CSS-TEXT-3] 和 [CSS-INLINE-3] 中定义。

注意:本规范无意更改 CSS2.1 中定义的任何行为, 当此处定义的属性设置为其初始值时。 如果实现者或任何其他人注意到差异, 请将其作为错误报告给 CSSWG。

(以上)本节不具有规范性。

1.1. 模块交互

本模块为 [CSS2] 第 9 章 和第 10 章中描述的块布局模型 添加了一些新的对齐功能, 重新定义了如何解决块级框外边距的过度约束问题, 并定义了这些新的对齐属性 与使用 vertical-align 对齐表格单元格内容之间的相互作用, 如 [CSS2] 第 17 章所定义。

这些属性与 网格布局 [CSS-GRID-1] 和弹性框布局 [CSS-FLEXBOX-1] 的相互作用在各自的模块中定义。 此处的属性定义取代了 [CSS-FLEXBOX-1] 中的定义 (后者允许的值是一个更小、更早的子集)。

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

1.2. 值定义

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

除了在其定义中列出的特定于属性的值之外, 本规范中定义的所有属性 也接受 CSS 范围关键字作为其属性值。 为便于阅读,未明确重复它们。

1.3. 部分实现

由于预计本模块中特性的支持 将分阶段部署,对应于受影响的各种布局模型, 因此在此澄清, 要求将任何不受支持的特性视为无效的部分实现规则 适用于任何对齐关键字, 如果该关键字未在其适用的所有布局模块中得到支持, 而实现通常支持该属性的布局模型。

例如, 如果一个实现支持 [CSS-GRID-1] 和 [CSS-FLEXBOX-1] 中的 align-self, 那么它必须将 start 视为无效, 除非它在网格和弹性容器中都得到支持。 但是,如果同一个实现根本不支持块级元素的 align-self, 那么未实现 align-self: start 并不会触发将其视为无效的要求。

2. 对齐属性概述

CSS 中的盒子对齐属性是一组 6 个属性, 用于控制盒子在其他盒子内的对齐方式。 它们可以沿两个轴进行描述:

注意:本规范使用术语“justify”和“align”来区分 主轴/行内轴和交叉轴/块轴方向上的对齐。 这种选择有些随意,但使用这两个术语可以形成 一个适用于所有 CSS 布局模型的一致命名方案 (包括 CSS Flexbox 1 § 2 Flex 布局盒子模型和术语)。

下表总结了盒子对齐属性以及它们可以应用的显示类型。

通用 轴 对齐对象 适用于
justify-content 主轴/行内轴 元素内内容对齐图示 元素内的内容 (有效地调整内边距) 块容器、弹性容器和网格容器
align-content 交叉轴/块轴
justify-self 行内轴 元素在父元素内对齐图示 元素在父元素内 (有效地调整外边距) 块级盒子、绝对定位盒子和网格项目
align-self 交叉轴/块轴 绝对定位盒子、弹性项目和网格项目
justify-items 行内轴 盒子内项目对齐图示 盒子内的项目 (控制子项目的 justify-self: auto) 块容器和网格容器
align-items 交叉轴/块轴 弹性容器和网格容器

注意:*-items 属性 不影响元素本身。 当在容器上设置时, 它们指定了容器元素子元素上任何 *-self: auto 的解释。

3. 对齐术语

由于本模块定义了 CSS 中所有布局模式的对齐属性, 因此引入了一些抽象术语:

对齐主体
对齐主体是指被属性对齐的一个或多个事物。 对于 justify-self 和 align-self, 对齐主体是设置了该属性的盒子的外边距盒子, 并采用该盒子的书写模式。 对于 justify-content 和 align-content, 对齐主体由布局模式定义 并指其内容的某些方面; 它也采用设置了该属性的盒子的书写模式。
对齐容器
对齐容器是对齐主体在其中对齐的矩形。 这由布局模式定义, 但通常是对齐主体的包含块, 并采用建立包含块的盒子的书写模式。
回退对齐
某些对齐方式只能在特定情况下实现 或者在它们可以消耗的空间方面受到限制; 例如,space-between 只能在有多个对齐主体时操作, 而基线对齐一旦实现,可能不足以吸收所有多余的空间。 在这些情况下,回退对齐会生效 (如下所定义) 以完全消耗多余的空间。

4. 对齐关键字

所有的对齐属性都使用一组通用的关键字值, 这些值在本节中定义。 关键字分为三类:

位置对齐
这些关键字将对齐定义为对齐容器内的绝对位置。
基线对齐
这些关键字将对齐定义为对齐上下文内多个对齐主体基线之间的关系。
分布式对齐
这些关键字将对齐定义为对齐主体之间的空间分布。

4.1. 位置对齐:center、start、end、self-start、self-end、flex-start、flex-end、left 和 right 关键字

位置对齐关键字指定对齐主体相对于其对齐容器的位置。

值的含义如下:

center (自身, 内容)
在其对齐容器内居中对齐主体。
start (自身, 内容)
将对齐主体与对齐容器在相应轴上的起始边缘对齐。
end (自身, 内容)
将对齐主体与对齐容器在相应轴上的结束边缘对齐。
self-start (自身)
将对齐主体与对齐容器中对应于对齐主体在相应轴上的起始侧的边缘对齐。
self-end (自身)
将对齐主体与对齐容器中对应于对齐主体在相应轴上的结束侧的边缘对齐。
flex-start (自身, 内容)
仅用于弹性布局。 [CSS-FLEXBOX-1] 将对齐主体与对齐容器中对应于弹性容器的主轴起始或交叉轴起始侧(视情况而定)的边缘对齐。

在弹性格式化上下文之外使用时,此值的行为类似于 start。 也就是说,对于非弹性项目(或假装是弹性项目, 例如在确定作为弹性容器子元素的绝对定位盒子的静态位置时), 此值在自对齐属性中使用时行为类似于 start, 而对于非弹性容器的盒子, 此值在内容分布属性中使用时行为类似于 start。

flex-end (自身, 内容)
仅用于弹性布局。 将对齐主体与对齐容器中对应于弹性容器的主轴结束或交叉轴结束侧(视情况而定)的边缘对齐。

在弹性格式化上下文之外使用时,此值的行为类似于 end。 也就是说,对于非弹性项目(或假装是弹性项目, 例如在确定作为弹性容器子元素的绝对定位盒子的静态位置时), 此值在自对齐属性中使用时行为类似于 end, 而对于非弹性容器的盒子, 此值在内容分布属性中使用时行为类似于 end。

left (仅 justify-*)
将对齐主体与对齐容器的行左或物理左边缘(以相应轴为准)对齐。

如果属性的轴与任一左↔右轴都不平行, 此值的行为类似于 start。目前,唯一属性的轴 与任一左↔右轴都不平行的情况 是在列式弹性盒中。

right (仅 justify-*)
将对齐主体与对齐容器的行右或物理右边缘(以相应轴为准)对齐。

如果属性的轴与任一左↔右轴都不平行, 此值的行为类似于 start。目前,唯一属性的轴 与任一左↔右轴都不平行的情况 是在列式弹性盒中。

使用两个语法术语来表示这些值的某些子集:

<self-position>
此集合由 justify-self 和 align-self 用于在其对齐容器内对齐盒子, 也由 justify-items 和 align-items(用于指定 justify-self 和 align-self 的默认值)使用。
<self-position> = center | start | end | self-start | self-end |
        flex-start | flex-end
    
<content-position>
此集合由 justify-content 和 align-content 用于在盒子自身内部对齐其内容。
<content-position> = center | start | end | flex-start | flex-end
    

注意:left 和 right 从 <self-position> 和 <content-position> 中排除, 尽管它们是 justify-content/justify-self/justify-items 的有效位置对齐值, 因为它们不允许在 align-* 属性中使用。 它们被明确包含在 justify-* 属性的语法中。

对于大多数布局模型(块、表、网格等), justify-* 属性始终在行内轴中对齐事物, 而 align-* 属性始终在块轴中对齐事物。

另一方面,Flexbox 使 justify-* 在主轴中对齐事物,而 align-* 在交叉轴中对齐事物。 这取决于 flex-direction 的值: 当 flex-direction 为 row 或 row-reverse 时, 它与其他布局模型匹配 (行内轴与 justify-*,块轴与 align-*); 当 flex-direction 为 column 或 column-reverse 时, 它具有相反的对应关系。

使其更容易理解“start”和“end”相对于正交流的双轴特性。

4.2. 基线对齐:baseline 关键字 和 first/last 修饰符

参见 CSS 书写模式 3 § 4.1 基线简介。

基线对齐是 一种位置对齐形式, 它通过匹配它们的对齐基线来对齐共享对齐上下文(例如一行中的单元格) 中的多个对齐主体。 如果基线共享组 内的对齐主体的位置 没有被基线对齐完全约束(即,它们可以在各自的 对齐容器内移动, 同时保持基线对齐), 则它们会尽可能地进行回退对齐,同时保留它们的基线对齐。

基线对齐关键字由 <baseline-position> 语法项表示:

<baseline-position> = [ first | last ]? && baseline
    

first 和 last 值赋予盒子一个基线对齐偏好: 分别为“first”或“last”, 默认为“first”。

值具有以下含义:

baseline
计算为 first baseline,定义如下。
first baseline
指定参与第一基线对齐: 将盒子的第一基线集的对齐基线 与其基线共享组的相应基线对齐。 更多详细信息请参见 § 9.3 按基线对齐盒子。

first baseline 的回退对齐 是 safe self-start(对于自对齐) 或 safe start(对于内容分布)。

last baseline
指定参与最后基线对齐: 将盒子的最后基线集的对齐基线 与其基线共享组的相应基线对齐。 更多详细信息请参见 § 9.3 按基线对齐盒子。

last baseline 的回退对齐 是 safe self-end(对于自对齐) 或 safe end(对于内容分布)。

当为 align-content 指定时, 这些值会触发基线内容对齐, 在盒子的内容框内移动其内容, 并且也可能影响盒子本身的大小。 参见 § 5.4 基线内容对齐。

当为 align-self/justify-self 指定时, 这些值会触发基线自对齐, 在容器内移动整个盒子, 这可能会影响其容器的大小。 参见 § 6.4 基线自对齐。

当在盒子上指定基线 自对齐时,首先执行内容分布, 然后将生成的盒子及其内容进行自对齐。然而,如果盒子在同一轴向上也有基线内容对齐, 或者其在同一轴向上的内容分布属性为 normal, 则其在该轴向上使用的 内容分布属性 对于其基线自对齐的“first”或“last”的基线对齐偏好分别为 start 或 safe end。

在此处添加示例图片。

如果一个盒子不属于共享对齐上下文, 则使用回退 对齐。 例如,块级盒子上的 align-content: baseline 会回退到 start 对齐。 回退对齐也用于在其对齐容器内对齐基线共享组。

注意:因为它们是等效的,并且 baseline 更短, 所以 CSSOM 将 first baseline 序列化为 baseline。 参见 CSSOM § 6.7.2 序列化 CSS 值。

注意:对于有些相关的 vertical-align 属性, 由于 CSS2.1 中不一致的设计决策,baseline 并不 等同于 first baseline,因为行内级盒子的基线对齐偏好取决于 display。 (例如,inline-block 默认使用其最后基线, 而 inline-table 默认使用其第一基线。)

4.3. 分布式对齐:stretch、space-between、space-around 和 space-evenly 关键字

分布式 对齐值由 justify-content 和 align-content 用于在其对齐主体之间分散容器的额外空间。

space-between | space-around | space-evenly | stretch
分布式对齐值

当无法以这种方式分布空间时, 这些值的行为与其回退对齐相同。 每个分布值都有一个关联的默认回退 对齐。 (此模块的未来级别可能允许显式指定回退 对齐。)

space-between
对齐 主体在对齐容器中均匀分布。 第一个对齐主体与对齐容器的起始边缘齐平放置, 最后一个对齐主体与对齐容器的结束边缘齐平放置, 其余的对齐主体则被分布,使得任意两个相邻对齐 主体之间的间距相同。
例如,给定三个项目,所有多余空间被分成两半并进行分配:一半在第一个和第二个项目之间,另一半在最后两个项目之间。

此值的默认回退对齐是 safe flex-start。(对于除弹性布局之外的布局模式,flex-start 与 start 相同。)

space-around
对齐 主体在对齐容器中均匀分布, 两端各留有半个大小的空间。 对齐主体被分布,使得任意两个相邻对齐 主体之间的间距相同, 并且第一个对齐 主体之前和最后一个对齐主体之后的间距是其他间距的一半。
例如,给定三个项目,所有多余空间被分成六份并进行分配:起始处一份,末尾处一份,第一个和第二个项目之间以及最后两个项目之间各两份(各占三分之一)。

此值的默认回退对齐是 safe center。

space-evenly
对齐 主体在对齐容器中均匀分布, 两端各留有一个完整大小的空间。 对齐主体被分布,使得任意两个相邻对齐 主体之间、 第一个对齐主体之前、 以及最后一个对齐主体之后的间距相同。
例如,给定三个项目,所有多余空间被分成四份并进行分配:分别分配给起始处、末尾处、第一个和第二个项目之间以及最后两个项目之间。

此值的默认回退对齐是 safe center。

stretch
如果对齐主体的组合大小小于对齐 容器的大小, 任何auto大小的对齐主体 的大小会均等增加(非按比例), 同时仍然遵守max-height/max-width(或等效功能)施加的约束, 以便组合大小恰好填满对齐 容器。
例如,给定三个项目,所有多余空间被分成三份并进行分配:每个项目各占一份。

此值的默认回退对齐是 flex-start。(对于除弹性布局之外的布局模式,flex-start 与 start 相同。)

注意:此 `align-content/stretch` 定义 适用于内容分布属性; 自对齐属性 justify-self/align-self 有其自己的 stretch 值, 它可以增大或缩小对齐主体以确保其恰好适合对齐 容器。

这些值由 <content-distribution> 语法项表示:

<content-distribution> = space-between | space-around | space-evenly | stretch
    

4.4. 溢出对齐:safe 和 unsafe 关键字与滚动安全限制

在某些情况下, 完全按照指定方式对齐 会导致对齐 主体溢出其对齐容器, 从而可能导致数据丢失。 例如,如果侧边栏的内容无条件居中, 大到足以溢出的项目可能会延伸到视口的起始边缘之外, 而该区域无法滚动到。

下图说明了“安全”与“不安全”居中之间的区别, 以列 flexbox 为例:
关于
威权主义
博客
关于
威权主义
博客
“安全”(左侧) 与“不安全”(右侧) 居中的示例, 此时居中项目大于其容器。

左图中的项目会居中,除非它们发生溢出, 在这种情况下,所有溢出都会超出末端边缘, 而右图中的项目则全部严格居中, 即使其中过长而无法容纳的项目会从两侧溢出。

如果容器被放置在 页面左边缘, “安全”行为会更合适, 因为较长的项目将完全可读, 而不会被屏幕左边缘裁剪。 在其他情况下, “不安全”的居中行为可能更好, 因为它能正确地将所有项目居中。

为了控制这种情况, 可以显式指定溢出对齐 模式。 “不安全”对齐在溢出情况下遵循指定的对齐模式,即使这会导致数据丢失, 而“安全”对齐会在溢出情况下更改对齐模式,以尝试避免数据丢失。 默认行为是将对齐主体包含在可滚动区域内, 不过在撰写本文时,此安全功能尚未实现。

<overflow-position> = unsafe | safe
safe
如果对齐对象的尺寸超出了对齐容器, 则改为按照对齐模式为 flex-start 时的方式对齐对齐对象。 但对于绝对定位的框,请参阅§ 4.4.1.2 绝对定位框的自身对齐。
unsafe
无论对齐对象与对齐容器的相对尺寸如何, 都遵循给定的对齐值。
默认(未指定值)
如果未明确指定溢出 对齐, 则默认溢出对齐是“safe”和“unsafe” 的混合形式。 详情请参阅§ 4.4.1 自动溢出对齐安全性。

4.4.1. 自动溢出对齐安全性

如果未为属性指定溢出对齐模式,则默认行为介于安全 (safe)和不安全 (unsafe)之间,并且因布局模式而异。

4.4.1.1. 滚动容器的内容分布

在滚动 容器的可滚动轴中, 内容分布的默认溢出 对齐行为为 unsafe。 内容分布属性的非 normal 值则会 改变可滚动溢出区域,以便能够访问 溢出的内容。 请参阅§ 5.3 对齐溢出与滚动容器。

4.4.1.2. 绝对定位盒子的自对齐

对于相关使用值不为 normal 的自身对齐属性所对应的 绝对定位对齐对象, 默认和 safe 溢出对齐行为 如下:

  1. 如果对齐对象能够容纳在内缩距修正后的包含块内, 则在不溢出内缩距修正后的 包含块的前提下,尽可能按照指定的方式对齐。

  2. 否则, 如果对齐对象能够容纳在溢出限制 矩形内, 则对齐对齐对象,使其 完全覆盖内缩距修正后的包含块, 并在不溢出overflow limit rect的前提下, 尽可能按照指定的方式对齐。

  3. 否则, 将对齐对象在溢出限制 矩形内按起始位置对齐。

为此,overflow limit rect 是 对齐 对象的内缩距修正后的包含块 与其原始包含块的边界矩形, 并按以下方式扩展:

对于采用固定定位的框,且仅在使用默认溢出对齐时

由于具有随内容一起滚动的默认锚点框的固定定位框 在滚动视口之外时可以通过滚动进入视野, 因此在这种情况下,overflow limit rect 会扩展 至滚动容器的整个可滚动溢出区域。

对于非固定定位的绝对定位框

由于可滚动溢出区域可以扩展, 以确保滚动容器 中溢出的绝对定位框可见, 因此如果原始包含块由 滚动容器生成 (且不是其固定包含块), 则overflow limit rect 会在 可滚动轴上 沿任何不会延伸进入不可到达的可滚动溢出 区域的方向扩展至无限远。

(对于不满足上述条件的绝对定位对齐对象, 请参阅 § 4.4.1.3 所有其他对齐。)

注:这些规则约束框的位置,以 尽量减少溢出, 同时尽可能遵循指定的对齐方式, 并确保框的尺寸变化时行为保持连续。

需要更精确地定义“随 页面滚动”, 以涵盖所有包含在可滚动溢出区域内或锚定到该区域内的锚点。

4.4.1.3. 所有其他对齐

对于所有其他元素:

  1. 如果对齐 对象溢出其对齐容器, 则按照指定的方式对齐(unsafe)。

  2. 如果对齐 对象将溢出 其最近的祖先滚动容器的可滚动溢出区域, (从而延伸到“不可滚动”区域), 则通过将任何剩余的溢出偏向相反一侧, 限制其在该方向上的溢出。

实现“智能”默认行为 可能无法与现有 Web 内容兼容 (尽管我们希望能够兼容,并认为很有可能), 因此用户代理应将有关这一点的任何反馈提交给工作组。 尚未实现“智能”默认行为的用户代理 对于块 容器上的 align-content 必须表现为 safe, 而在其他情况下必须表现为 unsafe。

5. 内容分布:在盒子内部对齐其内容

内容分布 控制盒子内容在其内容框内的对齐。 它由内容分布属性 align-content 和 justify-content(及其 place-content 简写)指定。

示意图,显示元素内部内容的对齐受到影响。

5.1. justify-content 和 align-content 属性

名称: align-content
值: normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position>
初始值: normal
应用于: 块容器、多列容器、弹性容器和网格容器
继承性: 否
百分比: 不适用
计算值: 指定的关键字
规范顺序: 根据语法
动画类型: 离散
名称: justify-content
值: normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ]
初始值: normal
应用于: 多列容器、弹性容器和网格容器
继承性: 否
百分比: 不适用
计算值: 指定的关键字
规范顺序: 根据语法
动画类型: 离散

将盒子作为一个整体的内容(作为对齐主体)在盒子自身内部(作为对齐容器)进行对齐: 沿盒子的内联/行/主轴(对于 justify-content) 或盒子的块/列/交叉轴(对于 align-content)。 除 normal 之外的值在上面的 § 4 对齐关键字中定义。

对于所有布局模式,对齐主体和对齐容器都采用设置了 *-content 属性的盒子的书写模式。

5.1.1. 块容器(包括表格单元格)

对齐容器 块容器的内容框。
对齐主体 块的全部内容,作为一个单元。
align-content 轴 块轴。 如果指定了 <content-distribution>, 则改用其回退对齐。 如果未指定 <overflow-position>, 且块容器不是块轴滚动容器, 则对齐方式为 safe。
justify-content 轴 不适用于块容器,也对其没有影响。
normal 行为 除 normal 之外的所有值都会强制块容器建立一个独立的格式化上下文。

对于表格单元格,align-content: normal 的行为取决于 vertical-align 的计算值:top 使其行为像 start,bottom 使其行为像 end; 否则 middle 使其行为像 center, 所有其他值使其行为像 baseline。 [CSS2]

normal 在其他情况下行为像 start。

5.1.2. 多列容器

对齐容器 多列容器的内容框。
对齐主体 列框,列框之间插入的任何间距都添加到相关的列间隙中。
align-content 轴 块轴, 将列框(以及任何跨列元素)视为一个单元。 如果指定了 <content-distribution>,则改用其回退对齐。
justify-content 轴 内联轴。
normal 行为 normal 的行为与 stretch 类似; 两者均按照 [CSS-MULTICOL-1] 中的列大小规则进行定义。

对于具有非 auto column-width 的多列容器,除 normal 或 stretch 之外的 justify-content 值会导致列采用其指定的 column-width 而不是拉伸以填充容器。 然后根据 justify-content 指定的方式对齐列框。

5.1.3. 弹性容器

对齐 容器 Flex 容器的内容框。
对齐 主体 对于 justify-content, 为每条 Flex 行中的 Flex 项目。

对于 align-content, 为 Flex 行。 注意,这只对 多行 Flex 容器有效。

align-content 轴 交叉轴。
justify-content 轴 justify-content 属性沿 主轴应用, 但由于在主轴上的拉伸由 flex 控制, stretch 的行为与 flex-start 相同。
normal 行为 normal 的行为与 stretch 相同。

详情参见 [CSS-FLEXBOX-1]。

5.1.4. 网格容器

对齐容器 网格容器的内容框。
对齐主体 相应轴上的网格轨道, 轨道之间插入的任何间距 都会添加到相应的沟槽中, 并将折叠的沟槽 视为一次插入间距的机会。
align-content 轴 块轴, 对齐网格行。
justify-content 轴 内联轴, 对齐网格列。
normal 行为 normal 的行为与 stretch 类似。

有关详细信息,请参见 [CSS-GRID-1]。

5.2. 内容分布简写:place-content 属性

名称: place-content
值: <'align-content'> <'justify-content'>?
初始值: normal
应用于: 参见各属性
继承性: 否
百分比: 不适用
计算值: 见各属性
规范顺序: 根据语法
动画类型: 离散

此简写属性在一个声明中同时设置 align-content 和 justify-content 属性。 第一个值赋给 align-content。 第二个值赋给 justify-content; 如果省略,则从第一个值复制, 除非该值是 <baseline-position>,在这种情况下,它默认为 start。

5.3. 对齐溢出和滚动容器

当内容分布属性设置在具有溢出对齐对象的 滚动容器的可滚动轴上时, 它们会减少对不可到达的可滚动溢出区域的裁剪, 减少的程度恰好足以确保对齐对象能够滚动 到其按 start 对齐的位置。

例如, 如果一个可滚动的弹性容器设置为justify-content: flex-end (或justify-content: flex-start并用flex-flow: row-reverse), 它的流内内容会最初定位为主轴末端和容器末端对齐, 内容看起来会在主轴起始端溢出。 但用户可以向上滚动, 查看溢出的流内内容, 就如同设置了justify-content: flex-start一样。
问题:用合适的 SVG 替换此图像。

注:对齐对象不一定 与可滚动溢出区域相同: 溢出对齐对象的内容——例如脱离流的框——会扩大可滚动溢出区域,但不会扩大对齐对象。 因此,按 end 对齐的滚动 容器 最初可能不会一直滚动到底部, 而且如果定位内容比构成对齐 对象的流内内容 更深入不可到达的可滚动溢出区域, 则定位内容仍可能被裁剪。

溢出并不属于对齐对象的一部分, 即使对于滚动容器也是如此。

此图片也需要替换。

注意: 滚动条的存在可能会改变滚动容器的内容盒尺寸——因此也会改变对齐容器 和/或对齐对象的尺寸。

5.4. 基线内容对齐

参与行式布局上下文(共享对齐上下文)的盒子的内容可以相互进行基线对齐。 基线内容对齐有效地增加了盒子上的 内边距,以使其内容的对齐基线 与其基线共享组中其他基线对齐盒子的基线对齐。

注:未完全支持基线内容对齐的实现,在适用的格式化上下文中, 不得将 baseline 值解析为 有效值。 WPT 缺乏测试覆盖不能成为发布 有缺陷实现的借口。 <—​目前浏览器会解析它,但并未用它实现任何有用的功能。:( https://github.com/w3c/csswg-drafts/issues/13421 -->

基线 内容对齐仅在 align-content 轴 与框的块轴平行时 才适用(即不适用于“列”方向的弹性 容器); 否则使用回退 对齐。

参与基线内容对齐的框集合 取决于布局模型:

表格单元格:
一个(非替换)表格单元格, 如果其行内轴与表格自身的行内轴平行,且 其计算后的 align-content 为 first baseline(last baseline), 则在其最靠起始端(结束端)的行中 参与首次(末次)基线内容对齐。

注:不支持对共享同一列的单元格 进行基线 内容对齐; 不过,如果有足够的需求和实现者兴趣, 未来级别可能会添加此功能。

弹性项目:
一个非替换弹性项目 在其弹性行中 参与首次(末次)基线内容对齐, 如果其计算后的 align-content 为 first baseline/last baseline, 且其行内轴与主轴平行。
网格项目:
一个非替换网格项目 在其最靠起始端(结束端)的行或列中 (取决于哪一个与其行内 轴平行) 参与首次(末次)基线内容对齐, 前提是其计算后的 align-content 为 first baseline/last baseline。

此外, 要参与基线内容对齐, 还必须具有协调的自身对齐偏好, 以确保该框的相关边缘 与其基线共享组中的其他框对齐。 也就是说,当其基线对齐偏好为“first”(“last”)时, 该框的起始(结束)外边距边缘 必须预期与其包含块的对应边缘对齐, 且实际上也必须对齐。 否则,采用其回退对齐。

何时自身对齐偏好是协调的?

当满足以下条件时,框的起始外边距边缘 与其包含块的对应边缘对齐, 并且对于“first”基线对齐偏好, 它具有协调的自身对齐偏好, 在相关轴上:

当满足以下条件时,框的结束外边距边缘 与其包含块的对应边缘对齐, 并且对于“last”基线对齐偏好, 它具有协调的自身对齐偏好, 在相关轴上:

更多详情请参阅§ 9.3 按基线对齐框。 基线内容对齐可能会增大框的固有尺寸。

6. 自对齐:在父元素内对齐盒子

自对齐控制盒子在其包含块内的对齐方式。 它由自对齐属性 align-self 和 justify-self(以及它们的place-self 简写)指定。

示意图,显示元素在其包含块内的对齐受到影响。

6.1. 行内轴(或主轴)自对齐:justify-self 属性

名称: justify-self
取值: auto | <overflow-position>? [ normal | <self-position> | left | right ]
| stretch | <baseline-position>
初始值: auto
适用对象: 块级盒、绝对定位盒和网格项
是否继承: 否
百分比: 不适用
计算值: 指定的关键字
规范顺序: 按语法顺序
动画类型: 离散

将盒子(作为 对齐对象) 沿其包含块(作为 对齐容器) 的内联/行/主轴方向在 对齐容器内对齐: 盒子的外边缘在其 对齐容器 内 按其对齐值的描述进行对齐。 各取值含义如下:

auto

如果盒子没有父元素,或在确定绝对定位盒子的实际位置时, 其行为等同于 normal。 否则(包括在确定绝对定位盒子的 静态 位置时), 其行为等同于父盒的计算 justify-items 值 (不含任何 legacy 关键字)。

normal

表示该布局模式的“默认”对齐。 其行为取决于布局模式,如下所述。

<self-position> | left | right

按指定方式移动盒子的位置, 见 § 4 对齐关键字。

<overflow-position>

控制盒子溢出时的对齐方式, 见 § 4.4 溢出对齐:safe 与 unsafe 关键字及滚动安全限制。

stretch

当盒子的 计算 width/height (按轴的适用性) 为 auto, 且相应轴上的任一 margin 均非 auto 时, 将盒子的已用尺寸设为使其外部尺寸尽可能填满 对齐容器 所需的长度, 同时仍遵循 min-height/min-width/max-height/max-width 所施加的约束。

除非另有规定,此值一般回退为 flex-start, 若盒子在同一轴上还指定了 first baseline 或 last baseline 的 baseline content-alignment(分别对应), 则回退为 self-start 或 self-end。

注意: stretch 关键字可能会使元素收缩以适应其容器。

<baseline-position>

表示 基线自身对齐, 见 § 4.2 基线对齐:baseline 关键字与 first/last 修饰符、 § 6.4 基线自身对齐, 以及 § 9 基线对齐细则。

除 stretch 外, 当 width/height 为 auto 时, 将按 fit-content 处理。

注意: 由于 auto 外边距会实质性地调整外边距区域的大小, 因此其优先级高于 justify-self。

6.1.1. 块级盒子

justify-self 轴 通常是该块的包含块的 行内轴。 在确定静态位置包含块的行内轴 时,用于确定静态位置。
对齐 容器 该框的包含块, 但对于建立块格式化上下文的块级元素 且放置在浮动框旁边时, 对齐容器会减去浮动框所占据的空间, 并假定包含块的书写模式。
对齐 主体 该块的外边距框, 并假定该块的书写模式。
normal 行为 该框按照块布局的默认规则进行布局 (参见 CSS2.1§10.3)。
其他细节 justify-self 不为 normal 的块级框的自动尺寸 等同于 fit-content (而不是例如 stretch,后者是非替换块级 框的典型情况)。 此外, 就 CSS2.1 块级格式化 [CSS2] 而言, 第 10.3.3 节中关于“过度约束”计算的规则 将被忽略,转而采用此处指定的对齐方式, 因此不会调整外边距属性的使用值来修正 过度约束。

此属性不适用于浮动框。

匿名块框始终按照 normal 的方式表现。

这些规则的效果是,例如,一个自动确定尺寸的块级表格 可以在仍然具有两侧外边距的同时进行对齐。 如果表格的最大内容尺寸窄于其包含块, 则它会收缩包裹到该尺寸,并按照指定方式对齐。 如果表格的最大内容尺寸更宽,则它会填满其包含块, 而外边距会提供与包含块边缘之间的适当间距。

6.1.2. 绝对定位盒子

本节描述 justify-self 对绝对定位盒子外边距盒相对于其(绝对定位)包含块定位方式的影响。

justify-self 轴 该块的包含块的内联轴。
对齐容器 盒子的包含块, 但会被 inset 属性(top/right/bottom/left)修改, 并假定采用包含块的书写模式。 如果相关轴上的两个 inset 属性都为 auto, 则使用盒子的静态位置矩形 (即将两个 inset 都设置为盒子的静态位置),并假定静态位置包含块的书写模式。
对齐对象 盒子的外边距盒, 假定采用盒子的书写模式。
normal 行为 行为与 stretch 或 start 相同,具体取决于盒子类型。 参见 CSS Positioned Layout 3 § 4 绝对定位布局模型。
其它细节 在 CSS2.1 格式化方式下 [CSS2], 10.3.7 节关于“过度约束”计算的规则 将被忽略,以本规范描述的对齐为准, 已用的 inset 属性不会为了消除过度约束而调整。

除 stretch 或 normal 以外的值, 会使非替换绝对定位盒 在相关轴上用 fit-content 尺寸来计算 auto 尺寸。

注意,stretch 确实会使替换内容的绝对定位盒也像非替换盒一样填满其包含块。

注意: 如果只有一个 inset 属性为 auto, 那么 CSS2 第 10.3.7 节中的计算 会完全决定其尺寸和位置, justify-self 无效。 (如果两个都为 auto, 则盒子为静态定位,见上文, 可以在 静态位置矩形内对齐。)

6.1.3. 表格单元格

此属性不适用于表格单元格, 因为它们的位置和大小完全受表格布局的约束。

6.1.4. 弹性项目

此属性不适用于弹性项目, 因为在主轴上有多个项目。 有关拉伸,请参见 flex;有关主轴对齐,请参见 justify-content。 [CSS-FLEXBOX-1]

6.1.5. 网格项目

justify-self 轴 网格的内联轴。
对齐容器 网格项的网格区域, 假定采用网格容器的书写模式。
对齐对象 网格项的外边距盒, 假定采用网格项的书写模式。
normal 行为 尺寸为 stretch(典型非替换元素) 或 start(典型替换元素); 见 网格项尺寸,出处 [CSS-GRID-1]。 得到的盒子随后会进行起始边对齐。

有关详细信息,请参见 [CSS-GRID-1]。

6.2. 块轴(或交叉轴)自对齐:align-self 属性

名称: align-self(自身对齐)
取值: auto | <overflow-position>? [ normal | <self-position> ]
| stretch | <baseline-position>
初始值: auto
适用对象: 弹性(flex)项、网格项和绝对定位盒子
是否继承: 否
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法顺序
动画类型: 离散型

将盒子(作为 对齐对象) 沿其包含块(作为 对齐容器) 的块轴/列轴/交叉轴在 对齐容器内对齐: 盒子的外边缘将在其 对齐容器 内 依据其对齐值描述排列。 各取值含义如下:

auto

如果盒子没有父元素,或在确定绝对定位盒子的实际位置时,表现为 normal。 其它情况下(包括确定绝对定位盒子的静态位置时),表现为父元素的计算 align-items 值 (不含任何 legacy 关键字)。

normal

表示该布局模式的“默认”对齐,具体见下文。

<self-position>

按指定方式调整盒子的位置,详见§ 4 对齐关键字。

<overflow-position>

控制盒子溢出时的对齐方式,详见§ 4.4 溢出对齐:safe 与 unsafe 关键字及滚动安全限制。

stretch

其定义同justify-self,详见§ 6.1 内联轴(或主轴)自身对齐:justify-self 属性。

<baseline-position>

表示基线自身对齐, 具体见§ 4.2 基线对齐:baseline 关键字与 first/last 修饰符、 § 6.4 基线自身对齐, 以及§ 9 基线对齐细则。

注意: auto 外边距会实质性地调整外边距区域的大小, 因此其优先级高于 align-self。

6.2.1. 块级盒子

align-self 属性不适用于块级盒子 (包括浮动元素), 因为在块轴上有多个项目。

6.2.2. 绝对定位盒子

本节描述 align-self 对绝对定位框的外边距框 如何相对于其(绝对定位)包含块进行定位的影响。

align-self 轴 通常是该框的包含块的 块 轴。 在确定静态位置包含块的块轴 时,用于确定静态位置。
对齐 容器 该框的包含块, 并由内嵌属性 (top/right/bottom/left)修改, 并假定包含块的书写模式。 如果相关轴上的两个内嵌属性都是 auto, 则使用该框的静态位置矩形 (即,将两个内嵌值都设置为该框的静态位置) 并假定静态位置包含块的书写模式。
对齐 主体 该框的外边距框, 并假定该框的书写模式。
normal 行为 根据框的类型,其行为与 stretch 或 start 相同, 具体取决于框的类型。 参见 CSS 定位布局 3 § 4 绝对定位布局模型。
其他细节 就 CSS2.1 格式化 [CSS2]而言, 第 10.6.4 节中“过度约束”计算的规则 会被忽略,而采用此处指定的对齐方式, 因此内嵌属性的使用值不会被调整以修正 过度约束。

除 stretch 或 normal 之外的值 会使非替换 绝对定位框 在受影响的轴上计算 auto 尺寸时使用适应内容尺寸 。

请注意,stretch 确实会使替换的 绝对定位框 填满其包含块, 就像非替换框一样。

注: 如果只有一个内嵌属性是 auto, 则 CSS2 第 10.6.4 节中的计算 会完全确定其尺寸和位置, 而 align-self 不起作用。 (如果两者都是 auto, 则该框是静态定位的, 参见上文, 并且可以在静态位置矩形内对齐。)

6.2.3. 表格单元格

此属性不适用于表格单元格, 因为它们的位置和大小完全受表格布局的约束。

6.2.4. 弹性项目

align-self 轴 弹性容器的交叉轴。
对齐容器 弹性项目所在的弹性行, 假设弹性容器的书写模式。
对齐主体 弹性项目的外边距盒, 假设弹性项目的书写模式。
normal 行为 行为类似于 stretch。

有关详细信息,请参见 [CSS-FLEXBOX-1]。

6.2.5. 网格项目

align-self 轴 网格的块轴。
对齐容器 网格项目的网格区域, 假设网格容器的书写模式。
对齐主体 网格项目的外边距盒, 假设网格项目的书写模式。
normal 行为 尺寸为 stretch(典型非替换元素) 或 start(典型替换元素); 详见网格项尺寸,出处 [CSS-GRID-1]。 生成的盒子随后会进行起始边对齐。

有关详细信息,请参见 [CSS-GRID-1]。

6.3. 自对齐简写:place-self 属性

名称: place-self(自身放置)
取值: <'align-self'> <'justify-self'>?
初始值: auto
适用对象: 参见各属性
是否继承: 否
百分比: 不适用
计算值: 参见各属性
规范顺序: 按语法顺序
动画类型: 离散型

此简写属性用于同时设置 align-self 和 justify-self 属性, 可在一条声明中同时指定。 第一个值分配给 align-self。 第二个值分配给 justify-self; 如未填写,则从第一个值复制。

6.4. 基线自对齐

参与行式布局上下文(共享对齐上下文)的盒子 可以相互进行基线对齐。基线自对齐有效地增加了盒子的 外边距,以使其对齐基线 与其基线共享组中的其他基线对齐盒子的基线对齐。

参与基线自对齐的盒子集合取决于布局模型:

弹性项目:
如果弹性项目的计算 align-self 为 first baseline/last baseline,则它参与其弹性行中的 第一/最后基线自对齐。 有关详细信息,请参见 [CSS-FLEXBOX-1]。
网格项目:
如果网格项目的 align-self 或 justify-self 属性(分别) 计算为 first baseline/last baseline,则它参与其最开始/最末尾行或列中的 第一/最后基线自对齐。

有关确切详细信息,请参见 § 9.3 按基线对齐盒子。基线自对齐可以增加盒子的固有尺寸贡献。

6.5. 对具有静态位置内边距的绝对定位盒子的大小调整的影响

对于行内轴方向的两个偏移量均为 auto 的绝对定位框, 用于计算行内尺寸的可用空间 也会受到对齐方式的影响。

注意: 在 [CSS2] 中,可用空间取决于静态位置包含块的 direction 属性。 (参见 CSS2§10.3.7 和 CSS2§10.3.8。) 从根本上说,这些规则将其中一个 auto 内边距 (默认为起始边缘内边距) 设置为静态位置矩形的相应边缘,另一个设置为包含块的相应边缘(即,将内边距设置为零)。 正如自对齐属性替换了包含块的direction 查找以进行放置一样, 它们也替换了此查找以进行大小调整, 如此处指定。

因此, 在解释 CSS2§10.3.7 和 CSS2§10.3.8 中的规则时, 凡是引用 静态位置包含块的 direction 属性的地方, 都改为引用 align-self 或 justify-self 属性的值 (以定义为应用于相关轴的那个为准), 将与左侧等效的对齐视为针对 ltr 所定义的对齐, 并将与右侧等效的对齐视为针对 rtl 所定义的对齐。 将 normal 视为 start, 并将任何 分布式对齐值视为其 回退对齐。

对于center对齐, 盒子的可用空间 是 静态位置矩形 中心到 包含块 最近边缘之间距离的两倍(在相关轴上)。

起始对齐将大小调整到静态位置矩形的起始边缘与包含块的结束边缘之间的空间。
    结束对齐将大小调整到静态位置矩形的结束边缘与包含块的起始边缘之间的空间。
    居中对齐将大小调整到静态位置矩形的两个边缘之间的空间。
与 [CSS2] 中指定的始终在 行内起始 静态位置和行内结束 包含块边缘之间的可用空间内调整大小不同, 具有 auto 内边距的绝对定位元素 将参照 最适合其指定自对齐的静态位置矩形的边缘进行大小调整。
例如, 当盒子的包含块的 direction 为 ltr 且其自身的 justify-self 为 end 时, 应用 direction: rtl 的规则; 当 direction 为 rtl 且 justify-content 为 space-between 时, 应用 direction: rtl 的规则; 等等。 对于 center(或其等效值)的情况, 将两侧都设置为匹配静态位置。 然后将绝对定位盒子调整到 生成的空间(向下取整为零)。

注意: align-self/justify-self 属性 还可以修改大小调整的其他方面: 例如,justify-self: stretch 将替换 到可用空间中的“收缩以适应”(fit-content)大小调整为拉伸以适应大小调整(消耗所有可用空间)。 这与此处的可用空间调整是独立的效果。

注意: 这仅影响如何计算可用空间 以调整绝对定位盒子的大小; 其对齐方式如前几节所述。

7. 默认对齐

align-items 和 justify-items 属性 (及其 place-items 简写) 设置元素子盒子的默认 align-self 和 justify-self 行为。

示意图,显示元素内网格项目的对齐方式受到影响。

7.1. 行内轴(或主轴)默认对齐:justify-items 属性

名称: justify-items
值: normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ] | legacy | legacy && [ left | right | center ]
初始值: legacy
适用于: 所有元素
继承性: no
百分比: 不适用
计算值: 指定的关键字,legacy 除外(见正文)
规范顺序: 根据语法
动画类型: 离散

此属性为参与此盒子格式化上下文的所有子盒子(包括匿名盒子)指定默认的 justify-self。 值具有以下含义:

legacy
此关键字使值有效地继承到后代。

如果 legacy 关键字单独出现 (没有附带的 left、right 或 center 关键字): 如果 justify-items 的继承值 包含 legacy 关键字, 则此值计算为继承值; 否则计算为 normal。

当 justify-self:auto 引用 justify-items 的值时, 它仅引用对齐关键字,而不引用 legacy 关键字。 它的存在是为了实现 HTML 的 <center> 元素和 align 属性的旧版对齐行为。

其他值没有特殊处理,仅由 justify-self 引用。

7.2. 块轴(或交叉轴)默认对齐:align-items 属性

名称: align-items
值: normal | stretch | <baseline-position> | [ <overflow-position>? <self-position> ]
初始值: normal
适用于: 所有元素
继承性: no
百分比: 不适用
计算值: 指定的关键字
规范顺序: 根据语法
动画类型: 离散

此属性为参与此盒子格式化上下文的所有子盒子(包括匿名盒子)指定默认的 align-self。

值没有特殊处理,仅由 align-self 引用。

7.3. 默认对齐简写:place-items 属性

名称: place-items
值: <'align-items'> <'justify-items'>?
初始值: 参见各属性
适用于: 所有元素
继承性: no
百分比: 不适用
计算值: 参见各属性
规范顺序: 根据语法
动画类型: 离散

此简写属性在单个声明中同时设置 align-items 和 justify-items 属性。 第一个值赋给 align-items。 第二个值赋给 justify-items; 如果省略,则从第一个值复制。

8. 盒子之间的间隙

本节已移至 CSS 间隙第 1 级 § 2 框之间的间隙。

9. 基线对齐详情

基线共享组中的框使用其对齐 基线彼此对齐。 例如,在水平书写模式中, 对同一行中的表格单元格指定 align-content: baseline 将对齐其首个 格式化行的基线。 本节准确定义基线对齐的执行方式, 并考虑国际化现代 CSS 中存在的众多基线和书写 模式 。

基线集是 与公共基线表关联的一组基线(字母基线、中心基线等)。 通常,排版传统只会使用其中一种, 但不同的书写系统使用不同的基线, 混合书写系统可能会导致在单行内使用多种基线。 有关基线和书写模式的更多信息,请参阅 CSS 书写模式 3 § 4.1 基线简介。

9.1. 确定盒子的基线

每个框, 对于给定的轴, 都可能具有 一个首基线集 (以及一个末基线集), 它在名义上对应于框内 第一/最后一行文本的基线集。 对齐 基线, 即用于在其对齐上下文中对齐该框的基线, 是其基线集中的一个基线, 通常是与共享 对齐上下文相关联的主导基线。 (参见 dominant-baseline 和 alignment-baseline 属性,见 [CSS-INLINE-3]。)

框的首个和最后一个基线集 会根据布局模型 按如下方式分别确定:

行框
行框的首次/末次基线集 根据其根行内 框的主导基线 和字体设置生成。
块容器
块容器的首次/末次基线集 取自块容器中的第一个/最后一个流内行框, 或块容器中提供首次/末次基线集的 第一个/最后一个流内块级子元素, 以最先/最后出现的为准。 如果不存在这样的行框或子元素, 则该块容器没有基线集。

但是,出于历史兼容性原因, 如果其 baseline-source 为 auto(初始 值), 则作为块轴滚动容器的 块级或行内级块 容器 始终具有末次 基线集, 其中所有基线都对应于其块结束 外边距边缘。

多列容器
多列容器的首次基线集 是具有最高(最靠近块起始端)基线的 列或跨列元素的首次基线集, 该基线对应于多列容器的对齐 基线。 如果不存在这样的行框或子元素, 则该多列容器没有首次基线集。

末次基线集的确定方式 类似, 但使用末次基线集 和最低(最靠近块结束端)的基线。

表格
表格框的首次/末次基线集 是其第一行/最后一行的首次/末次基线集 (在对表格行 组框进行任何重新排序之后)。

查找行内块的首次/末次基线集时, 必须跳过由表格框提供的任何基线。 (这一特殊行为是 [CSS2] 遗留的行为。)

表格行
表格行框的首次基线集 取自以下第一个可用的选项:
  1. 如果该行中的任何单元格沿表格的行内轴参与首次基线对齐, 则在完成对齐后, 根据它们共享的对齐基线 和该行的第一个可用字体 生成一个基线集。

  2. 否则,如果该行中的任何单元格沿表格的行内轴参与末次基线对齐, 则根据该对齐基线生成。

  3. 否则,如果该行不为空, 则根据该行所有单元格中最低和最高的内容边缘 合成。 请参阅CSS 2 § 17.5.3 表格高度算法。

  4. 否则, 使用表格 行框自身的块起始内容 边缘 作为对齐基线。

为此, 如果跨越多行的表格单元格 不是从该行开始跨越的,则忽略该单元格; 但对于步骤 2, 如果其跨越范围不在该行结束,则忽略该单元格。

末次基线的处理方式与此类似 (将“首次”与“末次”、“起始”与“结束”互换)。

对于 first baseline/last baseline, 跨行单元格仅参与其所跨越的第一行/最后一行。

弹性容器
请参阅 [CSS-FLEXBOX-1] 中的弹性基线。
网格容器
请参阅 [CSS-GRID-1] 中的网格基线。

要根据单条基线为框生成基线, 请使用该框的字体设置和第一个 可用字体提供的基线表, 并将该基线集与给定的单条基线对齐。

如果参与基线对齐的框 没有基线集, 则根据其参与的格式化上下文的规则, 合成其对齐 基线。 要根据一个矩形(或两条平行线) 合成基线, 则从行下 线合成字母基线, 并通过计算两条边缘或线的位置平均值来合成中央基线。 有关合成其他基线的规则,请参阅CSS 行内布局第 3 级 § A 合成对齐度量。

注:用于根据框合成基线的边缘 取决于其格式化上下文: 行内级框根据其外边距边缘合成 [CSS-INLINE-3], 表格单元格根据其内容边缘合成 [CSS2], 网格项目和弹性项目根据其边框边缘合成 [CSS-GRID-1] [CSS-FLEXBOX-1]。

通常,使用被对齐的框、形状或其他对象的书写模式 来确定用于合成的行下和 行上边缘。 但是,当该书写模式的 块流方向与 对齐上下文的轴平行时, 必须假定采用轴兼容的书写模式:

为了确定框的基线, 必须将该框及其所有作为块轴滚动容器的流内后代 视为已滚动至其初始滚动位置。 此外, 如果滚动容器的首次/末次基线位置 位于其边框边缘之外, 则该基线的位置会被限制在边框边缘处。

9.2. 基线对齐分组

基线共享 组 由共同参与基线对齐的框组成。 只有同时满足以下两个条件才有可能:

注:参与基线 内容对齐的框和 参与基线自身对齐的框 可以属于同一个基线共享组, 因而可以相互对齐。 这两种方法的区别 在于执行对齐时额外空间插入的位置 (框自身边框的内部或外部)。

当多个框满足以下条件时,它们就沿特定轴共享一个由特定框建立的对齐 上下文:

注:从概念上讲, 行框中的行内级框也共享一个自身对齐上下文, 并参与一个基线共享组; 但它们仅响应 vertical-align 属性进行基线对齐, 而不响应本模块中定义的任何属性。 请参阅 [CSS-INLINE-3]。

如果一个框跨越多个共享对齐上下文, 则它沿该轴在最靠起始端/结束端的共享对齐上下文中 参与首次/末次基线对齐。 例如,跨越三行的表格单元格 与其跨越的第一行中的表格单元格一起参与首次基线对齐, 或者与其跨越的最后一行中的表格单元格一起参与末次基线对齐。

如果基线共享组中两个框的基线对齐偏好满足以下条件之一, 则它们是兼容的:

9.3. 按基线对齐盒子

给定一组均属于同一个基线共享组的对齐 对象及其基线, 这些对齐对象按以下方式进行基线对齐:

  1. 根据该组对齐上下文的第一个可用字体 生成基线共享组的基线表, 并通过对齐中央基线,将该基线表的镜像也叠加其上。 这些就是对齐对象将要对齐到的基线“网格”。

  2. 根据每个对齐对象指定的对齐基线, 将其与该组的基线表 或其镜像对齐,具体取决于哪一个与对齐 对象的行方向匹配。 除非另有规定(例如通过 alignment-baseline 属性), 否则对齐基线是对齐上下文的主导基线。

  3. 根据已对齐的基线共享组的回退对齐, 将其定位在对齐 容器内。 基线共享组的回退对齐 是其各项目的回退对齐 解析为物理方向后的结果。

  4. 对于首次/末次基线内容对齐, 则在对齐容器的起始/结束内容边缘 与对齐 对象的边缘之间添加最少的必要额外空间, 使对齐上下文中的所有对齐 容器的起始/结束外边距边缘对齐, 同时保持基线共享组内的基线对齐。

附录 A:静态位置术语

当绝对定位盒子某一轴上的两个inset 属性都为 auto 时, CSS2 会使用其静态位置 来确定其尺寸和位置。 详见 CSS2.1§10.3.7。 盒子对齐属性 会修改这些计算, 就像它们会影响其他布局模式下的尺寸和定位计算一样。 这些修改涉及一个 静态位置矩形, 其各边表示该盒子相对于其包含块的静态位置。

静态位置矩形及其对应的静态位置 由其“假设盒子”的布局模型定义:

块布局
块级框的静态位置 在 [CSS2] 第 10 章中定义。 静态位置矩形是一个厚度为零的矩形, 横跨该框的静态位置包含块的 行内轴两侧 (参见 CSS2§10.3.7); 并定位在其块起始方向的静态 位置 (参见 CSS2§10.6.4)。
行内布局
行内级框的静态位置 在 [CSS2] 第 10 章中定义。 静态位置矩形是一个厚度为零的矩形, 横跨原本会包含其“假设框”的 行框的 行上/行下 两侧 (参见 CSS2§10.3.7); 并定位在其行内起始方向的静态 位置。
弹性布局
弹性容器的子元素的静态位置矩形 对应于弹性 容器的内容边缘。 请参阅CSS 弹性框布局第 1 级 § 4.1 绝对定位的弹性子元素。
网格布局
默认情况下,网格容器的子元素的静态位置矩形 对应于网格 容器的内容边缘。 但是,如果该网格容器同时建立 该框的实际包含块, 则改由网格放置属性指定的网格区域 建立其静态位置矩形。 请参阅 [CSS-GRID-1] 中的网格容器 子元素的静态位置。

10. 变更

自 2026 年 1 月 30 日的工作 草案以来的变更包括:

另见之前的更改。

11. 隐私注意事项

作为一个简单的布局规范, 这没有引入新的隐私注意事项。

12. 安全注意事项

作为一个简单的布局规范, 这没有引入新的安全注意事项。

致谢

特别感谢 David Baron、Javier Fernandez、Markus Mielke、Alex Mogilevsky 以及 CSSWG 2008 年 3 月 F2F 对齐讨论的参与者 对本文所述对齐模型的贡献, 以及 Melanie Richards 对各种对齐关键字的插图。

一致性

文档约定

一致性要求通过描述性断言和 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"> 与其他规范性文本分开, 如下所示: 用户代理(UA)必须提供可访问的替代方案。

一致性类别

本规范的一致性 针对三个一致性类别进行定义:

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

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

如果渲染器除了按照相应规范定义解释样式表外, 还通过正确解析并相应地渲染文档来支持本规范定义的所有功能, 则该渲染器符合本规范。但是,由于设备限制导致 UA 无法正确渲染文档, 并不会使 UA 不符合规范。(例如,不要求 UA 在单色监视器上渲染颜色。)

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

部分实现

为了使作者能够利用向前兼容的解析规则来分配回退值, CSS 渲染器必须将任何它们没有可用支持级别的 @规则、属性、属性值、关键字和其他语法结构视为无效(并酌情忽略)。 特别是,用户代理不得在单个多值属性声明中选择性地忽略不受支持的组件值并接受受支持的值: 如果任何值被视为无效(不受支持的值必须如此),CSS 要求忽略整个声明。

不稳定和专有功能的实现

为避免与未来稳定的 CSS 功能冲突, CSS 工作组(CSSWG)建议在实现不稳定功能和 CSS 专有扩展时遵循最佳实践。

非实验性实现

一旦规范达到候选推荐(Candidate Recommendation)阶段, 就可以进行非实验性实现,实现者应发布任何他们可以证明已根据规范正确实现的 CR 级别功能的无前缀实现。

为了建立和维护 CSS 在不同实现之间的互操作性, CSS 工作组要求非实验性 CSS 渲染器在发布任何 CSS 功能的无前缀实现之前, 向 W3C 提交一份实现报告(以及必要时,该实现报告中使用的测试用例)。 提交给 W3C 的测试用例将由 CSS 工作组审查和更正。

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

索引

本规范定义的术语

引用定义的术语

参考文献

规范性引用

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr.. CSS 框对齐模块 第 3 级。2026 年 1 月 30 日。工作草案。URL:https://www.w3.org/TR/css-align-3/
[CSS-ANCHOR-POSITION-1]
Tab Atkins Jr.; Elika Etemad; Ian Kilpatrick. CSS 锚点定位模块第 1 级。2026 年 3 月 27 日。工作草案。URL:https://www.w3.org/TR/css-anchor-position-1/
[CSS-BOX-4]
Elika Etemad. CSS 框模型模块第 4 级。2024 年 8 月 4 日。工作草案。URL:https://www.w3.org/TR/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS 层叠与继承第 5 级。2022 年 1 月 13 日。候选推荐标准。URL:https://www.w3.org/TR/css-cascade-5/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS 显示模块第 4 级。2025 年 11 月 6 日。工作草案。URL:https://www.w3.org/TR/css-display-4/
[CSS-FLEXBOX-1]
Elika Etemad; Tab Atkins Jr.; Rossen Atanassov. CSS 弹性框布局模块第 1 级。2025 年 10 月 14 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-flexbox-1/
[CSS-FONTS-4]
Chris Lilley. CSS 字体模块第 4 级。2026 年 9 月 13 日。工作草案。URL:https://www.w3.org/TR/css-fonts-4/
[CSS-GAPS-1]
Kevin Babbitt. CSS 间隙模块第 1 级。2026 年 6 月 24 日。工作草案。URL:https://www.w3.org/TR/css-gaps-1/
[CSS-GRID-1]
Tab Atkins Jr.; 等. CSS 网格布局模块第 1 级。2025 年 3 月 26 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-grid-1/
[CSS-GRID-2]
Tab Atkins Jr.; 等. CSS 网格布局模块第 2 级。2025 年 3 月 26 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-grid-2/
[CSS-INLINE-3]
Elika Etemad. CSS 行内布局模块第 3 级。2024 年 12 月 18 日。工作草案。URL:https://www.w3.org/TR/css-inline-3/
[CSS-LOGICAL-1]
Elika Etemad; Rossen Atanassov. CSS 逻辑属性 与值模块第 1 级。2025 年 12 月 4 日。工作草案。URL:https://www.w3.org/TR/css-logical-1/
[CSS-MULTICOL-1]
Florian Rivoal; Rachel Andrew. CSS 多列布局 模块第 1 级。2024 年 5 月 16 日。候选推荐标准。URL:https://www.w3.org/TR/css-multicol-1/
[CSS-MULTICOL-2]
Florian Rivoal; Rachel Andrew. CSS 多列布局 模块第 2 级。2024 年 12 月 19 日。首份公开工作草案。URL:https://www.w3.org/TR/css-multicol-2/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS 溢出模块 第 3 级。2025 年 10 月 7 日。工作草案。URL:https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS 定位布局 模块第 3 级。2025 年 10 月 7 日。工作草案。URL:https://www.w3.org/TR/css-position-3/
[CSS-POSITION-4]
Elika Etemad; Tab Atkins Jr.. CSS 定位布局 模块第 4 级。2025 年 10 月 7 日。工作草案。URL:https://www.w3.org/TR/css-position-4/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS 框尺寸模块 第 3 级。2026 年 9 月 4 日。工作草案。URL:https://www.w3.org/TR/css-sizing-3/
[CSS-SIZING-4]
Tab Atkins Jr.; Elika Etemad; Jen Simmons. CSS 框 尺寸模块第 4 级。2026 年 9 月 4 日。工作草案。URL:https://www.w3.org/TR/css-sizing-4/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal. CSS 文本模块 第 3 级。2026 年 8 月 14 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-text-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位 模块第 3 级。2024 年 3 月 22 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 值与单位 模块第 4 级。2024 年 3 月 12 日。工作草案。URL:https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS 书写模式第 3 级。2019 年 12 月 10 日。推荐标准。URL:https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS 书写模式第 4 级。2019 年 7 月 30 日。候选推荐标准。URL:https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; 等. 层叠样式表第 2 级修订版 1(CSS 2.1)规范。2011 年 6 月 7 日。推荐标准。URL:https://www.w3.org/TR/CSS2/
[ECMA-426]
源映射格式规范。编辑草案。URL:https://tc39.es/ecma426/
[RFC2119]
S. Bradner. RFC 中用于 表示要求级别的关键词。1997 年 3 月。当前最佳实践。URL:https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-3]
Tantek Çelik; 等. 选择器第 3 级。2018 年 11 月 6 日。推荐标准。URL:https://www.w3.org/TR/selectors-3/

信息性引用

[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS 显示模块第 3 级。2026 年 6 月 5 日。候选推荐标准草案。URL:https://www.w3.org/TR/css-display-3/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS 对象模型 (CSSOM)。2021 年 8 月 26 日。工作草案。URL:https://www.w3.org/TR/cssom-1/

属性索引

名称 值 初始值 适用于 继承 百分比 动画类型 规范顺序 计算值
align-content normal | <baseline-position> | <content-distribution> | <overflow-position>? <content-position> normal 块容器、多列容器、弹性容器和网格容器 否 不适用 离散 按照语法 指定的关键字
align-items normal | stretch | <baseline-position> | <overflow-position>? <self-position> normal 所有元素 否 不适用 离散 按照语法 指定的关键字
align-self auto | <overflow-position>? [ normal | <self-position> ]| stretch | <baseline-position> auto 弹性项目、网格项目和绝对定位框 否 不适用 离散 按照语法 指定的关键字
justify-content normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ] normal 多列容器、弹性容器和网格容器 否 不适用 离散 按照语法 指定的关键字
justify-items normal | stretch | <baseline-position> | <overflow-position>? [ <self-position> | left | right ] | legacy | legacy && [ left | right | center ] legacy 所有元素 否 不适用 离散 按照语法 指定的关键字,legacy 除外(参见正文)
justify-self auto | <overflow-position>? [ normal | <self-position> | left | right ] | stretch | <baseline-position> auto 块级框、绝对定位框和网格项目 否 不适用 离散 按照语法 指定的关键字
place-content <'align-content'> <'justify-content'>? normal 参见各个属性 否 不适用 离散 按照语法 参见各个属性
place-items <'align-items'> <'justify-items'>? 参见各个属性 所有元素 否 不适用 离散 按照语法 参见各个属性
place-self <'align-self'> <'justify-self'>? auto 参见各个属性 否 不适用 离散 按照语法 参见各个属性

问题索引

使正交流中“start”和“end”的双轴性质更易于理解。 ↵
在此处添加示例图片。 ↵
更精确地定义“随页面滚动”, 以涵盖所有包含在可滚动溢出区域内或锚定到该区域内的锚点。↵
实现“智能”默认行为可能无法与现有 Web 内容兼容 (尽管我们希望能够兼容,并认为很有可能), 因此用户代理应将有关这一点的任何反馈提交给工作组。 尚未实现“智能”默认行为的用户代理 对于align-content 在块容器上必须表现为 safe, 而在其他情况下必须表现为 unsafe。↵
同时替换此图片。↵