CSS定位布局模块第3级

W3C 工作草案

更多关于此文档的信息
此版本:
https://www.w3.org/TR/2025/WD-css-position-3-20251007/
最新发布版本:
https://www.w3.org/TR/css-position-3/
编辑草案:
https://drafts.csswg.org/css-position-3/
历史记录:
https://www.w3.org/standards/history/css-position-3/
反馈:
CSSWG问题存储库
规范中的内联问题
在Wiki中
编辑:
Elika J. Etemad / fantasai (Apple)
Tab Atkins Jr. (Google)
前编辑:
(Microsoft)
(Microsoft)
建议编辑此规范:
GitHub编辑器

摘要

此模块定义了基于坐标的定位和偏移方案,涵盖了CSS相对定位粘性定位绝对定位固定定位

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

文档状态

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

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

这是一个草案文件, 可能随时被更新、替换 或被其他文件废止。 不应将本文件作为正式成果引用,仅适合作为进展中的工作参考。

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

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

本文件由遵循 W3C 专利政策的团队制作。 W3C 维护着一个 公开的专利披露列表 ,列出了与本团队交付成果相关的专利披露; 该页面还包含专利披露的说明。 任何个人如确知某专利且认为该专利包含必要声明 ,则必须按照 W3C 专利政策第6节 进行信息披露。

1. 引言

本节内容不具规范性。

CSS布局算法默认情况下,会相互调整盒子的大小和位置,以确保内容不会重叠。

本规范定义了在需要时,打破这些假设的几种方法,将元素移动到其他内容上方,使其重叠:

这些定位方案,由position属性和内边距属性控制,虽然功能强大,但很容易被误用。适当使用可以实现很多有趣且实用的布局,而不依赖标准的布局规则;如果使用不当,则可能导致页面内容混乱且无法使用。

1.1. 模块交互

本模块替代并扩展了定位方案功能,定义于[CSS2]中的以下章节:

它还取代并废除了 [CSS-LOGICAL-1] 中的 inset* 属性定义(CSS 逻辑属性 1 § 4.3 流相对偏移:inset-block-start、inset-block-end、inset-inline-start、inset-inline-end 属性以及 inset-block、inset-inline 和 inset 简写)。

1.2. 值定义

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

除各属性定义中列出的特定值外,本规范中定义的所有属性还接受CSS-wide 关键词作为属性值。为了提高可读性,未在每个定义中显式重复这些关键词。

2. 选择定位方案:position 属性

名称: position
值: static | relative | absolute | sticky | fixed
初始值: static
适用于: 所有元素,除 table-column-group 和 table-column
继承:
百分比: N/A
计算值: 指定的关键字
规范顺序: 依照语法
动画类型: 离散

position 属性决定使用哪种定位方案来计算盒子的定位。 除static外的值使盒子成为定位的盒子, 并为其后代建立绝对定位包含块。 这些值具有以下含义:

static
盒子不是定位的盒子, 按照其父级格式化上下文的规则布局。 内边距属性不适用。
relative
盒子的布局类似于static, 然后相对于结果位置进行偏移。 这种偏移仅是视觉效果, 除非另有规定, 否则不会影响其他非后代盒子的大小或位置, 仅在增加其祖先的可滚动溢出区域的情况下例外。 这种定位方案称为相对定位
sticky
relative相同, 但其偏移相对于最近的祖先滚动容器滚动视口(由内边距属性修正), 自动进行调整,以便在用户滚动时尽量保持盒子在其包含块内可见。 这种定位方案称为粘性定位
absolute
盒子被脱离文档流, 因此不会影响其兄弟和祖先的大小或位置, 并且不参与其父级的格式化上下文

相反,盒子的定位和大小仅参考 其绝对定位包含块, 由盒子的内边距属性修正, 请参见§ 4 绝对定位布局模型。 它可以与流内内容或其他绝对定位的元素重叠, 并包含在生成其包含块的盒子的可滚动溢出区域中。 这种定位方案称为绝对定位

fixed
absolute相同, 不同的是,盒子的定位和大小相对于固定定位包含块(通常是视口连续媒体中,或者是页面区域分页媒体中)。 盒子的定位相对于这个参考矩形是固定的: 当附着到视口时,文档滚动时不会移动, 当附着到页面区域时,在文档分页时会在每一页上复制。 这种定位方案称为固定定位,并被视为绝对定位的一个子集。
作者可能希望在与媒体相关的方式中指定fixed。 例如,作者可能希望盒子在屏幕上始终停留在视口顶部, 但在每个打印页面上不需要停留在顶部。 可以使用'@media'规则分隔这两个规范,如下所示:
@media screen {
    h1#first { position: fixed }
}
@media print {
    h1#first { position: static }
}

position 属性值为 absolutefixed 时, 会使该盒子块化, 令 float 的计算值变为 none, 并强制该盒子建立独立格式化上下文

2.1. 定位盒的包含块

staticrelativesticky 盒子包含块由其格式化上下文定义。 对于 fixedabsolute 盒子,其定义如下:

如果盒子具有 position: absolute
包含块由最近的建立了绝对定位包含块的祖先盒子建立,方式如下:
如果祖先不是行内盒子
包含块由祖先的内边距边缘形成, 除非另有规定 (例如,参见 CSS 网格布局 1 § 9.1 以网格容器作为包含块)。
如果祖先是行内盒子, 使用该盒子的书写模式
包含块通过以下方式形成:从祖先的第一个盒片段起始最远内容边缘(双轴)和祖先在每个轴上的结束最远内容边缘结束最远盒片段形成一个矩形。 如果同一行上有多个片段 (例如,由于 bidi 重排), 则将起始最远的片段 作为第一个片段。

