CSS 节奏尺寸模块 第 1 级

W3C 工作草案,

关于本文件的更多细节
本版本:
https://www.w3.org/TR/2026/WD-css-rhythm-1-20260217/
最新发布版本:
https://www.w3.org/TR/css-rhythm-1/
编辑草案:
https://drafts.csswg.org/css-rhythm/
历史:
https://www.w3.org/standards/history/css-rhythm-1/
反馈:
CSSWG 问题仓库
规范内联
编辑:
Google
Elika J. Etemad / fantasaiApple
为本规范建议编辑:
GitHub 编辑器
测试套件:
https://wpt.fyi/results/css/css-rhythm/

摘要

本模块包含用于将内容尺寸 对齐到单位尺寸的整数倍的 CSS 功能。

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

本文档状态

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

本文档由 CSS 工作组 按照 推荐标准 轨道 发布为 工作草案。 作为工作草案发布 并不意味着 W3C 及其成员的认可。

这是一份草案文档, 并且可能随时被更新、替换 或被其他文档废止。 不应将本文档作为除“进行中的工作”之外的内容来引用。

请通过 在 GitHub 中提交 issue(推荐) 发送反馈, 并在标题中包含规范代码“css-rhythm”,例如: “[css-rhythm] …评论摘要…”。 所有 issue 与评论都会被归档。 或者,也可以将反馈发送到(已归档的)公开邮件列表 www-style@w3.org

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

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

1. 引言

本规范提供了一些特性,用于按照用例所期望的规则来控制 CSS 对象的尺寸。

在很多情况下,希望将 CSS 对象的尺寸控制为某个步进单位的整数倍。 本级规范聚焦于以下情况。

通过以整数倍的方式堆叠块, 作者可以在多列、分页、滚动吸附的块 或多个绝对定位放置的块之间对齐内容, 以保持纵向节奏。

此外,通过控制行框的高度, 不同字体的文本行也能形成一致的视觉效果, 从而提升可读性。

在多列文档中,通过图片与不同大小的文字保持纵向节奏。

1.1. 东亚随意纵向节奏

在东亚,一种较为随意的纵向节奏变体被广泛使用。

纵向节奏通常用于专业排版。 虽然它能提升可读性, 但其间距约束要求对空间进行谨慎且周密的设计。

东亚的随意变体 最初源于 80 年代传统文字处理器的技术限制。 但当这些技术限制在更现代的技术中被解除后, 在表意文字近似方块的视觉效果帮助下, 东亚作者更倾向于保留其中一部分特性。

在这种纵向节奏变体中, 为了便于非专业作者使用,其要求被放宽。 文本仍然遵循节奏, 因而大多数表意文字大体上仍落在网格上; 但当作者指定边框、外边距或其他可能打破节奏的对象时, 节奏会发生偏移,而不是被强行维持。 严格的纵向节奏在这类情况下常因被强制跳变而让非专业作者感到意外; 而这种变体把文本上的节奏与非专业作者的易用性结合在一起。

自 90 年代中期以来,这种变体在东亚被非常广泛地接受, 以至于东亚使用的大多数主流文字处理器 默认都���供了类似功能。

在东亚出版排版中, 纵向节奏是重要属性之一, 但它相对于其他属性的优先级 会因文档类型而异。 在单栏文档中, 其优先级弱于多栏文档。 文本应当处在纵向节奏上, 但人们往往更倾向于让边框、外边距 或其他属性优先于节奏。 在这种情况下,节奏会被偏移,类似于随意变体。

在本规范中, 当 line-height-step 属性在不与 block-step 属性 或 line-grid 属性组合使用时, 会产生与东亚随意纵向节奏类似的效果。

它对东亚出版排版也可能很有帮助, 这取决于所期望的纵向节奏强度。

对于纵向节奏的其他情况, 预期会使用 block-step 属性或 line-grid 属性, 或者将 line-height-step 属性与它们一��使用。

1.2. 值定义

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

除各自定义中列出的属性特定值之外, 本规范中定义的所有属性 也都接受 CSS 全局关键字 作为其属性值。 为了便于阅读,这些关键字未在文中重复显式列出。

2. 调整块级框高度

最常见的排版节奏问题是块级侵入: 当连续的段落级文本 被插图、标题等不同尺寸的内容打断时, 行与行之间的节奏就可能被打乱。 块步进属性允许通过将这些元素的高度限制为指定步长的整数倍, 使其适配节奏间隔。 这使得打断前后的内容 能保持连续的节奏。

标题与块引用具有不同的字体大小和行高, 导致各列中文本不齐。
在块前后插入空间(以彩色边框显示) 恢复了纵向节奏。

