CSS 框尺寸模块第 4 级

W3C 工作草案,

有关本文档的更多详细信息
此版本:
https://www.w3.org/TR/2026/WD-css-sizing-4-20260904/
最新发布版本:
https://www.w3.org/TR/css-sizing-4/
编辑草案:
https://drafts.csswg.org/css-sizing-4/
先前版本:
历史记录:
https://www.w3.org/standards/history/css-sizing-4/
测试套件:
https://wpt.fyi/results/css/css-sizing
https://wpt.fyi/results/css/css-sizing/
反馈:
CSSWG 议题仓库
CSSWG GitHub
规范中的内联议题
编辑:
Tab Atkins (Google)
Elika J. Etemad / fantasai (Apple)
Jen Simmons (Apple)
建议对此规范进行编辑:
GitHub 编辑器

摘要

本模块扩展了 CSS 尺寸属性,增加了表示基于内容的“内在”尺寸 和基于上下文的“外在”尺寸的关键字,使 CSS 能够更轻松地描述适应其内容或 适应特定布局上下文的框。本规范是相对于 CSS 尺寸第 3 级的增量规范。

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

本文档的状态

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

本文档由 CSS 工作组 使用推荐标准 流程发布为工作草案。 作为工作草案发布 并不意味着获得 W3C 及其成员的认可。

本文档是一份草案, 可能随时被其他文档更新、取代 或废弃。 除了将其作为进行中的工作之外,不应以其他方式引用本文档。

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

本文档受 2025 年 8 月 18 日 W3C 流程 文档约束。

本文档由一个依据 W3C 专利政策运作的工作组制作。 W3C 维护着一份 所有专利披露的公开列表, 这些披露与该工作组的交付成果有关; 该页面还包含披露专利的说明。 如果某人确实知晓一项其认为 包含必要权利要求的专利, 则必须按照 W3C 专利政策第 6 节披露相关信息。

1. 简介

本规范是相对于 CSS 尺寸第 3 级的差异规范。 它目前是一份探索性工作草案: 如果你正在实现任何内容,请以第 3 级作为参考。 一旦本草案达到 CR,我们会将第 3 级的文本合并到本草案中。

测试

通用尺寸测试


1.1. 模块交互

本模块扩展了 width、height、min-width、min-height、max-width、max-height 和 column-width 功能,这些功能定义于 [CSS2] 第 10 章以及 [CSS3COL]

1.2. 值定义

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

除各属性定义中列出的属性特定值外, 本规范定义的所有属性 也都接受 CSS 全局关键字作为其属性值。 为便于阅读,这里没有明确重复列出它们。

2. 术语

CSS 尺寸 3 § 2 术语

3. 指定框尺寸

CSS 尺寸 3 § 3 指定框 尺寸

3.1. 尺寸属性

CSS 尺寸 3 § 3.1 尺寸 属性

名称: size
值: <'width'> <'height'>?
初始值: auto
适用于: 所有元素
继承: 见各个属性
百分比: 见各个属性
计算值: 见各个属性
动画类型: 见各个属性
规范顺序: 依语法而定

size 属性是一个简写属性, 可在单个声明中设置 width 和 height。 如果省略第二个值, 则从第一个值复制。

size 简写属性不能用于 @page 上下文中, 因为 @page 已经有一个无关的 size 描述符, 用于设置页面尺寸。

size 属性需要从 CSSOM 中的 首选 简写顺序中排除, 以避免兼容性问题以及与 @page 的冲突。

名称: min-size
值: <'min-width'> <'min-height'>?
初始值: auto
适用于: 所有元素
继承: 见各个属性
百分比: 见各个属性
计算值: 见各个属性
动画类型: 见各个属性
规范顺序: 依语法而定

min-size 属性是一个简写属性, 可在单个声明中设置 min-width 和 min-height。 如果省略第二个值, 则从第一个值复制。

名称: max-size
值: <'max-width'> <'max-height'>?
初始值: none
适用于: 所有元素
继承: 见各个属性
百分比: 见各个属性
计算值: 见各个属性
动画类型: 见各个属性
规范顺序: 依语法而定

max-size 属性是一个简写属性, 可在单个声明中设置 max-width 和 max-height。 如果省略第二个值, 则从第一个值复制。

3.2. 新的尺寸值:contain、fit-content() 和 calc-size() 值

CSS 尺寸 3 § 3.2 尺寸值: <length-percentage>、auto | none、min-content、max-content 和 fit-content() 值

第 4 级增加了在 尺寸属性中使用 contain、fit-content() 和 calc-size() 值的能力, 从而将 <box-size> 产生式扩展如下:

<box-size> = <length-percentage> | stretch | contain | min-content | max-content | fit-content | fit-content() | calc-size()
名称: width, height, min-width, min-height, max-width, max-height
新值: contain | fit-content(<length-percentage [0,∞]>)
fit-content(<length-percentage [0,∞]>)
使用 fit-content 公式, 但将可用空间替换为指定的参数, 即 min(max-content, max(min-content, <length-percentage>)), 其中 <length-percentage> 参数的解析方式 与独立出现的 <length-percentage> 值完全相同。

负的 <length-percentage> 值无效。

测试
contain
如果框具有首选纵横比, 则应用contain-fit 尺寸确定, 尝试在尽可能保持其首选纵横比的同时 适应框的约束。 参见 § 6.1 Contain-fit 尺寸确定:在保持纵横比的同时拉伸。

如果框没有首选纵横比, 则应用stretch-fit 尺寸确定。