当盒子跨越多行分片时, 形成一个有用的包含块是什么? [问题 #8284]

注意:由分片的行内盒子形成的包含块[CSS2] 中未定义。

如果没有祖先建立, 则绝对定位包含块初始包含块

注意:可能导致盒子建立绝对定位包含块的属性包括 positiontransformwill-changecontain……

如果盒子具有 position: fixed
包含块由最近的建立了固定定位包含块的祖先盒子建立, 包含块的边界确定方式与绝对定位包含块相同。

注意:能够导致盒子建立 固定定位包含块 的属性包括 transformwill-changecontain等。

如果没有祖先建立固定定位包含块, 该盒子的 固定定位包含块 就是 初始固定包含块

注意:因此, fixed定位盒子 超出 布局视口页面区域 的部分无法滚动到,也无法打印出来。

初始固定包含块初始包含块包含块链 中的父级。

在没有任何定位的情况下,以下文档中的包含块(C.B.):

<!DOCTYPE html>
<html>
    <head>
        <title>包含块的示例</title>
    </head>
    <body id="body">
        <div id="div1">
        <p id="p1">这是第一段中的文本...</p>
        <p id="p2">这是文本<em id="em1"><strong id="strong1">第二段</strong>中的</em></p>
        </div>
    </body>
</html>

如下所建立:

由以下内容生成的盒子 由以下内容建立的包含块
html 初始包含块(取决于用户代理)
body html
div1 body
p1 div1
p2 div1
em1 p2
strong1 p2

如果我们定位 "div1":

#div1 { position: absolute; left: 50px; top: 50px }

它的包含块不再是 "body",而成为初始包含块(因为没有其他已定位的祖先盒子)。

如果我们还定位 "em1":

#div1 { position: absolute; left: 50px; top: 50px }
#em1  { position: absolute; left: 100px; top: 100px }

包含块的表格变为:

由以下内容生成的盒子 由以下内容建立的包含块
html 初始包含块(取决于用户代理)
body html
div1 初始包含块
p1 div1
p2 div1
em1 div1
strong1 em1

通过定位 "em1",它的包含块成为最近的已定位祖先盒子(即 "div1" 所生成的盒子)。

2.1.1. 进一步调整包含块

某些特性可以改变绝对定位盒子的有效包含块矩形。 这些特性按以下顺序应用, 较早的步骤会修改后续步骤所看到的包含块

  1. 包含块网格容器生成的绝对定位盒子上的网格放置属性可以将包含块矩形更改为指定的网格区域。 参见 CSS 网格布局 1 § 9.1 以网格容器作为包含块

  2. position-areaposition-try 属性可以将包含块矩形更改为位置区域网格的指定区域。 参见 CSS 锚点定位 § 3.1 position-area 属性

元素的原始包含块是应用任何这些效果之前的包含块

2.2. 绘制顺序和堆叠上下文

z-index 属性适用于所有定位的盒子。 当 z-indexauto 时:

注意:根元素始终会形成一个堆叠上下文,无论如何。

有关 z-index堆叠上下文和绘制顺序的详细信息,请参阅 CSS2 § 9.9 层叠显示附录 E:堆叠上下文的详细说明

3. 定位坐标

一个已定位的盒子的精确位置由 插入属性控制: 物理物理方向的插入属性包括 toprightbottomleft; 流相对流相对方向的插入属性包括 inset-block-startinset-inline-startinset-block-endinset-inline-end; 以及它们的简写属性,inset-blockinset-inline、 以及inset

这些插入属性的解释依据 定位方案的不同而不同:

3.1. 盒子插入: toprightbottomleftinset-block-startinset-inline-startinset-block-endinset-inline-end 属性

名称: toprightbottomleftinset-block-startinset-inline-startinset-block-endinset-inline-end
值: auto | <长度-百分比>
初始值: auto
适用对象: 已定位元素
继承属性:
百分比值: 相对于 包含块 的大小;详见说明
计算值: 关键字 auto 或者计算出的 <长度-百分比>
规范顺序: 依据语法
动画类型: 依据计算值类型
逻辑属性组: inset

这些插入属性 代表在盒子对应边的内向“插入” (相对于盒子的书写模式; 参见 CSS Writing Modes 3 § 6 抽象盒子术语)。 例如,top 代表顶部边缘向下的插入。 物理物理和流相对流相对属性 的交互按 [CSS-LOGICAL-1] 中定义。 各值含义如下:

<长度>
插入距离是相对于参考边的固定距离。 允许负值。
<百分比>
插入距离相对于包含块的大小的百分比 (例如对于leftright 是宽度,对于topbottom 是高度)。 对于粘性定位的盒子, 插入是相对于相应的滚动视口的大小。 允许负值。
auto
代表未约束的插入; 具体含义取决于定位方案

注意: 对于固定定位元素, 使用较大的值或负值 可能会轻易将元素移出视口, 导致内容无法通过滚动或其他方式访问。

3.2. 盒子插入简写: inset-blockinset-inline,以及inset 属性

名称: inset-blockinset-inline
值: <'top'>{1,2}
初始值: auto
适用对象: 已定位元素
继承属性:
百分比值: 参见单个属性
计算值: 参见单个属性
规范顺序: 依据语法
动画类型: 依据计算值类型

inset-blockinset-inline属性是简写属性,用于在一个声明中分别设置inset-block-start + inset-block-endinset-inline-start + inset-inline-end。 第一个组件值设置起始边, 第二个设置终止边; 如果省略,第二个值默认为第一个。

名称: inset
值: <'top'>{1,4}
初始值: auto
适用对象: 已定位元素
继承属性:
百分比值: 参见单个属性
计算值: 参见单个属性
规范顺序: 依据语法
动画类型: 依据计算值类型

inset属性是简写属性,用于在一个声明中设置所有插入属性, 将值分配给表示每个边的长名称, 就像margin属性对其长名称所做的那样。

默认情况下,inset属性值 被分配给相应的物理长名称属性——toprightbottom,以及left——由于历史原因,这些属性没有以inset-前缀开头。 这与其他"4个值分配给边"的属性行为相匹配, 例如margin

允许此类属性解析为流相对长名称属性的做法 正在[CSS-LOGICAL-1]中讨论。

是的,我们理解这有点令人困惑,即 inset 不会展开为任何 inset-* 属性。

3.3. 相对定位

对于相对定位的盒子, 插入属性 会将盒子从相应边缘向内移动, 而不改变其大小。left将盒子向右移动,right将其向左移动, 等等。 由于盒子不会因相对定位而被分割或拉伸, 在给定轴上的相对使用值必须是互为相反数的:

以下三条规则是等价的, 都将盒子向左移动1em

div.a8 { position: relative; direction: ltr; left: -1em; right: auto }
div.a8 { position: relative; direction: ltr; left: auto; right: 1em }
div.a8 { position: relative; direction: ltr; left: -1em; right: 5em }

如果指定在 table-row-grouptable-header-grouptable-footer-grouptable-row 盒子上,则偏移会影响盒子的所有内容, 包括源自受影响行的所有表格单元格, 但不包括那些不源自受影响行的单元格。

注意:由于 position 不适用于 table-column-grouptable-column 盒子, 因此它们不受相对定位的影响。

3.4. 粘性定位

粘性定位 类似于相对定位, 只是偏移量是根据最近的滚动视口自动计算的。

对于粘性定位的盒子插入属性 表示距离最近的滚动视口 各边缘的插入, 用于定义约束盒子位置的粘性视图矩形。 (为此,auto值表示零插入。) 如果这导致在某个轴上的粘性视图矩形大小 小于该轴上边框盒的大小, 则会减少受影响轴上的有效终止边缘插入值(可能变为负数), 以使该轴上的粘性视图矩形的大小达到 边框盒的大小 (其中终止边缘是相对于书写模式解释的 包含块)。

例如, 如果最近的滚动视口300px粘性盒子的 边框盒200px, 并且其top: 20px, 则最近的滚动视口的顶部插入为20px, 底部插入为0px, 生成的粘性视图矩形280px

但如果最近的滚动视口只有100px高, 则有效的底部插入变为-120px, 生成的粘性视图矩形200px, 足以完全包含粘性盒子的外边距盒

对于盒子的每一侧, 如果相应的插入属性不是 auto, 并且盒子的相应边框边缘将位于 粘性视图矩形相应边缘之外, 则盒子必须进行视觉位移 (如同相对定位), 以使其位于粘性视图矩形边缘的内部, 只要其定位盒仍然包含在其 包含块内。 定位盒是其 外边距盒, 除非某一侧外边距盒的边缘与包含块相应边缘的距离小于其 外边距, 此时该距离将取代该侧的外边距

注:具有非autotop 值且autobottom 值的粘性定位元素只会因粘性定位而向下推动; 永远不会向上偏移。

注:同一容器中的多个粘性定位盒子独立偏移, 因此它们可能会重叠。

3.4.1. 粘性定位盒子的滚动位置

对于任何针对粘性定位元素(或其后代)滚动位置的操作, 必须将粘性定位元素视为在其偏移位置上。

例如,如果用户点击指向 粘性定位元素的链接, 并且该元素的最近滚动视口当前已滚动, 使得该粘性定位元素从其初始位置偏移, 则滚动容器将只滚动回 至所需的最小位置,来将该元素带到滚动视口中的理想位置 (而不是滚动回其原始的未偏移位置)。

3.5. 绝对定位(及固定定位)

对于绝对定位的盒子, 插入属性 实际上减少了其大小和位置的包含块的大小。 结果矩形称为插入修改的包含块。 (为了区别,实际的包含块可以称为绝对定位的包含块。)

3.5.1. 解析“内边距修饰的包含块”的内边距

如果给定轴上的插入属性中只有一个为 auto, 则其值设为零。 如果给定轴上的两个插入属性都为auto,那么根据盒子在相关轴上的 自对齐属性,进行如下处理:

对于self-start对齐或其等价方式
将起始边的插入属性设置为静态位置, 并将终止边的插入属性设为零。
对于self-end对齐或其等价方式
将终止边的插入属性 设置为静态位置, 并将起始边的插入属性设为零。
对于居中对齐
起始距离定义为从其 静态位置矩形中心到其 包含块起始边的距离, 将终止距离定义为从 静态位置矩形中心到 包含块终止边的距离。 如果起始距离小于或等于终止距离, 则将起始边的插入属性设为零, 并将终止边的插入属性设为 (包含块大小 - 2 × |起始距离|); 否则, 将终止边的插入属性设为零, 并将起始边的插入属性设为 (包含块大小 - 2 × |终止距离|)。

对于上述规则, 忽略溢出对齐, 并将normal视为 start, 并将任何基线拉伸对齐值 视为其回退对齐。

如果这些调整导致任何轴上的有效包含块大小小于零, 则受影响轴上的较弱内边距将减少(可能变为负值), 以使该大小达到零。 如果只有一个内边距是 auto, 那么它就是较弱内边距 (其相对的内边距是较强内边距); 否则,较弱内边距结束边缘的内边距 (其中结束是相对于包含块书写模式来解释的)。

注意:绝对定位盒子 的大小和位置调整为此 插入修改的包含块, 如§ 4 绝对定位布局模型所述。

如果其自对齐属性在某轴上为 normal, 则该轴上 解析值为匹配其 插入修改的包含块 的相应边与其 外边距盒 相匹配的值,在 布局之后。 (否则,解析值为上面描述的 使用值。)

3.5.2. 计算静态位置和“静态位置矩形”

当给定轴上的两个内边距属性均为 auto 时, 它们通过将盒子对齐到其静态位置静态位置矩形中来解析, 该对齐容器派生自 如果盒子是 position: static(与其际包含块无关),它本应参与的格式化上下文静态位置表示 如果盒子是 position: static,它本应具有的位置的近似值。

块布局
块级盒子静态位置[CSS2] 第 10 章中定义。 静态位置矩形是一个零厚度矩形, 跨越其盒子的静态位置包含块的行内轴两侧,并位于其块起始静态位置处(参见 CSS2§10.6.4)。

注意:在块布局中,静态位置矩形对应于 CSS2.1§10.3.7 中描述的“假设盒子”的位置。 由于它没有对齐属性, CSS2.1 始终在静态位置矩形内对绝对定位的盒子使用块起始 行内起始对齐。

行内布局
行内级盒子静态位置[CSS2] 第 10 章中定义。 静态位置矩形是一个零厚度矩形, 跨越本应包含其“假设盒子”的行盒行上/行下两侧 (参见 CSS2§10.3.7); 并位于其行内起始静态位置处。
弹性布局
弹性容器子元素的静态位置矩形对应于弹性容器交叉轴上的内容边缘, 以及其在主轴上假设位置的外边缘。 参见 [CSS-FLEXBOX-1] 中的弹性容器子元素的静态位置
网格布局
默认情况下,网格容器子元素的静态位置矩形对应于网格容器内容边缘。 但是,如果该网格容器也建立了盒子的实际包含块, 则由网格放置属性指定的网格区域将改为建立其静态位置矩形。 参见 [CSS-GRID-1] 中的网格容器子元素的静态位置

查找 静态位置静态位置矩形 时,假设 floatclear(以及 position)都具有其 初始值,因此可能还需要假定 display 有不同的假设值。 (在这些条件下,元素本会拥有的 包含块 即为 静态位置包含块。) 当 盒子对齐属性 有影响时, 它们会以 静态位置包含块 作为有效的 包含块, 包括使用其 书写模式 来解析对齐轴和方向。 另外,fixed定位 元素的 包含块 被假定为 初始包含块,而不是 视口, 并且应假定所有 滚动容器 都已滚动到其 初始滚动位置。 最后,盒子自身所有 auto 外边距都视为零。

顶层 的盒子总是使用 初始包含块 作为其 静态位置矩形

3.5.3. 绝对定位元素的分段

分段流中,绝对定位盒子 的定位是相对于其包含块, 并忽略任何分段断点 (就像流是连续的一样)。 该盒子随后可能会被分割到多个分段容器中。

对于在分页媒体中的绝对定位内容, 如果其定位结果位于非当前正在排版的页面(即当前页)上, 或定位在当前页但该位置已被打印渲染, 打印设备可以将内容放置在:

注意:一个块级元素 被分割到多个页面时, 在每个页面上可能有不同的宽度, 并且可能有设备特定的限制。

用户代理不得对fixed定位盒子的内容进行分页。

注意:用户代理可能会以其他方式打印不可见内容。 参见CSS Paged Media 3 § 3.2 页面盒外的内容

4. 绝对定位布局模型

绝对定位不仅将一个盒子 脱离文档流, 还根据其包含块 (在确定包含块的最终尺寸之后)进行布局, 依照绝对定位布局模型

  1. 首先,计算其插入修改后的包含块, 定义其可用空间。 (参见 § 3.5 绝对(和固定)定位。)

    由于绝对定位盒子不会影响其 包含块的尺寸, 因此其可用空间始终是确定的

  2. 其次,其宽度和高度相对于该确定的 可用空间进行解析, 作为其首选尺寸,并受其 最大尺寸(如有)和 最小尺寸的限制。 参见§ 4.1 绝对定位盒子的自动尺寸。 但是,百分比是相对于原始的 包含块尺寸进行解析的。
  3. 接下来,计算任何auto外边距, 参见§ 4.2 绝对定位盒子的自动外边距
  4. 最后,其外边距盒内边距修饰的包含块内对齐, 参见§ 5 绝对定位盒子的自对齐

4.1. 绝对定位盒子的自动尺寸

绝对定位盒子自动尺寸根据其内边距修饰的包含块解析如下:

如果其相关轴上的自对齐属性stretch,并且该轴上的内边距属性外边距都不是 auto
或者如果它是 normal 并且盒子是非替换的,不是表格包装盒,并且在相关轴上没有 auto 内边距

自动尺寸是其拉伸适应尺寸

否则

自动尺寸是其内容适应尺寸

但是,如果盒子具有宽高比,那么宽高比相关轴上的自动尺寸将改为解析为最大内容尺寸。 当两个轴都具有自动尺寸时,如果只有一个轴具有 auto 内边距,则该轴是宽高比相关轴,否则块轴宽高比相关轴宽高比决定轴上的自动尺寸按上述方式确定。

为了计算这些尺寸,任何 auto 外边距都视为零。

绝对定位盒子的自动最小尺寸始终为零。

注意:在表单控件可以调整大小(并且不直接表示替换元素,例如图像)的程度上,它们在此处应被视为非替换的。 在 HTML 中,除 <input type=image> 之外的所有表单控件都被视为非替换的。

4.2. 绝对定位盒子的自动外边距

如果相关轴上的任一内边距属性auto, 则任何 auto 外边距都解析为零。

否则,剩余空间的计算方法是:其相关轴上内边距修饰的包含块的大小减去盒子在相关轴上的已用大小, 然后将此剩余空间分配给相关轴上的任何 auto 外边距。 但是, (所有这些都相对于包含块书写模式而言), 如果在行内轴剩余空间为负且两个外边距均为 auto, 则起始外边距解析为零, 而结束外边距接收剩余空间

注意:与典型的流内布局不同, 在绝对定位中,分配给 auto 外边距的空间可以为负。

在“负尺寸”包含块中应该发生什么? CSS2.1 和此草案目前存在冲突。 [问题 #11478]

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

如果一个轴上任一内边距属性计算值auto, 则其外边距盒将与其较强内边距对应的内边距修饰的包含块的边缘对齐(即使这会溢出其包含块)。

否则,如果任一外边距auto, 则其位置根据§ 4.2 绝对定位盒子的自动外边距进行解析。

否则,盒子将根据其相关轴上的自对齐属性(由包含块书写模式定义)进行对齐, 使用其外边距盒作为对齐主体,并使用内边距修饰的包含块作为对齐容器。 但是,如果未指定显式的溢出对齐, 并且其外边距盒溢出内边距修饰的包含块, 则其对齐方式将调整为最小化溢出, 如CSS 框对齐 3 § 4.4.1.2 绝对定位盒子的自对齐中所述。

6. 旧的绝对定位布局模型

此部分正在被新的§ 4 绝对定位布局模型部分取代。 此处保留它是为了进行比较: 当盒子的自对齐normal 时,两种模型在水平书写模式下应产生相同的结果。

6.1. 绝对定位的非替换元素的宽度

确定这些元素使用值的约束是:

left + margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right + right = width of containing block

如果 leftwidthright 均为 auto: 首先将 margin-leftmargin-right 的任何 auto 值设置为 0。 然后,如果建立静态位置包含块的元素的 direction 属性为 ltr,则将 left 设置为静态位置并应用下面的规则; 否则,将 right 设置为静态位置并应用下面的规则

如果三者均不为 auto: 如果 margin-leftmargin-right 均为 auto, 则在两个外边距获得相等值的额外约束下求解方程, 除非这会使它们为负, 在这种情况下,当包含块的方向为 ltr (rtl) 时, 将 margin-left (margin-right) 设置为 0 并求解 margin-right (margin-left)。 如果 margin-leftmargin-right 中的一个为 auto, 则求解该值的方程。 如果值被过度约束, 则忽略 left 的值(如果包含块direction 属性为 rtl) 或 right 的值(如果 directionltr)并求解该值。

否则, 将 margin-leftmargin-rightauto 值设置为 0, 并选择以下六个适用规则中的一个。

  1. 如果 leftwidthautoright 不为 auto, 则宽度为收缩以适应。 然后求解 left
  2. 如果 leftrightautowidth 不为 auto, 那么如果建立静态位置包含块的元素的 direction 属性为 ltr,则将 left 设置为静态位置, 否则将 right 设置为静态位置。 然后求解 left(如果 directionrtl) 或 right(如果 directionltr)。
  3. 如果 widthrightautoleft 不为 auto, 则宽度为收缩以适应。 然后求解 right
  4. 如果 leftautowidthright 不为 auto, 则求解 left
  5. 如果 widthautoleftright 不为 auto, 则求解 width
  6. 如果 rightautoleftwidth 不为 auto, 则求解 right
水平书写模式下 dir=ltr 的规则摘要
是否为 auto? 结果
left width right margin-left margin-right
任何
  • auto 外边距 → 零
  • left → 静态位置
  • width → 收缩以适应
  • right → 求解
auto 外边距 → 自由空间
  • 外边距分配正的自由空间
  • 右外边距获得负的自由空间
right 视为 auto
任何
  • auto 外边距 → 零
  • left → 静态位置
  • width → 按指定
  • right → 求解
任何
  • auto 外边距 → 零
  • left → 求解
  • width → 收缩以适应
  • right → 按指定
任何
  • auto 外边距 → 零
  • left → 按指定
  • width → 收缩以适应
  • right → 求解
任何
  • auto 外边距 → 零
  • 求解 auto

6.2. 绝对或固定定位的替换元素的宽度

如果 heightwidth 都具有 auto 的计算值,并且元素具有内在宽度, 那么该内在宽度就是 width 的使用值。

如果 heightwidth 都具有 auto 的计算值,且元素没有内在宽度, 但具有内在高度和内在比例; 或者如果 width 的计算值为 autoheight 具有其他计算值, 并且元素具有内在比例; 那么 width 的使用值为:

(使用高度) * (内在比例)

如果 heightwidth 的计算值都为 auto,元素具有固有比例但没有固有高度或宽度,并且包含块的宽度本身不依赖于替换元素的宽度,那么 width 的使用值将根据用于块级、非替换元素在常规流中的约束方程计算。

否则,如果 width 的 计算值为 auto, 并且该元素具有内在宽度, 那么该内在宽度就是 width 的使用值。

否则,如果 width 的 计算值为 auto, 但不符合上述条件, 那么 width 的使用值将变为 300px。 如果 300px 对设备来说太宽, 用户代理应使用最大矩形的宽度, 该矩形具有 2:1 的比例并适合设备。

确定了 width 之后, 为了定位替换元素, 根据需要应用以下规则。

  1. 如果 leftright 的值都为 auto, 并且如果建立静态位置包含块的元素的 direction 属性为 ltr, 则将 left 设置为静态位置并求解 right; 否则如果 directionrtl, 则将 right 设置为静态位置并求解 left
  2. 如果 leftautoright 不为 auto, 则将 margin-leftmargin-right 上的任何 auto 替换为 0, 然后求解 left
  3. 如果 rightautoleft 不为 auto, 则将 margin-leftmargin-right 上的任何 auto 替换为 0, 然后求解 right
  4. 如果此时 margin-leftmargin-right 仍然为 auto, 则在两个外边距必须获得相等值的额外约束下求解方程, 除非这会使它们为负, 在这种情况下,当包含块的方向为 ltr (rtl) 时, 将 margin-left (margin-right) 设置为 0 并求解 margin-right (margin-left)。
  5. 如果此时仍有 auto 剩余, 则求解该值的方程。
  6. 如果此时值被过度约束, 则忽略 left 的值(如果包含块direction 属性为 rtl) 或 right 的值(如果 directionltr) 并求解该值。

6.3. 绝对定位的非替换元素的高度

对于绝对定位的元素, 垂直维度的使用值必须满足以下约束:

top + margin-top + border-top-width + padding-top + height + padding-bottom + border-bottom-width + margin-bottom + bottom = 包含块的高度

如果 topheightbottom 均为 auto: 首先将 margin-topmargin-bottom 的任何 auto 值设置为 0, 然后将 top 设置为静态位置, 最后应用下面的规则

如果三者均不为 auto: 如果 margin-topmargin-bottom 均为 auto, 则在两个外边距获得相等值的额外约束下求解方程。 如果 margin-topmargin-bottom 中的一个为 auto, 则求解该值的方程。 如果值被过度约束, 则忽略 bottom 的值并求解该值。

否则, 将 margin-topmargin-bottomauto 值设置为 0, 并选择以下六个适用规则中的一个。

  1. 如果 topheightautobottom 不为 auto, 则高度基于块格式化上下文根的自动高度, 并求解 top

  2. 如果 topbottomautoheight 不为 auto, 则将 top 设置为静态位置, 然后求解 bottom

  3. 如果 heightbottomautotop 不为 auto, 则高度基于块格式化上下文根的自动高度, 并求解 bottom

  4. 如果 topautoheightbottom 不为 auto, 则求解 top

  5. 如果 heightautotopbottom 不为 auto, 则求解 height

  6. 如果 bottomautotopheight 不为 auto, 则求解 bottom

6.4. 绝对定位的替换元素的高度

如果 heightwidth 的计算值都为 auto 并且元素也具有固有高度, 则该固有高度即为 height 的使用值。

否则,如果 height 的计算值为 auto 并且元素具有固有比例, 则 height 的使用值为:

(使用宽度)/(固有比例)

否则,如果 height 的计算值为 auto 并且元素具有固有高度, 则该固有高度即为 height 的使用值。

否则,如果 height 的计算值为 auto, 但以上条件均不满足, 则 height 的使用值必须设置为 具有 2:1 比例、高度不大于 150px 且宽度不大于设备宽度的最大矩形的高度。

在确定 height 后, 为了定位替换元素, 请酌情应用以下规则。

  1. 如果 topbottom 的值都为 auto, 则将 top 替换为元素的静态位置。

  2. 如果 bottomauto, 则将 margin-topmargin-bottom 上的任何 auto 替换为 0

  3. 如果此时 margin-topmargin-bottom 仍然为 auto, 则在两个外边距必须获得相等值的额外约束下求解方程。

  4. 如果此时只剩下一个 auto, 则求解该值的方程。

  5. 如果此时值被过度约束, 则忽略 bottom 的值并求解该值。

7. 正常流、浮动和定位的比较

本节不具有规范性。

为了说明常规流相对定位浮动绝对定位之间的差异,我们提供了一系列基于以下 HTML 的示例:

<!DOCTYPE html>
<html>
<head>
    <title>定位方案的比较</title>
    <style>
      body { display: block; font-size:12px; line-height: 200%; width: 400px; height: 400px }
      p    { display: block }
      span { display: inline }
    </style>
</head>
<body>
<p>
    p元素内容开始。
    <span id="outer"> 外层内容开始。
    <span id="inner"> 内层内容。</span>
    外层内容结束。</span>
    p元素内容结束。
</p>
</body>
</html>

每个示例中生成的 outerinner 元素的最终位置各不相同。在每个图示中, 图示左侧的数字表示双倍行距的正常流 位置,以便于说明。

注意:本节的图表仅为示例,并不按比例绘制。它们的目的是突出不同定位方案之间的差异,而不是作为给定示例的参考渲染。

7.1. 正常流示例

考虑以下用于 outerinner 的 CSS 声明,它们不会改变盒子的正常流

#outer { color: red }
#inner { color: blue }

P 元素包含所有行内内容:匿名行内文本和两个 SPAN 元素。因此,所有内容都将在行内格式化上下文中布局,在由 P 元素建立的包含块内,产生类似如下的效果:

图示父子框中的文本在正常流中如何排列。
p 元素的包含块中的所有文本作为连续文本流动,即使它们位于分离的嵌套元素中。

7.2. 相对定位示例

为了查看相对定位的效果,我们指定了以下样式:

#outer { position: relative; top: -12px; color: red }
#inner { position: relative; top: 12px; color: blue }

文本正常流动到 outer 元素。outer 文本首先按照其正常流的位置和尺寸在第 1 行的末尾呈现。然后,包含文本的内联框(分布在三行上)作为一个整体被向上移动 -12px

作为 outer 的子元素,inner 的内容通常会紧随“outer 内容”之后(在 1.5 行)。然而,inner 的内容相对于 outer 内容向下偏移了 12px,返回到原始的第 2 行位置。

注意,outer 之后的内容不受 outer 相对定位的影响。

结果与正常流相同,唯一不同的是“outer”文本向上移动了 12px,且不影响“body”或“inner”文本的流动。

还要注意,如果 outer 的偏移值为 -24px,则 outer 文本和正文文本将会重叠。

7.3. 浮动示例

现在考虑通过以下规则将 inner 元素的文本向右浮动的效果:

#outer { color: red }
#inner { float: right; width: 130px; color: blue }

文本正常流动到 inner 框,该框被移出流并浮动到右外边距(其 width 已被显式分配)。浮动框左侧的行框被缩短,文档的其余文本流入其中。

图示浮动框的效果。
“inner”文本在右侧布局为一个独立的框,使得其余的“body”和“outer”文本围绕它流动。

为了显示 clear 属性的效果,我们向示例中添加一个同级元素:

<!DOCTYPE html>
<html>
    <head>
        <title>定位方案比较 II</title>
        <style>#inner { float: right; width: 130px; color: blue }
#sibling { clear: right; color: red }

这些样式使得 inner 框向右浮动,与之前一样,文档其余的文本流入空出的空间:

图示未设置 clear 属性时,浮动框如何影响文本流动。
与之前的示例相同,只是现在“sibling”文本与“body”和“outer”文本一起流动。

但是,如果同级元素上的 clear 属性设置为 right(即,生成的同级框将不接受其右侧浮动框旁边的位置),则同级内容将开始在浮动框下方流动:

#inner { float: right; width: 130px; color: blue }
#sibling { clear: right; color: red }
图示设置 clear 属性后浮动元素如何影响文本流动。
现在“sibling”文本移动到“inner”文本框下方,留下一块空白。“sibling”文本之后的文本正常流动。

7.4. 绝对定位示例

接下来,我们考虑绝对定位的效果。以下是为 outerinner 设置的 CSS 声明:

#outer { 
position: absolute; 
top: 200px; left: 200px; 
width: 200px; 
color: red; 
} 
#inner { color: blue } 

这导致 outer 框的顶部相对于其包含块进行定位。定位框的包含块由最近的已定位祖先(或者,如果不存在,则为初始包含块,如我们的示例所示)建立。outer 框的顶边位于包含块顶部下方 200px 处,左边距离左边 200pxouter 的子框相对于其父框正常流动。

图示绝对定位框的效果。
所有 #outer 中的文本(“outer”和“inner”文本)移动到右下角的独立框中。“body”文本的两半继续一起流动。

下面的示例展示了作为相对定位框子元素的绝对定位框的效果。虽然父 outer 框实际上没有偏移,但将其 position 属性设置为 relative 意味着它可以作为已定位后代元素的包含块。由于 outer 框是一个跨越多行的内联框,第一个内联框的顶部和左侧边缘(如下图中的粗虚线)作为 topleft 偏移的参考点。

#outer { 
position: relative; 
color: red
} 
#inner { 
position: absolute; 
top: 200px; left: -100px; 
height: 130px; width: 130px; 
color: blue; 
} 