一致地使用块步进属性 可以产生并行内容流所需的严格网格化布局; 而按元素指定步长 也允许某些打断在流中采用其自然尺寸, 并在之后重新开始纵向节奏。 这在单栏布局中可能很有用: 纵向节奏对于保持视觉连续性很重要, 但旁边没有需要对齐的内容。 在这些情况下, 对于在视觉上使打断前后内容脱节的大型打断项, 可以让该项周围的最优间距 优先于对连续网格的严格遵循 (通过指定 block-step: none,即初始值)。

该提案可以简化为仅使用 block-step-size 属性, 并且只通过其缩写形式 block-step 来表示。 本级规范很可能最多只包含 block-step-sizeblock-step-insert, 而将 block-step-alignblock-step-round 留待未来如有需求再加入。 完整设计在此给出,用于当前讨论及未来参考。

该提案目前被定义为仅适用于块级框。此限制仅为简化第一次迭代; 它最终应扩展到所有尊重指定高度的布局模式。

2.1. 指定步长:block-step-size 属性

名称: block-step-size
值: none | <length [0,∞]>
初始值: none
适用对象: 块级框
是否继承:
百分比: 不适用
计算值: 指定关键字或绝对长度
规范顺序: 按语法
动画类型: 按计算值类型
Tests

此属性为块级框的 块尺寸 定义 步进单位。 当 步进单位 被设置为正的 <length> 时, 该框的外部高度会被舍入 (见 block-step-round) 到该单位的最接近整数倍。 负的 <length> 值无效。

none 之外的值会使该框建立一个独立的格式化上下文

注:这是为了避免祖先的浮动 突出进入该框所带来的复杂性: 改变其有效的上外边距或内边距可能会改变 哪些内容会被浮动影响以及影响程度, 从而需要重新布局 (并且在该框的高度依赖其内容时,可能产生循环)。