calc-size()
参见 CSS 值 5 § 10. 使用内在尺寸进行计算:calc-size() 函数。

注: none 关键字 不能在 calc-size() 中使用。

注: 这些新值加入了 <calc-size()> 定义所称的 “在上下文中允许”的值集合。

4. 纵横比

图像通常具有自然纵横比, CSS 布局算法会在调整元素大小时 尝试保持这一纵横比。

aspect-ratio 属性允许为非替换元素 指定这种行为, 并可更改替换元素的有效纵横比。

我们仍在完善 本节的细节。 如果这里指定的任何行为 会导致具有替换元素且具有首选纵横比的元素, 与在 CSS2、 弹性布局和 网格布局 规范共同要求下(不应用本规范时)的行为不同, 那么这是一个错误,应报告给 CSSWG。 这里有一份尚未关闭的 aspect-ratio 议题列表。

4.1. 首选纵横比:aspect-ratio 属性

名称: aspect-ratio
值: auto || <ratio>
初始值: auto
适用于: 除行内 框以及内部 ruby 或表格框之外的所有元素
继承: 否
百分比: 不适用
计算值: 指定的关键字或一对数字
规范顺序: 依语法而定
动画类型: 按计算值
测试

此属性为框设置一个首选纵横比, 它将用于计算 auto 尺寸 以及其他一些布局函数。

auto
具有自然纵横比的替换元素 使用该纵横比; 否则该框没有首选纵横比。 涉及纵横比的尺寸计算 始终使用内容框的尺寸。
<ratio>
框的首选纵横比是指定的 width / height 比率。 涉及纵横比的尺寸计算 使用由 box-sizing 指定的框尺寸。

如果 <ratio> 是退化的, 则该属性改为表现得如同 auto。

auto && <ratio>
如果 auto 和 <ratio> 同时指定, 则首选纵横比为指定的 width / height 比率, 除非它是一个具有自然纵横比的替换元素, 在这种情况下改用该自然纵横比。 在所有情况下,涉及纵横比的尺寸计算 始终使用内容框的尺寸。

如果 <ratio> 是退化的, 则该属性改为表现得如同 auto。

测试

注: 具有首选纵横比并不会 使一个框成为替换元素; 专用于替换元素的布局规则 通常不适用于具有首选纵横比的非替换框。 例如,一个非替换的绝对定位框 会将 justify-self: normal 视为 stretch,而不是 start (CSS 框对齐 3 § 6.1.2 绝对定位框), 即使它具有首选纵横比

CSS2.1 并未清晰地区分 替换元素与具有纵横比的元素; 需要找出具体哪些情况不明确,并对其作出定义, 要么在相应的第 3 级规范中,要么在这里。

此示例将网格中的每个项目都渲染为正方形, 并根据可用空间确定项目数量及其宽度。
<ul>
  <li>…
  <li>…
  <li>…
  <li>…
</ul>
ul {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(12em, 1fr));
}
li {
  aspect-ratio: 1/1;
  overflow: auto;
}
此示例使用 iframe 元素的 width 和 height 属性 来设置 aspect-ratio 属性, 为 iframe 提供一个用于尺寸确定的纵横比, 使其行为与具有该纵横比的图像完全相同。
<iframe
  src="https://www.youtube.com/embed/0Gr1XSyxZy0"
  width=560
  height=315>
@supports (aspect-ratio: attr(width number) / 1) {
  iframe {
    aspect-ratio: attr(width number) / attr(height number);
    width: 100%;
    height: auto;
  }
}

如果一个替换元素唯一的自然 尺寸 是自然宽度或自然 高度, 为其提供首选纵横比 也会赋予它缺失的自然高度或宽度, 方法是通过首选纵横比 传递已有的尺寸。

4.2. 首选纵横比对自动尺寸的影响

当一个框具有首选纵横比时, 它的自动尺寸 的计算方式与一个在该轴上没有自然尺寸、但具有自然纵横比的替换元素相同, 例如参见 CSS2 § 10 和 CSS 弹性框模型第 1 级 § 9.2。 首选尺寸计算 依赖此纵横比的轴 称为比率依赖轴, 如果其输入尺寸也是确定的, 则所得尺寸是确定的。 相反的轴(比率依赖轴的尺寸依赖于它) 称为比率确定轴。

注: 首选纵横比 只有在框的至少一个尺寸 是自动的时才会产生影响。 如果 width 和 height 都不是自动尺寸, 则它不会影响其首选 尺寸。

当我们把所有 尺寸信息移到这里, 而不是强行塞进 2.1 时, 核心原则就只是: 比率确定轴中解析后的首选尺寸 (在应用 min/max 之前) 会通过该比率传递。 min/max 约束随后再进行传递, 然后分别应用到各个轴,而不再考虑纵横比。

测试

4.2.1. 外边距折叠

对于外边距折叠(CSS 2 § 8.3.1 折叠 外边距), 如果块轴是比率依赖轴, 则不认为它具有计算后的 block-size 值 auto。

4.3. 自动的基于内容的最小尺寸

为避免非预期的溢出, 一个具有首选纵横比的框, 如果它既不是替换元素, 也不是该轴上的滚动容器, 则它在比率依赖轴上的 自动最小尺寸 是其min-content 尺寸, 并受其最大尺寸限制。