其结果如下图所示:

图示绝对定位框相对于包含块的效果。
“inner”文本相对于“outer”文本开始位置的左上角定位在一个独立的框中。

如果我们不对 outer 框进行定位:

#outer { color: red } 
#inner { 
position: absolute; 
top: 200px; left: -100px; 
height: 130px; width: 130px; 
color: blue; 
} 

inner包含块将变为初始包含块(在我们的示例中)。下图显示了在这种情况下 inner 框最终的位置。

图示绝对定位框相对于通过正常定位父元素建立的包含块的效果。
与之前相同,但现在“inner 文本”相对于页面本身的左上角定位。

相对和绝对定位可以用来实现修改条的效果,如下例所示。以下片段:

<p style="position: relative; margin-right: 10px; left: 10px;"> 
我用了两个红色破折号来作为修改条。它们将“浮动”到包含THIS一词的行的左侧
<span style="position: absolute; top: auto; left: -1em; color: red;">--</span> 
一词旁边。
</p> 

可能产生如下效果:

图示浮动来创建修改条的效果。
两个红色破折号,表示更改,位于页面的左边距内,在包含“THIS”一词的行上,无论该行最后位于何处。

首先,段落(其包含块的各边如图所示)正常流动。然后它从包含块的左边缘偏移 10px(因此,为预期的偏移保留了 10px 的右外边距)。充当变更标记的两个连字符被移出流,并定位在当前行(由于 'top: auto'),距离其包含块(由 P 在其最终位置建立)左边缘 -1em 的位置。结果是变更标记似乎“浮动”到当前行的左侧。