这是打破此类循环的最佳方式吗? [Issue #1901]

在外边距发生 折叠 的情况下, 计算其外部尺寸时只考虑该框自身的外边距。

当一个框发生 分片 时, 步进尺寸按每个分片分别应用。

我们是否应将其与 text-box-edge/text-box-trim 的继承与应用模型对齐? [Issue #1902]

2.2. 指定间距类型:block-step-insert 属性

名称: block-step-insert
值: margin-box | padding-box | content-box
初始值: margin-box
适用对象: 块级框
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法
动画类型: 离散
Tests

此属性指定由应用 block-step-size 派生出的额外间距 是作为框边框之内的额外空间(类似 padding) 插入,还是作为框边框之外的额外空间(类似 margin) 插入, 或者改变内容可用高度 (类似 min-heightmax-height)。

各值含义如下:

margin-box
block-step-size 导致的调整所产生的任何额外空间 会作为额外外边距插入到框边框之外。
padding-box
block-step-size 导致的调整所产生的任何额外空间 会作为额外内边距插入到框边框之内。
content-box
block-step-size 导致的调整所产生的任何额外空间 会通过增加 内容区域 的高度 插入到框边框之内。

2.3. 指定对齐:block-step-align 属性

名称: block-step-align
值: auto | center | start | end
初始值: auto
适用对象: 块级框
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法
动画类型: 离散
Tests

此属性指定由应用 block-step-size 派生出的额外间距 是插入到该框之前、插入到该框之后,还是分摊到该框两侧。

各值含义如下:

auto
如果 block-step-insertmargin-box: 若 align-selfstartendcenter,则按该值处理; 否则按 center 处理。
center
block-step-size 导致的调整所产生的任何额外空间 会被分割,并各有一半应用于该框的两侧。
start
block-step-size 导致的调整所产生的任何额外空间 会插入到该框的 end 侧。
end
block-step-size 导致的调整所产生的任何额外空间 会插入到该框的 start 侧。

定义与 align-content 的交互。 [Issue #11206]

在所有情况下, 由于未强制的分片断点导致被截断或省略的外边距 不能添加额外间距 (见 [CSS3-PAGE][CSS-BREAK-3]); 因此若 block-step-insertmargin-box, 则由应用 block-step-size 派生出的所有额外空间 必须插入到该分片的相反一侧 (无论 block-step-align 为何)。

该规则正确吗?还是说 即便在分片边界处也应遵循 block-step-align[Issue #1260]

2.4. 舍入方法:block-step-round 属性

名称: block-step-round
值: up | down | nearest
初始值: up
适用对象: 块级框
是否继承:
百分比: 不适用
计算值: 指定关键字
规范顺序: 按语法
动画类型: 离散
Tests

此属性指定由 block-step-size 引起的调整 是插入正空间还是负空间。

各值含义如下:

up
该框的外部尺寸会被增大(插入正空间) 以满足 block-step-size 约束。
down
该框的外部尺寸会被减小(插入负空间) 以满足 block-step-size 约束。
nearest
该框的外部尺寸要么增大(同 up),要么 减小(同 down)——以绝对变化量最小者为准——从而满足 block-step-size 约束。 若两种选择的变化量相同, 则增大尺寸。

2.5. 块步调整简写:block-step 简写

名称: block-step
值: <'block-step-size'> || <'block-step-insert'> || <'block-step-align'> || <'block-step-round'>
初始值: 见各个属性
适用对象: 块级框
是否继承:
百分比: 不适用
计算值: 见各个属性
动画类型: 见各个属性
规范顺序: 按语法
Tests

简写属性允许在一条声明中设置 block-step-sizeblock-step-insertblock-step-align 以及 block-step-round。 省略的值会被设置为该属性的初始值。

建议作者使用此简写,而不是分别使用各长写属性, 除非确有需要让各长写属性独立层叠。

3. 调整行框高度:line-height-step 属性

名称: line-height-step
值: <length [0,∞]>
初始值: 0
适用对象: 块容器
是否继承:
百分比: ��适用
计算值: 绝对长度
规范顺序: 按语法
动画类型: 按计算值类型

此属性为行框高度定义 步进单位步进单位是纵向节奏的长度, 通常是正文相邻两条基线之间的距离。 正文应能容纳在一个 步进单位 之内, 而诸如标题等更高的行 应具有两个或更多 步进单位 的高度。 纵向节奏通过使所有行的高度成为 步进单位 的整数倍来创建。

步进单位 被设置为正的 <length> 时, 行框高度会向上舍入到 最接近的该单位的整数倍。 负的 <length> 值无效。

[CSS2] §10.8 行高计算 定义了 如何从其行内级内容计算行框的高度。 舍入应用于行框的最终高度, 额外空间会平均分配到行框的 over 侧与 under 侧, 从而使原始行框在该 步进单位 的整数倍高度中居中显示。 此调整通过假定行框中存在一个行内级框(其 A' 与 D' 已被调整)来完成。 该行内级框不影响 vertical-align 属性的对齐点, 但相对于行框对齐的取值除外。

将计算得到的行框高度向上舍入。
是否应当可动画化? 似乎没有用例,但为了一致性是否需要?

在下面的例子中, 每个段落中的行框高度都会向上舍入到 步进单位

:root {
  font-size: 12pt;
  --my-grid: 18pt;
  line-height-step: var(--my-grid);
}
h1 {
  font-size: 20pt;
  margin-top: calc(2 * var(--my-grid));
}
p {
  margin: 0;
}

<h1> 中的行框无法容纳在一个 步进单位 中,因此占用两个; 但它仍会在这两个 步进单位 内居中。

作者可以像上面的例子那样,使用 var()calc() 来保持外边距或其他属性为 步进单位 的整数倍。

如果作者愿意, Sass 之类的工具可以使这类声明更简短。

$gu: 18px;

@function gu($n) {
  @return $n * $gu;
}

h1 {
  font-size: 20pt;
  margin: gu(1.2) auto gu(1.8);
}
通常建议将 line-height 设置得低于 步进单位。 由于 vertical-align 或字体回退等若干因素, 使用的行高可能会增大。

4. 隐私注意事项

本规范未引入除“正确实现它”之外的任何新的隐私泄露。

5. 安全注意事项

本规范未引入除“正确实现它”之外的任何新的安全注意事项。

6. 致谢

若没有以下人士的帮助,本规范不可能完成: Masaharu Akutsu, Yoko Aoki, Takao Baba, Chris Eppstein, Ichiro Inaba, Jxck, Noriko Kase, Motoya Kinoshita, Shinyu Murakami, Tsutomu Nanjo, Kiyoshi Narishima, Charlie Neely, Takuya Nishimura, Katsuhiro Osumi, Florian Rivoal, Hiroshi Sakakibara, Alan Stearns, Masataka Yakura, KADOKAWA Corporation, PixelGrid Inc., 以及 CSS 工作组成员。

7. 变更

首份公开工作草案 以来的变更包括:

一致性

文档约定

一致性要求通过描述性断言与 RFC 2119 术语的组合来表达。规范性部分中的关键词 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”,以及 “OPTIONAL” 应按 RFC 2119 中所述进行解释。 然而,为了便于阅读,这些词在本规范中并未全部以全大写字母出现。

除非某些章节被明确标记为非规范性内容、示例和注释之外,本规范的全部文本均为规范性内容。 [RFC2119]

本规范中的示例以 “例如” 等词引入, 或者使用 class="example" 将其与规范性文本区分开来, 如下所示:

这是一个资料性示例���示例。

资料性注释以 “注” 一词开头,并使用 class="note" 将其与规范性文本区分开来, 如下所示:

注,这是一条资料性注释。

提示(Advisements)是以特殊样式呈现、用于引起特别注意的规范性章节,并使用 <strong class="advisement"> 将其与其他规范性文本区分开来,例如: 用户代理必须提供一种无障碍替代方案。

测试

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


一致性类别

对本规范的一致性 为以下三类一致性类别定义:

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

若某样式表中所有使用本模块定义语法的声明 都符合通用 CSS 语法以及本模块中每个特性各自的语法, 则该样式表符合本规范。

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

若某创作工具编写的样式表在语法上符合通用 CSS 语法以及本模块中各特性的各自语法, 并满足本模块所述的样式表的所有其他一致性要求, 则该创作工具符合本规范。

部分实现

为了使作者能够利用前向兼容的解析规则来指定回退值, CSS 渲染器 必须 将其不具备可用支持级别的任何 at 规则、属性、属性值、关键字 以及其他语法结构视为无效(并 按需忽略)。 尤其是,用户代理 不得 在单个多值属性声明中选择性忽略不支持的组件值而对支持的值予以认可: 若任一值被视为无效(不支持的值必须如此),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 Box Alignment Module Level 3. 30 January 2026. WD. URL: https://www.w3.org/TR/css-align-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 4 August 2024. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad. CSS Fragmentation Module Level 3. 4 December 2018. CR. URL: https://www.w3.org/TR/css-break-3/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 13 January 2022. CR. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 4. 6 November 2025. WD. URL: https://www.w3.org/TR/css-display-4/
[CSS-INLINE-3]
Elika Etemad. CSS Inline Layout Module Level 3. 18 December 2024. WD. URL: https://www.w3.org/TR/css-inline-3/
[CSS-LINE-GRID-1]
Elika Etemad; Koji Ishii; Alan Stearns. CSS Line Grid Module Level 1. 16 September 2014. WD. URL: https://www.w3.org/TR/css-line-grid-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 17 December 2021. WD. URL: https://www.w3.org/TR/css-sizing-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 22 March 2024. CRD. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 12 March 2024. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 30 July 2019. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 7 June 2011. REC. URL: https://www.w3.org/TR/CSS2/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119

资料性参考文献

[CSS-VARIABLES-1]
Tab Atkins Jr.. CSS Custom Properties for Cascading Variables Module Level 1. 16 June 2022. CR. URL: https://www.w3.org/TR/css-variables-1/
[CSS3-PAGE]
Elika Etemad. CSS Paged Media Module Level 3. 14 September 2023. WD. URL: https://www.w3.org/TR/css-page-3/

属性索引

名称 初始值 适用对象 继承 百分比 动画类型 规范顺序 计算值
block-step <'block-step-size'> || <'block-step-insert'> || <'block-step-align'> || <'block-step-round'> 见各个属性 块级框 不适用 见各个属性 按语法 见各个属性
block-step-align auto | center | start | end auto 块级框 不适用 离散 按语法 指定关键字
block-step-insert margin-box | padding-box | content-box margin-box 块级框 不适用 离散 按语法 指定关键字
block-step-round up | down | nearest up 块级框 不适用 离散 按语法 指定关键字
block-step-size none | <length [0,∞]> none 块级框 不适用 按计算值类型 按语法 指定关键字或绝对长度
line-height-step <length [0,∞]> 0 块容器 不适用 按计算值类型 按语法 绝对长度

问题索引

该提案可以简化为仅使用 block-step-size 属性,并且只通过其缩写形式 block-step 来表示。 本级规范很可能最多只包含 block-step-sizeblock-step-insert, 而将 block-step-alignblock-step-round 留待未来如有需求再加入。 完整设计在此给出,用于当前讨论及未来参考��
该提案目前被定义为仅适用于块级框。此限制仅为简化第一次迭代; 它最终应扩展到所有尊重指定高度的布局模式。
这是打破此类循环的最佳方式吗? [Issue #1901]
我们是否应将其与 text-box-edge/text-box-trim 的继承与应用模型对齐? [Issue #1902]
定义与 align-content 的交互。 [Issue #11206]
该规则正确吗?还是说即便在分片边界处也应遵循 block-step-align[Issue #1260]
是否应当可动画化? 似乎没有用例,但为了一致性是否需要?