在以下示例中, 框与容器一样宽(与通常情况相同), 其高度足以容纳其内容, 但至少与其宽度一样高。
div {
  aspect-ratio: 1/1;
  /* 'width' 和 'height' 都默认为 'auto' */
}
+----------+  +----------+  +----------+
| ~~~~~~~~ |  | ~~~~~~~~ |  | ~~~~~~~~ |
| ~~~~~~~~ |  | ~~~~~~~~ |  | ~~~~~~~~ |
| ~~~~~~~  |  | ~~~~~~~~ |  | ~~~~~~~~ |
|          |  | ~~~      |  | ~~~~~~~~ |
+----------+  +----------+  | ~~~~~~~~ |
                            | ~~~~~~   |
                            +----------+

但是,当指定 overflow: auto 时, 即使内容过多的框也会保持 1:1 的纵横比 (并像通常一样,通过变为可滚动来处理溢出)。

div {
  overflow: auto;
  aspect-ratio: 1/1;
}
+----------+  +----------+  +----------+
| ~~~~~~~~ |  | ~~~~~~~~ |  | ~~~~~~~~^|
| ~~~~~~~~ |  | ~~~~~~~~ |  | ~~~~~~~~ |
| ~~~~~~~  |  | ~~~~~~~~ |  | ~~~~~~~~ |
|          |  | ~~~      |  | ~~~~~~~~v|
+----------+  +----------+  +----------+

覆盖 min-height 属性也会保持 1:1 的纵横比, 但如果没有通过其他方式处理, 会导致内容溢出框。

div {
  aspect-ratio: 1/1;
  min-height: 0;
}
+----------+  +----------+  +----------+
| ~~~~~~~~ |  | ~~~~~~~~ |  | ~~~~~~~~ |
| ~~~~~~~~ |  | ~~~~~~~~ |  | ~~~~~~~~ |
| ~~~~~~~  |  | ~~~~~~~~ |  | ~~~~~~~~ |
|          |  | ~~~      |  | ~~~~~~~~ |
+----------+  +----------+  +-~~~~~~~~-+
                              ~~~~~~    
这个自动最小值会在两个轴上起作用。 请考虑此示例:
<div style="height: 100px; aspect-ratio: 1/1;">
  <span style="display: inline-block; width: 50px;"></span>
  <span style="display: inline-block; width: 150px;"></span>
</div>

容器的 width 为 auto, 因此通过纵横比解析为 100px。 然而,其 min-width 也是 auto, 因而解析为 150px。 因此,容器最终的宽度为 150px。 若要在确定容器尺寸时忽略其内容, 可以指定 min-width: 0。

测试

4.4. 最小/最大尺寸传递

任一轴 (origin 轴)中的尺寸约束 会通过首选纵横比传递, 并按如下方式应用于另一轴(destination 轴)中任何不确定的 最小、最大或首选尺寸:

注: 因此,任何确定的尺寸都完全不受 传递约束的影响; 传递后的最小值永远不会使元素超过确定的首选/最大尺寸, 传递后的最大值也不会使元素违反其首选/最小尺寸。

注: 基本原则是,尺寸约束 通过纵横比传递到另一侧, 在不违反受影响轴上任何显式指定尺寸的前提下, 尽可能保持纵横比。 (这也是形成 CSS2 第 10.4 节约束表内容的原则。)

在以下示例中:
<div id=container style="height: 100px; float: left;">
  <div id=item style="height: 100%; aspect-ratio: 1/1;">content</div>
</div>

由于 #item 的高度是相对于确定容器解析的百分比, 因此无论是其内在尺寸贡献还是最终布局, 该项目的宽度都会解析为 100px, 所以容器的宽度也会确定为 100px。

<div id=container style="height: auto; float: left;">
  <div id=item style="height: 100%; aspect-ratio: 1/1;">content</div>
</div>

在下一个示例中, 项目的百分比高度无法解析,因此表现得如同 auto (参见 CSS 2 § 10.5 内容高度:'height' 属性)。 由于现在两个轴都具有自动 尺寸, 高度会成为比率依赖轴。 计算该框的内在尺寸贡献 会产生一个由其内容得出的宽度, 并根据该宽度和纵横比计算高度, 从而得到一个正方形框(以及容器), 其尺寸等于单词“content”的宽度。

测试