8. 致谢

本模块的实现离不开许多人的帮助和支持。特别感谢 Rossen Atanassov、Bert Bos、Oriol Brufau、Tantek Çelik、Arron Eicholz、Sylvain Galineau、John Jansen、Chris Jones、Ian Kilpatrick 和 Anton Prowse。

变更

2025年3月11日工作草案 以来的重大变化:

另见 此前变更

隐私注意事项

本规范未引入新的隐私注意事项。

安全注意事项

如果攻击者能够注入任意CSS, 定位布局可能使攻击者更容易将其可控元素定位到页面上的任意其他元素之上, 可能误导页面用户。 (这种攻击途径有很多:负值 margintransform 等。 不要让用户对你的页面任何部分应用任意CSS。)

position: fixed 允许页面模拟模态对话框, 可能会误导用户认为他们正在与用户代理交互, 并输入页面可以捕获的敏感信息。 用户代理必须确保其原生对话框的定位方式, 页面无法进行模拟; 特别是, 至少部分对话框要位于网页内容可绘制的“危险像素”之外。

规范性

文档约定

规范性要求以描述性断言和 RFC 2119 术语的组合表达。规范性部分中的关键字 “MUST”、 “MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、 “RECOMMENDED”、“MAY” 和 “OPTIONAL” 应按照 RFC 2119 中的说明进行解释。 为了可读性,规范中这些词不会全部用大写字母出现。

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

本规范中的示例以 “例如” 开头, 或通过 class="example" 与规范性文本区分开来, 如下所示:

这是一个信息性示例。

信息性注释以 “Note” 开头, 并通过 class="note" 与规范性文本区分开来,如下所示:

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

告诫性内容为规范性章节,样式特殊以引起注意, 并通过 <strong class="advisement"> 与其他规范性文本区分,如下所示: 用户代理必须提供可访问的替代方案。

规范性类别

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

样式表
CSS 样式表
渲染器
UA 解释样式表语义并渲染使用样式表的文档。
编辑工具
UA 用于编写样式表。

如果样式表中使用本模块定义语法的所有声明, 均根据通用 CSS 语法和本模块所定义各特性的语法为有效, 则该样式表符合本规范。

如果渲染器除了按相关规范解释样式表之外, 还能正确解析并渲染本规范所定义的所有特性, 则该渲染器符合本规范。但由于设备限制导致 UA 无法正确渲染文档, 并不构成不符合规范。(例如,UA 不要求在单色显示器上渲染颜色。)

如果编辑工具编写的样式表在语法上符合通用 CSS 语法以及本模块每个特性的语法, 并符合本模块描述的样式表所有其他规范性要求, 则该编辑工具符合本规范。

部分实现

为使作者能够利用向前兼容的解析规则分配后备值,CSS 渲染器必须 将任何其不支持的 at-规则、属性、属性值、关键字和语法结构视为无效(并按需忽略)。特别是,用户代理不得在一个多值属性声明中选择性地忽略不支持的组件值、同时保留支持的值:如果任何值被认为无效(即不支持的值必须如此),CSS 要求整个声明被忽略。