本节的编写方式可能不正确。[议题 #6071]

5. 内在尺寸确定

5.1. 内在尺寸

CSS 尺寸 3 § 5.1 内在 尺寸

5.2. 覆盖受包含的内在尺寸:contain-intrinsic-* 属性

名称: contain-intrinsic-width, contain-intrinsic-height, contain-intrinsic-block-size, contain-intrinsic-inline-size
值: auto? [ none | <length [0,∞]> ]
初始值: none
适用于: 具有尺寸包含的元素
继承: 否
百分比: 不适用
计算值: 按指定值,其中 <length> 值会被计算
规范顺序: 依语法而定
动画类型: 按计算值类型
逻辑属性 组: contain-intrinsic-size
测试

这些属性允许具有尺寸 包含的元素指定 一个显式 内在内部尺寸, 从而使框进行尺寸确定时,仿佛其流内内容 的总宽度和高度 与指定的显式内在内部尺寸相匹配 (而不是像空框那样进行尺寸确定)。

注: 这并不总是等价于 假设元素拥有一个指定显式内在 内部尺寸的子元素来进行布局。 例如,一个拥有指定尺寸子元素的网格容器 仍会按照指定的网格确定尺寸, 通常最终会得到比指定值更大的内容尺寸。

测试
none | <length>

如果没有其他 contain-intrinsic-size 值 (例如 auto) 提供显式内在内部尺寸, 那么相应的轴或者没有显式内在内部尺寸 (如果指定了 none), 或者具有指定 <length> 的显式内在内部尺寸。

auto

如果指定了 auto, 并且元素具有上次记忆的尺寸 且当前正在跳过其内容, 则其在相应轴上的显式内在内部尺寸 是该轴上的上次记忆的尺寸。

注: 例如, 当具有 content-visibility: auto 的元素位于屏幕外时,就会发生这种情况。

测试

如果一个元素在某个轴上具有显式内在内部尺寸, 那么在按照尺寸 包含的正常方式对元素进行布局之后, 该轴上的内容尺寸会改为被视为显式内在内部尺寸, 而不是布局中计算出的尺寸, 并在必要时再次执行布局。 (如果它在两个轴上都具有显式内在内部尺寸, 这意味着可以跳过第一次布局。)

这四个属性属于一个逻辑属性组。

注: 具有尺寸 包含的元素会被当作没有内容来布局 [CSS-CONTAIN-1], 在许多情况下,这会使元素折叠为零内部高度。 可以通过显式指定一个经过选择以显示预期内容的 height 来纠正这一点, 但在某些布局系统中,这可能产生意料之外的效果, 例如弹性布局和网格布局, 它们会将显式的 height 视为比基于内容的隐式高度更强的指令。 因此,该元素的布局可能与 仅仅填充内容直到该高度时的布局存在很大差异。 为元素提供显式内在内部尺寸 可以保留在布局中忽略其内容所带来的性能优势, 同时仍允许它像具有内容那样确定尺寸。

名称: contain-intrinsic-size
值: [ auto? [ none | <length [0,∞]> ] ]{1,2}
初始值: 见各个属性
适用于: 见各个属性
继承: 见各个属性
百分比: 见各个属性
计算值: 见各个属性
动画类型: 见各个属性
规范顺序: 依语法而定
测试

contain-intrinsic-size 是一个简写属性, 用于设置 contain-intrinsic-width 和 contain-intrinsic-height 属性。

第一个值表示 contain-intrinsic-width 值, 第二个值表示 contain-intrinsic-height 值。 如果只给出一个值, 则它应用于两个属性。

5.2.1. 上次记忆的尺寸

尺寸包含对于确保页面能够高效渲染非常有价值, 它限制了因元素渲染发生变化 而可能触发的布局工作范围。 然而,它对作者也有很强的限制, 要求作者正确预测元素的尺寸; 如果这个猜测不正确, 即使只差一点, 也可能导致难看的滚动条或内容被意外隐藏。

contain-intrinsic-size 的 auto 关键字提供了一种折中方案: 如果一个元素曾经不受尺寸包含约束, 此值会使元素记住其尺寸 (由布局按正常方式计算); 随后,如果元素之后获得尺寸包含, 它就会使用记住的尺寸, 从而既获得尺寸包含的性能优势, 又很可能能根据其内容准确确定尺寸。

只有能够作为 ResizeObserver 目标的元素才能具有上次 记忆的尺寸。

元素的上次记忆的尺寸 按如下方式确定:

注: 上次记忆的尺寸是附加在 元素上的状态, 而不是附加在该元素生成的某个特定框上。 只要元素在 contain-intrinsic-size 属性中保留 auto 关键字, 即使经历诸如切换到/从 display: none 这样的变化, 它仍会记住其上次记忆的尺寸。

测试

5.2.2. 与 overflow: auto 的交互

contain-intrinsic-size 属性提供了对 作者预期元素内容大小的估计, 但这个估计不是真实内容, 也不代表需要向用户显示任何东西。 因此,具有 overflow: auto 的元素不得因为 contain-intrinsic-size 而生成滚动条。

但是,如果 contain-intrinsic-size 表明一个足够大的尺寸, 使得元素若实际包含该尺寸的内容时会生成滚动条, 那么应当按照这种假设内容, 将元素的尺寸确定为仿佛它生成了这些滚动条。

在以下示例代码中:
div {
  width: max-content;
  contain-intrinsic-size: 100px 100px;
  overflow: auto;
}

元素最终的宽度为 100px,高度为 100px: contain-intrinsic-size 提供了 max-content 宽度, 以及高度。

如果元素随后具有高度为 150px 的内容, 它会显示垂直滚动条; 如果滚动条不是叠加式的, 它会占用这 100px 宽度中的一部分, 从而为内容流动留下更小的空间 (通常大约为 84px)。 (参见 CSS 溢出 3 § 4 滚动条与布局。)

即使现在可用于内容的水平空间少于 100px, 也不会仅仅因为 contain-intrinsic-size 指示了 100px 的宽度就生成水平滚动条; 只有当实际内容 包含不可断开的部分 且其宽度大于剩余空间时,才会发生这种情况。

相比之下,在以下示例代码中:
div {
  width: max-content;
  contain-intrinsic-size: 100px 100px;
  height: 50px;
  overflow: auto;
}

元素具有固定的 50px 高度, 但 contain-intrinsic-size 指示了 100px 的“估计内容高度”。 因此,元素假定在填充实际内容时 它将需要一个垂直滚动条, 从而得到一个略大于 100px 的 max-content 宽度 (通常大约为 116px), 以容纳由 contain-intrinsic-size 估计的 100px max-content 宽度, 以及垂直滚动条的宽度(通常大约为 16px)。

但是,即使元素基于需要滚动条的假设预留了空间, 它也不会真的生成滚动条, 除非实际内容发生溢出: 如果最终包含的内容高度低于 50px, 则完全不会生成垂直滚动条, 但元素仍然会有 116px 宽。

5.3. 响应式尺寸的 iframe:frame-sizing 属性

名称: frame-sizing
值: auto | content-width | content-height | content-block-size | content-inline-size
初始值: auto
适用于: 替换元素(但详情见下文)
继承: 否
百分比: 不适用
计算值: 按指定值
规范顺序: 依语法而定
动画类型: 离散

一些替换元素可以包含“普通”的流式内容, 例如 HTML iframe。 出于隐私和安全原因, 默认情况下,这些元素 不会向外部页面暴露任何有关其内部内容尺寸的信息, 而是仅使用一个静态的、预先确定的内在尺寸, 并使其内容可滚动。 frame-sizing 属性 允许这些元素选择暴露其实际内容尺寸, 该尺寸称为其内部布局内在尺寸。 各值含义如下:

auto

忽略元素的内部布局内在尺寸(如果有)。

content-width
content-height
content-block-size
content-inline-size

如果元素具有内部布局内在尺寸, 则其内在尺寸 的相应维度 (宽度或高度) 取自内部布局内在尺寸。 (另一个维度按正常方式确定。)

逻辑方向根据元素的书写 模式解析。 (而不是嵌入文档的书写模式。)

哪些元素可以具有内部布局内在尺寸, 以及该尺寸如何确定, 由文档语言决定。 在 HTML 中,只有 iframe 元素可以具有内部布局内在 尺寸, 而且只有在所包含文档也通过 <meta name=responsive-embedded-sizing> 元素选择启用时才可以。 (参见 § 5.3.1 HTML iframe 详细信息。)

当嵌入文档具有以下 HTML 时:
<meta name="responsive-embedded-sizing">
<div style="height: 500px"></div>

并且嵌入它的文档具有以下 CSS:

iframe {
  frame-sizing: content-height;
}

iframe 的高度最初会是默认的 iframe 高度(通常为 150px), 但在 iframe 的文档加载后会更新为 500px。

此外, 内部文档可以调用 window.requestResize() 以在之后更新其内部布局内在尺寸。

5.3.1. HTML iframe 详细信息

在 HTML 中,只有 iframe 元素可以具有内部布局内在尺寸, 并且只有当 iframe 的嵌入文档以适当方式选择启用时才可以。

HTML Document 对象 关联有一个响应式嵌入尺寸标志, 其初始状态为未设置。 在文档初始解析期间, 根据以下哪种情况最先发生, 将其设置为 true 或 false:

一旦设置为 true 或 false, 在该 Document 的整个生命周期内,该标志的值都不会再次更改。

注: 目前,HTML meta 元素出现在 HTML 文档的 head 中, 是嵌入文档在 HTML 中选择启用此功能的唯一方式。 这意味着 iframe 中的 SVG 文档无法这样做。

注: 由于 HTML 解析器的一些特殊行为, meta 元素在技术上可以出现在 head 和 body 元素之间, 并会被重新设为 head 的子元素。 对于 <meta name=responsive-embedded-sizing> 元素来说,这仍然是有效位置, 因为此时 body 尚未被打开。 请注意,大多数 HTML 元素都会隐式打开一个 body 元素, 即使 body 起始标签并不存在; 如果文档完全缺少这样的元素, 则会自动生成并插入一个空元素。

内部布局内在尺寸首先根据 嵌入文档在触发 DOMContentLoaded 事件之后的第一次布局结果来设置, 并在 load 事件于 Window 上触发时再次设置。 嵌入文档后续的内容、样式或布局变化 不会自动影响内部布局内在 尺寸, 但请参见 requestResize()。

嵌入文档还可以具有一个锁定的嵌入 ICB 尺寸, 其初始值为 null。 如果文档在执行布局时,其响应式嵌入尺寸标志为 true, 且其锁定的嵌入 ICB 尺寸为 null, 则会将其当前初始包含块尺寸记录为其锁定的嵌入 ICB 尺寸。 在后续布局中, 它会使用其锁定的嵌入 ICB 尺寸, 而不是按正常方式计算其初始包含块尺寸。

注: 这种对 ICB 的冻结 降低了出现布局循环的可能性 (例如 iframe 文档的尺寸略大于其 ICB, 然后父 iframe 调整尺寸以匹配, 下一次布局又使其略大于 ICB, 如此无限循环)。

我们是否需要提供一种方式 强制 iframe 忘记其锁定的嵌入 ICB 尺寸? 也许可以关闭再重新开启 frame-sizing?

导航 iframe 的文档 会使它忘记其锁定的嵌入 ICB 尺寸。 只要新文档的响应式嵌入尺寸标志尚未设置, 它就不会忘记其内部布局内在尺寸。 一旦标志被设置(无论为 true 还是 false), 内部布局内在尺寸就会被遗忘; 如果标志被设置为 true, 则两者之后都会按正常方式重新计算。

5.3.2. 对 Window 接口的扩展

partial interface Window {
  undefined requestResize();
};
当调用 requestResize() 时:
  1. 令 navigable 为以 this 作为其内容窗口的可导航对象。 如果 navigable 不是子可导航对象, 则抛出一个 NotAllowedError DOMException。

  2. 令 host element 为其内容可导航对象是 navigable 的可导航容器。 如果 host element 不是 HTML iframe 元素, 则抛出一个 NotAllowedError DOMException。

  3. 令 document 为 this 的活动文档。 如果 document 的响应式嵌入尺寸标志 未设置或为 false, 则抛出一个 NotAllowedError DOMException。

  4. 如果 document 有待处理的样式或布局更改, 则执行这些更改。

  5. 将 host element 的内部布局内在尺寸 设置为 this 的滚动区域的宽度和高度。

5.4. 内在尺寸贡献

CSS 尺寸 3 § 5.2 内在贡献

5.5. 将 Min-Content 尺寸贡献归零:min-intrinsic-sizing 属性

名称: min-intrinsic-sizing
值: legacy | zero-if-scroll || zero-if-extrinsic
初始值: legacy
适用于: 除行内 框之外的所有元素
继承: 否
百分比: 不适用
计算值: 按指定值
规范顺序: 依语法而定
动画类型: 离散

此属性非常 需要重新斟酌名称。

此属性定义非替换框的min-content 贡献 是否会在特定情况下被“压缩”。 各值含义如下:

legacy
框的min-content 贡献 按正常方式处理。
zero-if-scroll
如果框在该轴上是滚动 容器, 则框的min-content 贡献 会被“压缩”。
zero-if-extrinsic
如果框具有一个外在的 首选或最大尺寸, 则框的min-content 贡献 会被“压缩”。

注: 这是大多数替换元素的默认行为。

以下规则会使所有滚动 容器 在向上传递其尺寸贡献时 基本忽略其内容 (除非它们明确请求了基于内容的尺寸):
*, ::before, ::after { min-intrinsic-sizing: zero-if-scroll; }

如果滚动容器包含表格或很长的不可断开文本行等大型项目, 这可以防止它把祖先元素的尺寸撑大。 同时,它允许非滚动容器的框 继续影响其祖先的min-content 尺寸。

注: zero-if-scroll 的行为本来会是更好的 默认值, 但由于 Web 兼容性问题,它不能作为初始值。:(

“压缩后”的min-content 贡献 通过假装框为空来计算, 但在考虑由显式的 min-content、max-content 和 fit-content 值 对尺寸属性施加的尺寸约束时除外。

5.6. 新的列尺寸值:stretch、min-content、max-content、fit-content 和 fit-content() 值

名称: column-width
新值: <box-size>
计算值: 按指定值,其中 <length-percentage> 值会被计算
动画类型: 按计算值类型

当作为 column-width 的值使用时, 这些新关键字指定最佳列宽:

stretch
将最佳列宽指定为多列容器的stretch-fit 行内尺寸。
min-content
将最佳列宽指定为多列容器内容的min-content 行内尺寸。
max-content
将最佳列宽指定为多列容器内容的max-content 行内尺寸。
fit-content
将最佳列宽指定为 min(max-content 行内尺寸, max(min-content 行内尺寸, stretch-fit 行内尺寸))。
fit-content(<length-percentage>)
将最佳列宽指定为 min(max-content 尺寸, max(min-content 尺寸, <length-percentage>))

注: 列宽不会因列而异。 当列宽由多列容器的内容决定时 (如上述关键字), 会考虑其全部内容, 并由所有列共享计算出的宽度。

6. 外在尺寸确定

CSS 尺寸 3 § 4 外在尺寸 确定

6.1. Contain-fit 尺寸确定:在保持纵横比的同时拉伸

Contain-fit 尺寸确定本质上应用 stretch-fit 尺寸确定, 但会减小框在一个轴上的尺寸, 以保持框的首选纵横比, 类似于 contain 关键字在 object-fit 和 background-size 属性中的行为。

首先,确定一个目标矩形:

  1. 初始目标矩形的尺寸为框的包含块尺寸, 任何不确定尺寸都假定为无穷大。 如果两个维度都是不确定的, 则初始目标矩形被设置为 与该框在进行stretch-fit 尺寸确定时的外边缘相匹配。
  2. 接下来,如果框具有非 none 的 max-width 或 max-height, 则目标矩形在受影响维度上会被限制为 小于或等于框的外边距框的“最大尺寸”, 即如果框按其 max-width/height 进行尺寸确定时, 其外边距框所具有的尺寸。 (请注意,与正常的框尺寸确定 规则一致, 此“最大尺寸”的下限受到框的 min-width/min-height 的影响。)
  3. 最后,目标矩形会在一个维度上缩小 到使其与框的首选纵横比匹配所需的最小程度。

每个维度上的 contain-fit 尺寸 是将框通过 stretch-fit 方式适配到目标矩形后得到的尺寸。

复制 stretch-fit 最终在外边距折叠方面采用的处理方式。

如果某个维度存在最小尺寸, 且在遵循纵横比时会导致目标矩形溢出, 我们应该遵循纵横比还是让图像变形? 如果是前者,我们需要增加一个类似于 #2 的步骤来应用相关最小值。

6.2. 百分比尺寸确定

…

变更

自 2021 年 5 月 5 日工作草案以来的变更

自 2021 年 5 月 5 日 工作草案以来的重要变更包括:

自 2020 年 10 月 20 日工作草案以来的变更

自 2020 年 10 月 20 日 工作草案以来的重要变更包括:

自 2020 年 5 月 26 日 首次公开工作草案以来的重要变更包括:

自第 3 级以来的新增内容

致谢

特别感谢 Aaron Gustafson、L. David Baron 对本模块作出的贡献。

隐私考虑

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

安全考虑

本规范未引入新的安全考虑。

一致性

文档约定

一致性要求通过描述性断言与 RFC 2119 术语相结合来表达。本文档规范性部分中的关键字“必须”、 “不得”、“要求”、“应”、“不应”、“应该”、“不应该”、 “推荐”、“可以”和“可选”,应按照 RFC 2119 中的说明进行解释。 不过,为了便于阅读,这些词在本规范中 并非全部以大写字母形式出现。

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

本规范中的示例以“例如”一词引出, 或使用 class="example" 与规范性文本分隔, 如下所示:

这是一个信息性示例的例子。

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

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

告诫是采用特殊样式以引起特别注意的规范性章节,并使用 <strong class="advisement"> 与其他规范性文本分隔,如下所示: UA 必须提供无障碍替代方案。

测试

与本规范内容相关的测试 可以记录在像这样的“测试”块中。 任何此类块都是非规范性的。


一致性类别

对本规范的一致性 定义了三种一致性类别:

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

如果一个样式表中所有使用本模块所定义语法的语句, 按照通用 CSS 语法以及本模块所定义各项功能各自的语法 都是有效的, 则该样式表符合本规范。

如果一个渲染器除了按照 相应规范的定义解释样式表之外,还通过正确解析 本规范定义的所有功能并相应地渲染文档来支持它们, 则该渲染器符合本规范。不过,如果 UA 因设备限制而无法正确渲染文档, 并不会使该 UA 不符合规范。(例如,不要求 UA 在单色显示器上渲染颜色。)

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

部分实现

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

不稳定和专有功能的实现

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

非实验性实现

一旦规范达到候选推荐标准阶段, 就可以进行非实验性实现,而实现者应该 对任何能够证明按照规范正确实现的 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 日。WD。URL:https://www.w3.org/TR/css-align-3/
[CSS-BACKGROUNDS-3]
Elika Etemad; Brad Kemper. CSS 背景和 边框模块第 3 级。2024 年 3 月 11 日。CRD。URL:https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS 框模型模块第 4 级。2024 年 8 月 4 日。WD。URL:https://www.w3.org/TR/css-box-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-CONTAIN-1]
Tab Atkins Jr.; Florian Rivoal. CSS 包含模块 第 1 级。2024 年 6 月 25 日。REC。URL:https://www.w3.org/TR/css-contain-1/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS 包含模块第 2 级。2022 年 9 月 17 日。WD。URL:https://www.w3.org/TR/css-contain-2/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display 模块第 4 级。2025 年 11 月 6 日。WD。URL:https://www.w3.org/TR/css-display-4/
[CSS-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS 图像 模块第 3 级。2023 年 12 月 18 日。CRD。URL:https://www.w3.org/TR/css-images-3/
[CSS-IMAGES-4]
Elika Etemad; Tab Atkins Jr.; Lea Verou. CSS 图像 模块第 4 级。2025 年 9 月 30 日。WD。URL:https://www.w3.org/TR/css-images-4/
[CSS-LOGICAL-1]
Elika Etemad; Rossen Atanassov. CSS 逻辑属性 和值模块第 1 级。2025 年 12 月 4 日。WD。URL:https://www.w3.org/TR/css-logical-1/
[CSS-MULTICOL-2]
Florian Rivoal; Rachel Andrew. CSS 多列布局 模块第 2 级。2024 年 12 月 19 日。FPWD。URL:https://www.w3.org/TR/css-multicol-2/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS 溢出模块 第 3 级。2025 年 10 月 7 日。WD。URL:https://www.w3.org/TR/css-overflow-3/
[CSS-PAGE-3]
Elika Etemad. CSS 分页媒体模块第 3 级。 2023 年 9 月 14 日。WD。URL:https://www.w3.org/TR/css-page-3/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS 框尺寸模块 第 3 级。2021 年 12 月 17 日。WD。URL:https://www.w3.org/TR/css-sizing-3/
[CSS-SIZING-4]
Tab Atkins Jr.; Elika Etemad; Jen Simmons. CSS 框 尺寸模块第 4 级。2021 年 5 月 20 日。WD。URL:https://www.w3.org/TR/css-sizing-4/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS 值和单位 模块第 3 级。2024 年 3 月 22 日。CRD。URL:https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS 值和单位 模块第 4 级。2024 年 3 月 12 日。WD。URL:https://www.w3.org/TR/css-values-4/
[CSS-VALUES-5]
Tab Atkins Jr.; Elika Etemad; Miriam Suzanne. CSS 值 和单位模块第 5 级。2024 年 11 月 11 日。WD。URL:https://www.w3.org/TR/css-values-5/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS 书写模式第 4 级。2019 年 7 月 30 日。CR。URL:https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; et al. 层叠样式表第 2 级修订版 1(CSS 2.1)规范。2011 年 6 月 7 日。REC。URL:https://www.w3.org/TR/CSS2/
[CSS3COL]
Florian Rivoal; Rachel Andrew. CSS 多列布局 模块第 1 级。2024 年 5 月 16 日。CR。URL:https://www.w3.org/TR/css-multicol-1/
[CSSOM-VIEW-1]
Simon Fraser; Emilio Cobos Álvarez. CSSOM 视图 模块。2025 年 9 月 16 日。WD。URL:https://www.w3.org/TR/cssom-view-1/
[DOM]
Anne van Kesteren. DOM 标准。现行标准。 URL:https://dom.spec.whatwg.org/
[HTML]
Anne van Kesteren; et al. HTML 标准。 现行标准。URL:https://html.spec.whatwg.org/multipage/
[RESIZE-OBSERVER-1]
Aleks Totic; Greg Whitworth. Resize Observer。2020 年 2 月 11 日。FPWD。URL:https://www.w3.org/TR/resize-observer-1/
[RFC2119]
S. Bradner. 用于 RFC 中 指示要求级别的关键字。1997 年 3 月。当前最佳实践。URL:https://datatracker.ietf.org/doc/html/rfc2119
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 标准。现行 标准。URL:https://webidl.spec.whatwg.org/

非规范性参考文献

[CSS-GRID-2]
Tab Atkins Jr.; et al. CSS 网格布局模块第 2 级。2025 年 3 月 26 日。CRD。URL:https://www.w3.org/TR/css-grid-2/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS 定位布局 模块第 3 级。2025 年 10 月 7 日。WD。URL:https://www.w3.org/TR/css-position-3/

属性索引

名称 值 初始值 适用于 继承 百分比 动画类型 规范顺序 计算值 逻辑属性组
aspect-ratio auto || <ratio> auto 除行内框以及内部 ruby 或表格框之外的所有元素 否 不适用 按计算值 依语法而定 指定的关键字或一对数字
contain-intrinsic-block-size auto? [ none | <length [0,∞]> ] none 具有尺寸包含的元素 否 不适用 按计算值类型 依语法而定 按指定值,其中 <length> 值会被计算 contain-intrinsic-size
contain-intrinsic-height auto? [ none | <length [0,∞]> ] none 具有尺寸包含的元素 否 不适用 按计算值类型 依语法而定 按指定值,其中 <length> 值会被计算 contain-intrinsic-size
contain-intrinsic-inline-size auto? [ none | <length [0,∞]> ] none 具有尺寸包含的元素 否 不适用 按计算值类型 依语法而定 按指定值,其中 <length> 值会被计算 contain-intrinsic-size
contain-intrinsic-size [ auto? [ none | <length [0,∞]> ] ]{1,2} 见各个属性 见各个属性 见各个属性 见各个属性 见各个属性 依语法而定 见各个属性
contain-intrinsic-width auto? [ none | <length [0,∞]> ] none 具有尺寸包含的元素 否 不适用 按计算值类型 依语法而定 按指定值,其中 <length> 值会被计算 contain-intrinsic-size
frame-sizing auto | content-width | content-height | content-block-size | content-inline-size auto 替换元素(但详情见下文) 否 不适用 离散 依语法而定 按指定值
max-size <'max-width'> <'max-height'>? none 所有元素 见各个属性 见各个属性 见各个属性 依语法而定 见各个属性
min-intrinsic-sizing legacy | zero-if-scroll || zero-if-extrinsic legacy 除行内框之外的所有元素 否 不适用 离散 依语法而定 按指定值
min-size <'min-width'> <'min-height'>? auto 所有元素 见各个属性 见各个属性 见各个属性 依语法而定 见各个属性
size <'width'> <'height'>? auto 所有元素 见各个属性 见各个属性 见各个属性 依语法而定 见各个属性

IDL 索引

partial interface Window {
  undefined requestResize();
};

议题索引

本规范是相对于 CSS 尺寸第 3 级的差异规范。 它目前是一份探索性工作草案: 如果你正在实现任何内容,请以第 3 级作为参考。 一旦本草案达到 CR,我们会将第 3 级的文本合并到本草案中。↵
CSS 尺寸 3 § 2 术语 ↵
CSS 尺寸 3 § 3 指定框尺寸 ↵
CSS 尺寸 3 § 3.1 尺寸属性 ↵
size 属性 需要从 CSSOM 中的 首选 简写顺序中排除, 以避免兼容性问题以及与 @page 的冲突。↵
CSS 尺寸 3 § 3.2 尺寸值:<length-percentage>、auto | none、min-content、max-content 和 fit-content() 值 ↵
我们仍在完善本节的细节。 如果这里指定的任何行为 会导致具有首选纵横比的替换元素 与在 CSS2、 弹性布局和 网格布局 规范共同要求下(不应用本规范时)的行为不同, 那么这是一个错误,应报告给 CSSWG。 这里有一份尚未关闭的 aspect-ratio 议题列表。↵
CSS2.1 并未清晰地区分 替换元素与具有纵横比的元素; 需要找出具体哪些情况不明确,并对其作出定义, 要么在相应的第 3 级规范中,要么在这里。↵
当我们把所有尺寸信息移到这里, 而不是强行塞进 2.1 时, 核心原则就只是: 比率确定轴中解析后的首选 尺寸 (在应用 min/max 之前) 会通过该比率传递。 min/max 约束随后再进行传递, 然后分别应用到各个轴,而不再考虑纵横比。↵
本节的编写方式可能不正确。[议题 #6071] ↵
CSS 尺寸 3 § 5.1 内在尺寸 ↵
我们是否需要提供一种方式来强制 iframe 忘记其锁定的嵌入 ICB 尺寸? 也许可以关闭再重新开启 frame-sizing?↵
CSS 尺寸 3 § 5.2 内在贡献 ↵
此属性非常需要重新斟酌名称。↵
CSS 尺寸 3 § 4 外在尺寸确定 ↵
复制 stretch-fit 最终在外边距折叠方面采用的处理方式。↵
如果某个维度存在最小尺寸, 且在遵循纵横比时会导致目标矩形溢出, 我们应该遵循纵横比还是让图像变形? 如果是前者,我们需要增加一个类似于 #2 的步骤来应用相关最小值。↵