不稳定和专有特性的实现

为避免与未来稳定的 CSS 特性冲突, CSSWG 推荐在实现不稳定特性和专有扩展时,遵循最佳实践

非实验性实现

一旦规范进入候选推荐阶段, 就可以进行非实验性实现, 实现者应发布任何已证明根据规范正确实现的 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 级。2025年3月11日。工作草案。URL:https://www.w3.org/TR/css-align-3/
[CSS-ANCHOR-POSITION-1]
Tab Atkins Jr.;Elika Etemad;Ian Kilpatrick。CSS 锚点定位。2025年5月9日。工作草案。URL:https://www.w3.org/TR/css-anchor-position-1/
[CSS-BACKGROUNDS-3]
Elika Etemad;Brad Kemper。CSS 背景与边框模块 3 级。2024年3月11日。候选推荐草案。URL:https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad。CSS 盒模型模块 4 级。2024年8月4日。工作草案。URL:https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov;Elika Etemad。CSS 分段模块 4 级。2018年12月18日。首份公开工作草案。URL:https://www.w3.org/TR/css-break-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 级。2024年12月19日。首份公开工作草案。URL:https://www.w3.org/TR/css-display-4/
[CSS-FLEXBOX-1]
Tab Atkins Jr. 等。CSS 弹性盒布局模块 1 级。2018年11月19日。候选推荐。URL:https://www.w3.org/TR/css-flexbox-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]
Rossen Atanassov;Elika Etemad。CSS 逻辑属性与值 1 级。2018年8月27日。工作草案。URL:https://www.w3.org/TR/css-logical-1/
[CSS-OVERFLOW-3]
Elika Etemad;Florian Rivoal。CSS 溢出模块 3 级。2023年3月29日。工作草案。URL:https://www.w3.org/TR/css-overflow-3/
[CSS-PAGE-3]
Elika Etemad。CSS 分页媒体模块 3 级。2023年9月14日。工作草案。URL:https://www.w3.org/TR/css-page-3/
[CSS-PAGE-FLOATS-3]
Johannes Wilm。CSS 页面浮动。2015年9月15日。首份公开工作草案。URL:https://www.w3.org/TR/css-page-floats-3/
[CSS-POSITION-4]
CSS 定位布局模块 4 级。2025年7月8日。首份公开工作草案。URL:https://www.w3.org/TR/css-position-4/
[CSS-SIZING-3]
Tab Atkins Jr.;Elika Etemad。CSS 盒子尺寸模块 3 级。2021年12月17日。工作草案。URL:https://www.w3.org/TR/css-sizing-3/
[CSS-SIZING-4]
Tab Atkins Jr.;Elika Etemad;Jen Simmons。CSS 盒子尺寸模块 4 级。2021年5月20日。工作草案。URL:https://www.w3.org/TR/css-sizing-4/
[CSS-TABLES-3]
François Remy;Greg Whitworth;David Baron。CSS 表格模块 3 级。2019年7月27日。工作草案。URL:https://www.w3.org/TR/css-tables-3/
[CSS-TRANSFORMS-1]
Simon Fraser 等。CSS 变换模块 1 级。2019年2月14日。候选推荐。URL:https://www.w3.org/TR/css-transforms-1/
[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 级修订版(CSS 2.1)规范。2011年6月7日。正式推荐。URL:https://www.w3.org/TR/CSS2/
[CSSOM-1]
Daniel Glazman;Emilio Cobos Álvarez。CSS 对象模型(CSSOM)。2021年8月26日。工作草案。URL:https://www.w3.org/TR/cssom-1/
[CSSOM-VIEW-1]
Simon Fraser;Emilio Cobos Álvarez。CSSOM 视图模块。2025年9月16日。工作草案。URL:https://www.w3.org/TR/cssom-view-1/
[MEDIAQUERIES-5]
Dean Jackson 等。媒体查询 5 级。2021年12月18日。工作草案。URL:https://www.w3.org/TR/mediaqueries-5/
[RFC2119]
S. Bradner。用于在RFC中指示需求级别的关键词。1997年3月。最佳当前实践。URL:https://datatracker.ietf.org/doc/html/rfc2119

参考文献(信息性)

[CSS-CONTAIN-2]
Tab Atkins Jr.;Florian Rivoal;Vladimir Levin。CSS 包含性模块 2 级。2022年9月17日。工作草案。URL:https://www.w3.org/TR/css-contain-2/
[CSS-WILL-CHANGE-1]
Tab Atkins Jr.。CSS Will Change 模块 1 级。2022年5月5日。候选推荐草案。URL:https://www.w3.org/TR/css-will-change-1/

属性索引

名称 初始值 适用于 继承性 百分比 动画类型 语法顺序 计算值 逻辑属性组
bottom auto | <length-percentage> auto 定位元素 参考包含块大小;详见正文 按计算值类型 按语法顺序 关键字 auto 或计算的 <length-percentage> 值 inset
inset <'top'>{1,4} auto 定位元素 见各自属性 按计算值类型 按语法顺序 见各自属性
inset-block <'top'>{1,2} auto 定位元素 见各自属性 按计算值类型 按语法顺序 见各自属性
inset-block-end auto | <length-percentage> auto 定位元素 参考包含块大小;详见正文 按计算值类型 按语法顺序 关键字 auto 或计算的 <length-percentage> 值 inset
inset-block-start auto | <length-percentage> auto 定位元素 参考包含块大小;详见正文 按计算值类型 按语法顺序 关键字 auto 或计算的 <length-percentage> 值 inset
inset-inline <'top'>{1,2} auto 定位元素 见各自属性 按计算值类型 按语法顺序 见各自属性
inset-inline-end auto | <length-percentage> auto 定位元素 参考包含块大小;详见正文 按计算值类型 按语法顺序 关键字 auto 或计算的 <length-percentage> 值 inset
inset-inline-start auto | <length-percentage> auto 定位元素 参考包含块大小;详见正文 按计算值类型 按语法顺序 关键字 auto 或计算的 <length-percentage> 值 inset
left auto | <length-percentage> auto 定位元素 参考包含块大小;详见正文 按计算值类型 按语法顺序 关键字 auto 或计算的 <length-percentage> 值 inset
position static | relative | absolute | sticky | fixed static 除表格列组和表格列外的所有元素 N/A 离散 按语法顺序 指定的关键字
right auto | <length-percentage> auto 定位元素 参考包含块大小;详见正文 按计算值类型 按语法顺序 关键字 auto 或计算的 <length-percentage> 值 inset
top auto | <length-percentage> auto 定位元素 参考包含块大小;详见正文 按计算值类型 按语法顺序 关键字 auto 或计算的 <length-percentage> 值 inset

问题索引

如何在盒子跨多行时形成有用的包含块?[Issue #8284]
在“负尺寸”包含块中应该发生什么? CSS2.1 和此草案目前存在冲突。 [问题 #11478]
本节将被新的 § 4 绝对定位布局模型 部分替换。 该部分保留在此以供比较: 在 水平书写模式 中, 当盒子的 自对齐normal 时, 两种模型应产生相同的结果。