CSS 间隙模块第 1 级

W3C 工作草案,

关于本文档的更多详细信息
此版本:
https://www.w3.org/TR/2026/WD-css-gaps-1-20260624/
最新发布版本:
https://www.w3.org/TR/css-gaps-1/
编辑草案:
https://drafts.csswg.org/css-gaps-1/
先前版本:
历史:
https://www.w3.org/standards/history/css-gaps-1/
反馈:
CSSWG 问题仓库
编辑:
Kevin Babbitt (Microsoft)
为此规范建议编辑:
GitHub 编辑器
测试套件:
https://wpt.fyi/results/css/css-gaps/

摘要

该模块定义了用于指定容器布局中项目之间间距(“间隙”)的属性。它还 引入了用于在这些间隙内绘制可见分隔线的属性。

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

本文档状态

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

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

这是一份草案文档, 可能随时被其他文档更新、替换 或废弃。 除作为进行中的工作外,不宜引用本文档。

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

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

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

1. 引言

本节不是规范性的。

CSS 多列 1 § 4 列 间隙和分隔线 定义了一些属性,允许 作者控制多列容器中列之间的间距, 并在这些空间中绘制可见的分隔符,例如线条。 我们将这些可见分隔符称为间隙装饰

本规范扩展了先前定义的属性。 它为行方向添加等效属性, 将整套属性应用于其他容器类型, 并对间隙装饰的绘制位置和方式提供额外控制。

1.1. 值定义

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

除了各属性定义中列出的特定于属性的值之外, 本规范定义的所有属性 还接受 CSS 全局关键字作为其属性值。 为了可读性,它们没有被显式重复列出。

2. 盒之间的间隙

虽然 marginpadding 可用于指定单个盒周围的视觉间距, 但有时在给定布局上下文中全局指定相邻盒 之间的间距会更方便, 尤其是当兄弟盒之间的间距 不同于第一个/最后一个盒与容器边缘之间的间距时。

gap 属性, 及其row-gapcolumn-gap 子属性, 为 多列弹性网格布局提供此功能。

间隙列间隙行间隙, 其定义因容器类型而异:

多列容器
列间隙是相邻列盒之间的, 参见 [CSS-MULTICOL-1]

行间隙是由 column-height 建立的列盒行之间的, 参见 [CSS-MULTICOL-2]

弹性 容器
当应用于主轴时 (例如在 row 弹性 容器中的列间隙), 指的是项目之间的 (仿佛在单行中相邻弹性项目之间 插入了一个额外的固定尺寸外边距)。

当应用于交叉轴时 (例如在 row 弹性 容器中的行间隙), 指的是相邻弹性行之间的

网格 容器
网格容器的上下文中, 行间隙列间隙 分别指网格 行网格列之间的。 精确细节参见 CSS 网格布局 1 § 10.1 槽: row-gap、column-gap 和 gap 属性

槽会产生项目之间的最小间距: justify-content/align-content 可能会添加额外间距。 这种额外空间会增加相应间隙的大小。

在所有情况下,当间隙分片断点重合时,它会消失。[CSS-BREAK-3]

注:表格盒不使用 gap 属性 来指定其单元格之间的分隔。 相反,它们使用 border-spacing 属性, 该属性具有略有不同的功能: 它会继承, 并且还指定最外层单元格 与表格边框之间的额外间距 (类似于 space-evenly,而不是 space-between)。

带有跨列元素的多列容器中以橙色显示的列间隙。 注意,列间隙在遇到跨列元素时会断开。
带有 `column-wrap: wrap` 的多列容器中的间隙;列间隙以橙色显示,行间隙以蓝色显示。 注意,多列容器中的列间隙不会与 行间隙重叠,类似于 flex。
网格容器中的间隙;列 间隙以橙色显示,行 间隙以蓝色显示。 注意间隙重叠处的阴影区域。
弹性容器中的间隙;列 间隙以橙色显示,行 间隙以蓝色显示。 注意,与网格不同,flex 中的间隙不会重叠。

2.1. 行和列槽:row-gapcolumn-gap 属性

名称: row-gap, column-gap
值: normal | <length-percentage [0,∞]> | <line-width>
初始值: normal
适用于: 多列容器弹性 容器网格 容器
继承:
百分比: 参见 § 2.3 gap 属性中的百分比
计算值: 指定的关键字,否则为计算后的 <length-percentage>
规范顺序: 按语法
动画类型: 按计算值类型

这些属性在容器中的项目之间指定固定长度的, 以类似于space-between 关键字 (属于内容分布属性) 的方式在它们之间添加空间, 但其大小是固定的,而不是剩余空间的一部分。 column-gap 属性指定“列”之间的间距, 在容器的行内轴中 分隔盒,类似于 inline-axis margin; 而 row-gap 表示“行”之间的间距, 在容器的块轴中分隔盒。

值具有以下含义:

<length-percentage [0,∞]>
<line-width>

按其适用的布局模式所定义, 将行间隙列间隙 指定为该值。

负值无效。 对于百分比, 参见 § 2.3 gap 属性中的百分比

normal

normal 表示在多列容器上的使用值为 1em, 在所有其他上下文中的使用值为 0px

2.2. 间隙简写:gap 属性

名称: gap
值: <'row-gap'> <'column-gap'>?
初始值: 参见各单独属性
适用于: 多列容器弹性 容器网格 容器
继承:
百分比: 参考内容区域的相应尺寸
计算值: 参见各单独属性
规范顺序: 按语法
动画类型: 按计算值类型

此属性是一个简写,可在一个声明中设置 row-gapcolumn-gap。 如果省略 <'column-gap'>, 它会被设置为与 <'row-gap'> 相同的值。

显示外边距和内边距如何增加可见槽大小的图示

注:gap 属性只是盒之间创建的 可见“槽”或“通道”的一个组成部分。 外边距、内边距,或使用分布式对齐 可能会使盒之间的可见分隔 超出 gap 中指定的范围。

2.3. gap 属性中的百分比

通常, 由 gap 属性引入的间隙 旨在表现得像一个具有该间隙大小的空项目/轨道等; 换句话说, 作者应该能够通过只向容器中插入额外的空项目/轨道等 来复现 gap 的效果。

gap 总是相对于元素内容盒的相应大小 解析百分比。 当该大小是确定的时, 行为是明确定义的, 并且在各布局模式之间保持一致。 但是,由于不同布局模式对项目/轨道等的循环百分比大小处理不同, gap 也同样如此:

在网格布局中

如同最小尺寸属性和 外边距/内边距 [CSS-SIZING-3] 一样, 循环百分比大小在确定内在大小贡献时相对于零解析, 但在布局盒的内容时 相对于盒的内容盒解析。

在弹性布局中

循环百分比大小在所有情况下都相对于零解析。

2.4. 旧式间隙属性:grid-row-gapgrid-column-gapgrid-gap 属性

Grid Layout 模块最初使用其自己的一组属性编写, 后来所有此类属性统一为现有的 row-gap/column-gap 命名。 为了与旧内容兼容, 必须按如下方式支持这些带 grid 前缀的名称:

3. 间隙装饰

间隙可以包含间隙装饰, 即绘制在相邻盒之间的可见分隔符(例如线条)。

间隙装饰不占用空间。 也就是说,间隙装饰的存在或宽度不会改变 任何其他内容的位置。 如果间隙装饰比其间隙更宽, 任何相邻盒都会与该装饰重叠, 并且在某些情况下,该装饰可能延伸到容器盒之外。

间隙装饰绘制在 容器边框的正上方。 对于可滚动容器, 注意,虽然容器的边框和背景不会滚动, 但装饰需要随容器中的项目一起滚动。

间隙装饰遵循 应用这些属性的容器所布置的“column”和“row”的定义。 它们依赖容器类型在确定这些术语的含义时考虑书写 模式。 示例参见: CSS 多列 2 § 3 多列模型CSS 弹性盒 1 § 5.1 弹性 流方向:flex-direction 属性、 以及 CSS 网格布局 1 § 3 网格布局 概念和术语

本规范中名称以 "column" 开头的属性适用于列间隙, 名称以 "row" 开头的属性适用于行间隙

3.1. 几何

间隙装饰间隙内绘制为一个或多个间隙装饰 线段

3.1.1. 线段端点

线段端点间隙中心线上的一个点,间隙装饰 线段 可在此开始或结束。 有两种端点类型:

要为间隙 G 创建线段 端点
  1. 间隙的边界:

    G 的两个边界处创建端点:

    当间隙延伸到内容边界时,这些端点与 对应的内容边缘重合。

  2. 间隙内部:

    间隙交汇处G 的一个区域, 其中一个或多个间隙G 相接或重叠。 对每个间隙交汇处创建两个线段 端点

    此顺序(结束线段端点、起始线段端点)反映出 间隙 交汇处对应于一个轨道/项目/列的结束 以及另一个轨道/项目/列的开始。

以下示例说明线段端点的位置, 每个示例中用紫色 + 表示起始线段端点,用 绿色 + 表示结束线段端点间隙交汇处以 虚线框显示。
.grid-with-spans {
  display: grid;
  grid-template: repeat(4, 100px) / repeat(4, 100px);
  gap: 20px;
  background: rgb(255 255 128);
}
.grid > * {
  border: 1px dashed black;
}
在带有跨越项目的网格中,线段 端点间隙 交汇处的位置。 线段端点在每个间隙的边界处创建 (这些边界与容器边缘重合), 并在每个间隙内部、行间隙与列间隙重叠的位置,以结束-起始方式创建。
.flex {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  width: 500px;
  background: rgb(255 255 128);
}
.flex > * {
  border: 1px dashed black;
}
弹性容器中线段端点间隙交汇处的位置。 列间隙在其边界处创建端点;某些边界与容器边缘重合 (例如 #1 与 #2 之间、#2 与 #3 之间的间隙起点与容器顶边重合, 而 #7 与 #8 之间间隙的终点与容器底边重合)。 行间隙(弹性行之间)在其边界处创建端点, 这些端点与容器的左边缘和右边缘重合。 当列间隙与行间隙相接时,会以结束-起始方式创建两个端点。
.multi-column {
  column-count: 3;
  column-width: 100px;
  column-height: 50px;
  column-wrap: wrap;
  gap: 20px;
  background: rgb(255 255 128);
}

.multi-column > * {
  height: 100px;
  border: 1px dashed black;
}	
多列容器中线段端点间隙交汇处的位置。 列间隙(列盒之间)在其边界处创建端点;某些边界与容器边缘重合 (例如前 2 个列间隙的起点与顶边重合, 而后 2 个列间隙的终点与底边重合)。 行间隙(列盒行之间)在其边界处创建端点, 这些端点与容器的左边缘和右边缘重合。 当列间隙与行间隙相接时,会以结束-起始方式创建两个端点。

3.1.2. 间隙装饰线段

定义

间隙装饰 线段由一个起始线段端点与一个结束线段端点配对形成。 每个间隙形成一组间隙装饰 线段

在本节中,我们将间隙装饰线段 s 表示为 s = [s.start, s.end], 其中 s.start 是该线段的起始线段端点s.end 是该线段的结束线段端点

UNION(s1, s2) 等于 [s1.start, s2.end]。

如果对于其端点之间的每个间隙交汇处, 在间隙相对两侧存在项目, 且这些项目跨越所有对应该交汇处有贡献的垂直间隙, 则称一个间隙装饰 线段跨越项目夹住

在给定间隙的上下文中, 如果从 ab 的线段(宽度与该间隙相同)与容器中的子项目相交, 则一对线段端点 ab 被视为不连续

算法
要为给定间隙 G 确定间隙装饰线段
  1. S 为空列表。
  2. endpoints 为对 G 创建线段端点的结果, 并按其沿 G 中心线从起始到结束的位置排序。

    注:此列表保证包含偶数个元素, 并且在起始线段端点结束线段端点之间严格交替, 且以起始线段端点开头。

  3. 如果 endpoints 为空,返回 S
  4. breakcolumn-rule-breakrow-rule-break 的使用值,取适用于该间隙的那个。
  5. 如果 breaknone
    1. firstendpoints 中的第一项。
    2. lastendpoints 中的最后一项。
    3. 创建一个间隙装饰线段 segment = [first, last]。
    4. segment 应用偏移,然后将其追加到 S
    5. 返回 S
  6. 空检查:如果 endpoints 为空,返回 S
  7. endpoints 中前两项创建一个间隙装饰线段 s。 从列表中移除这两项。
  8. 如果 s 的端点是不连续的,返回到空检查
  9. endpoints 非空时:
    1. endpoints 的前两项创建一个间隙装饰线段 next,同时将这两项保留在列表中。
    2. candidateUNION(s, next)。
    3. 如果 candidate 的端点是不连续的,退出此循环。
    4. 如果 breakintersectioncandidate 未被跨越项目夹住,退出此循环。
    5. endpoints 中移除前两项。
    6. s 设置为 UNION(s, next)。
  10. s 应用偏移,然后将其追加到 S
  11. 返回到空检查
要对线段 s = [start, end] 应用偏移
  1. 按适用的 rule-inset 属性的使用值偏移 start
  2. 按适用的 rule-inset 属性的使用值偏移 end
  3. 用调整后的 [start, end] 更新 s
网格容器中间隙装饰线段(蓝色和红色矩形)的示意图。 这些线段绘制在成对的线段端点之间, 其中起始线段端点以紫色十字标记, 结束线段 端点以绿色十字标记。
弹性容器中间隙装饰线段(蓝色和红色矩形)的示意图。 这些线段绘制在成对的线段端点之间, 其中起始线段端点以紫色十字标记, 结束线段 端点以绿色十字标记。
多列容器(带有 column-wrap: wrap)中间隙装饰线段(蓝色和红色矩形)的示意图。 这些线段绘制在成对的线段端点之间, 其中起始线段端点以紫色十字标记, 结束线段 端点以绿色十字标记。
弹性容器中间隙装饰线段(蓝色和红色矩形)的示意图。 这些线段绘制在成对的线段端点之间, 其中起始线段端点以紫色十字标记, 结束线段 端点以绿色十字标记。
弹性容器中间隙装饰线段(蓝色和红色矩形)的示意图。 这些线段绘制在成对的线段端点之间, 其中起始线段端点以紫色十字标记, 结束线段 端点以绿色十字标记。
测试

3.2. 交点处的断开行为:column-rule-breakrow-rule-breakrule-break 属性

名称: column-rule-break, row-rule-break
值: none | normal | intersection
初始值: normal
适用于: 网格容器弹性 容器多列容器,以及 网格分道容器
继承:
百分比: 不适用
计算值: 按指定值
规范顺序: 按语法
动画类型: 离散

这些属性设置在容器中项目形成的可见 “T” 形或 “十字” 交点处, 将给定间隙内的装饰断开为线段的行为。 关于如何应用这些值的精确细节,在确定间隙 装饰线段的步骤中给出。

none
间隙装饰不会在可见的 “T” 形或 “十字” 交点处开始或结束。 相反,会从间隙的一端到另一端绘制单个连续装饰。
normal
行为取决于容器类型。
网格容器
间隙装饰在可见的 “T” 形交点处开始和结束, 但会穿过可见的 “十字” 交点。
弹性容器
行为与 none 相同。
多列容器
对于 column-rule-break,行为与 intersection 相同。 对于 row-rule-break,行为与 none 相同。
intersection
间隙装饰在可见的 “T” 形和 “十字” 交点处开始和结束。
测试
名称: rule-break
值: <'column-rule-break'>
初始值: 参见各单独属性
适用于: column-rule-breakrow-rule-break 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-breakrow-rule-break 设置为相同的值。

测试

以下示例说明 *-rule-break 属性的各种设置。

.break-normal-grid {
  display: grid;
  grid-template: repeat(4, 100px) / repeat(4, 100px);
  gap: 20px;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
  rule-break: normal;
}
网格中间隙装饰的默认断开行为。 每个装饰在遇到跨越该间隙的项目时停止。
.break-none-grid {
  display: grid;
  grid-template: repeat(4, 100px) / repeat(4, 100px);
  gap: 20px;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
  rule-break: none;
}
没有断开的网格间隙装饰。 注意,间隙装饰会延伸到放置在网格中的项目“后面”。
.break-intersection-grid {
  display: grid;
  grid-template: repeat(4, 100px) / repeat(4, 100px);
  gap: 20px;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
  rule-break: intersection;
}
网格间隙 装饰被限制在每个间隙装饰线段内, 该线段未被相对两侧的跨越项目夹住。
.break-normal-multicol {
  column-width: 150px;
  column-height: 300px;
  gap: 1em;
  row-rule: 4px solid red;
  column-rule: 4px solid blue;
  rule-break: normal;
}
rule-break 设置为 normal 的多列间隙 装饰。 注意,在列方向上,它的行为就像 rule-break 设置为 intersection, 而在行方向上,它的行为就像 rule-break 设置为 none
.break-intersection-multicol {
  column-width: 150px;
  column-height: 300px;
  gap: 1em;
  row-rule: 4px solid red;
  column-rule: 4px solid blue;
  rule-break: intersection;
}
rule-break 设置为 intersection 的多列间隙 装饰
.break-normal-flex {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
  rule-break: normal;
}
弹性容器中间隙装饰的默认断开行为。
注意,每条弹性行都有其自己独立的项目之间的间隙。 这有两个影响:
  1. 相邻弹性行中的间隙装饰 彼此分离,即使这些间隙碰巧对齐。
  2. none 会产生与 normal 相同的视觉效果。
.break-intersection-flex {
  display: flex;
  flex-wrap: wrap;
  width: 500px;
  gap: 20px;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
  rule-break: intersection;
}
被限制在每个间隙装饰线段内的 Flexbox 间隙 装饰

3.3. 调整间隙装饰端点:rule-inset 属性

名称: column-rule-inset-cap-start, column-rule-inset-cap-end, column-rule-inset-junction-start, column-rule-inset-junction-end, row-rule-inset-cap-start, row-rule-inset-cap-end, row-rule-inset-junction-start, row-rule-inset-junction-end
值: <inset-value>
初始值: 0
适用于: 网格容器弹性 容器多列容器,以及 网格分道容器
继承:
百分比: 参考交叉间隙宽度
计算值: 按指定值
规范顺序: 按语法
动画类型: 按计算值类型
<inset-value> = <length-percentage> | overlap-join

这些属性可用于相对于通常决定装饰开始和结束位置的线段端点, 偏移间隙装饰的起点和终点。

交汇线段 端点是在间隙交汇处线段端点, 在此处还存在一个或多个其他间隙装饰线段

端帽线段 端点是任何不是交汇线段端点线段端点。 这包括位于容器内容边缘的端点, 以及位于间隙 交汇处、且没有其他间隙装饰线段存在的端点。

.simple-grid {
  rule-break: intersection;
  rule-visibility-items: between;
}
在完全填充的网格中,每个内部间隙交汇处都会产生交汇线段 端点(标记为 J), 而容器内容边缘会产生端帽线段端点(标记为 C)。
.simple-grid-with-empty-cells {
  rule-break: intersection;
  rule-visibility-items: between;
}
当一个间隙装饰线段终止于内部间隙交汇处, 且该处没有其他间隙装饰线段存在时, 它的端点是一个端帽线段端点
.donut-grid-layout {
  rule-break: intersection;
  rule-visibility-items: between;
}
在“甜甜圈”网格布局中,即项目围绕容器中间的空白区域时, 毗邻空白内部区域的端点是端帽线段端点

百分比相对于交叉间隙宽度解析,其定义如下:

位于间隙 交汇处的线段端点
交叉间隙 宽度间隙交汇处的大小, 其维度与该间隙线段端点 所在的维度相同 (对于行间隙为行维度, 对于列 间隙为列维度)。

注:通常,这将是 适用于相交或相接间隙的 column-gaprow-gap 属性的使用值, 再加上由于 justify-contentalign-content 而添加的任何额外间距。 但是,在间隙以重叠区间相交或 相接的情况下, 交叉间隙 宽度将由这些区间的并集确定。 参见此示例中的这种情况。

其他线段端点
交叉间隙 宽度0

注:这种按位置进行的分类不同于 端帽线段 端点/交汇线段端点分类。 端帽线段端点可以位于容器边缘,也可以位于 间隙交汇处 (参见此示例)。因此, column-rule-inset-cap-start: 50% 在内部端帽处 解析为该间隙交汇处 大小的一半,而在其他端帽(例如容器边缘)处解析为 0

column-rule-inset-cap-startrow-rule-inset-cap-start 属性适用于属于端帽线段端点起始线段 端点column-rule-inset-junction-startrow-rule-inset-junction-start 属性适用于 属于交汇线段 端点起始线段端点。 对于这些属性,正值沿间隙轴向结束方向偏移, 负值沿起始方向偏移。

column-rule-inset-cap-endrow-rule-inset-cap-end 属性适用于属于端帽线段端点结束线段 端点column-rule-inset-junction-endrow-rule-inset-junction-end 属性适用于 属于交汇线段 端点结束线段端点。 对于这些属性,正值沿间隙轴向起始方向偏移, 负值沿结束方向偏移。

overlap-join 关键字 会在同一间隙交汇处相遇的间隙 装饰之间产生整洁的连接:

.inset-overlap-join {
  rule-inset: overlap-join;
  rule-break: intersection;
  rule-visibility-items: between;
}
使用 overlap-join 时,位于交汇线段端点处的间隙装饰 会延伸进入间隙 交汇处,连接相邻线段。 在端帽 线段端点处,overlap-join 被视为 0
.inset-overlap-join {
  rule-inset: overlap-join;
  rule-break: intersection;
  rule-visibility-items: between;
}
在“甜甜圈”网格布局中,即项目围绕容器中间的空白区域时, overlap-join 会在交汇线段端点处连接相邻线段, 将每个间隙 装饰延伸进入间隙交汇处。在毗邻容器边缘和空白内部区域的端帽线段端点处, overlap-join 被视为 0
.inset-end {
  row-rule: 3px solid red;
  row-rule-break: intersection;
  row-rule-inset-end: 10px;
}
在 LTR 和 RTL 方向以及垂直书写模式下, 具有非对称内移的行方向装饰。
测试

3.3.1. -start-end 简写

这些简写允许作者实现统一的非对称装饰。

.inset-start-8px-end-0px {
  column-rule-inset-start: 8px;
  column-rule-inset-end: 0px;
}
8px 的起始内移会使间隙装饰的起点后退, 而 0px 的结束内移会使间隙装饰的终点与内容边缘对齐。
名称: column-rule-inset-start, column-rule-inset-end, row-rule-inset-start, row-rule-inset-end
值: <inset-value>
初始值: 参见各单独属性
适用于: column-rule-inset-cap-startcolumn-rule-inset-junction-startcolumn-rule-inset-cap-endcolumn-rule-inset-junction-endrow-rule-inset-cap-startrow-rule-inset-junction-startrow-rule-inset-cap-endrow-rule-inset-junction-end 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

这些简写属性将对应的 -cap--junction- 属性设置为相同的值。 例如,column-rule-inset-start 会将 column-rule-inset-cap-startcolumn-rule-inset-junction-start 都设置为相同的 值。

名称: rule-inset-start
值: <'column-rule-inset-start'>
初始值: 参见各单独属性
适用于: column-rule-inset-startrow-rule-inset-start 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-inset-startrow-rule-inset-start 设置为相同的值。

名称: rule-inset-end
值: <'column-rule-inset-end'>
初始值: 参见各单独属性
适用于: column-rule-inset-endrow-rule-inset-end 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-inset-endrow-rule-inset-end 设置为相同的值。

测试

3.3.2. -cap--junction- 简写

这些简写允许作者在端帽线段端点交汇 线段端点处实现不同处理。

.inset-cap-0px-inset-junction-negative-5px {
  column-rule-inset-cap: 0px;
  column-rule-inset-junction: -5px;
  column-rule-break: intersection;
}
-5px 的交汇内移会使位于交汇线段端点处的间隙装饰端点 略微超出相邻项目的边缘。0px 的端帽内移会使 位于端帽 线段端点处的间隙装饰端点 与内容边缘对齐。
名称: column-rule-inset-cap, column-rule-inset-junction, row-rule-inset-cap, row-rule-inset-junction
值: <inset-value> <inset-value>?
初始值: 参见各单独属性
适用于: column-rule-inset-cap-startcolumn-rule-inset-cap-endcolumn-rule-inset-junction-startcolumn-rule-inset-junction-endrow-rule-inset-cap-startrow-rule-inset-cap-endrow-rule-inset-junction-startrow-rule-inset-junction-end 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

这些简写会设置对应的 -start-end 属性。 例如,column-rule-inset-cap 会同时设置 column-rule-inset-cap-startcolumn-rule-inset-cap-end。 如果指定一个值,则两个属性都设置为该值。 如果指定两个值,则 -start 设置为第一个,-end 设置为第二个。

名称: rule-inset-cap
值: <'column-rule-inset-cap'>
初始值: 参见各单独属性
适用于: column-rule-inset-caprow-rule-inset-cap 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-inset-caprow-rule-inset-cap 设置为相同的值。

名称: rule-inset-junction
值: <'column-rule-inset-junction'>
初始值: 参见各单独属性
适用于: column-rule-inset-junctionrow-rule-inset-junction 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-inset-junctionrow-rule-inset-junction 设置为相同的值。

测试

3.3.3. 通用简写

这些简写允许作者在整个容器中实现统一处理。

.inset-0px {
  column-rule-inset: 0px;
  column-rule-break: intersection;
}
0px 的内移会使间隙装饰的端点与相邻项目对齐。
.inset-positive-5px {
  column-rule-inset: 5px;
  column-rule-break: intersection;
}
5px 的内移会使间隙装饰的端点 相对于相邻项目的边缘缩短。
.inset-negative-5px {
  column-rule-inset: -5px;
  column-rule-break: intersection;
}
-5px 的内移会使间隙装饰的端点 略微超出相邻项目的边缘。
.inset-negative-50percent {
  column-rule-inset: -50%;
  column-rule-break: intersection;
}
-50% 的内移会使间隙装饰的每一端 向其交点内延伸一半。 相邻的间隙装饰“在中间相遇”, 从而创建一条连续线。 注意,在容器边缘处,交叉间隙宽度被定义为 0, 因此 -50% 的内移值解析为 0, 从而间隙装饰不会延伸到容器边界之外。 (与前一个示例形成对比,前者以内 px 单位指定内移。)
名称: column-rule-inset, row-rule-inset
值: <'column-rule-inset-cap'> [ / <'column-rule-inset-junction'> ]?
初始值: 参见各单独属性
适用于: column-rule-inset-capcolumn-rule-inset-junctionrow-rule-inset-caprow-rule-inset-junction 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

这些简写会设置对应的端帽和交汇起始值与结束值。 值的顺序为:

cap-start cap-end? [/ junction-start junction-end?]?

省略的值按如下方式填充:

  1. 如果省略交汇值,则从端帽值复制。
  2. 任何省略的结束值都会从对应的起始值复制。
名称: rule-inset
值: <'column-rule-inset'>
初始值: 参见各单独属性
适用于: column-rule-insetrow-rule-inset 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-insetrow-rule-inset 设置为相同的值。

测试

3.4. 间隙装饰可见性:rule-visibility-items 属性

名称: column-rule-visibility-items, row-rule-visibility-items
值: all | around | between | normal
初始值: normal
适用于: 网格容器多列容器
继承:
百分比: 不适用
计算值: 按指定值
规范顺序: 按语法
动画类型: 离散

这些属性控制间隙装饰线段是否绘制在与空白区域相邻的间隙部分中。

all
在所有间隙线段中绘制装饰,无论是否存在相邻项目。
around
如果两个相邻区域中至少有一个被项目占据,则在间隙线段中绘制装饰。
between
如果两个相邻区域都被项目占据,则在间隙线段中绘制装饰。
normal
行为取决于容器类型。
网格容器
行为与 all 相同。
多列容器
对于 column-rule-visibility-items,行为 与 between 相同。 对于 row-rule-visibility-items,行为 与 all 相同。
名称: rule-visibility-items
值: <'column-rule-visibility-items'>
初始值: 参见各单独属性
适用于: column-rule-visibility-itemsrow-rule-visibility-items 相同
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-visibility-itemsrow-rule-visibility-items 设置为相同的值。

.break-normal-with-all-grid {
  display: grid;
  grid-template: repeat(3, 100px) / repeat(3, 100px);
  gap: 20px;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
  rule-visibility-items: all;
}
具有 normal 分隔线断开和 all 可见性的网格中的间隙装饰。
.break-normal-with-around-grid {
  display: grid;
  grid-template: repeat(3, 100px) / repeat(3, 100px);
  gap: 20px;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
  rule-visibility-items: around;
}
具有 normal 分隔线断开和 around 可见性的网格中的间隙装饰。
.break-normal-with-between-grid {
  display: grid;
  grid-template: repeat(3, 100px) / repeat(3, 100px);
  gap: 20px;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
  rule-visibility-items: between;
}
具有 normal 分隔线断开和 between 可见性的网格中的间隙装饰。
测试

3.5. 间隙装饰重叠:rule-overlap 属性

名称: rule-overlap
值: row-over-column | column-over-row
初始值: row-over-column
适用于: 网格容器弹性 容器,以及 网格分道容器
继承:
百分比: 不适用
计算值: 按指定值
规范顺序: 按语法
动画类型: 离散

此属性设置重叠间隙装饰的绘制顺序。

row-over-column
行方向装饰绘制在列方向装饰之上。
column-over-row
列方向装饰绘制在行方向装饰之上。
.row-over-column {
  rule-overlap: row-over-column;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
}
row-over-column 间隙装饰重叠。
.column-over-row {
  rule-overlap: column-over-row;
  row-rule: 6px solid red;
  column-rule: 6px solid blue;
}
column-over-row 间隙装饰重叠。
测试

3.6. 分片

CSS 盒对齐 3 § 8.1 行和 列槽:row-gap 和 column-gap 属性规定,在与分片断点重合的位置,间隙会消失。 由于这些位置没有间隙, 因此也不会在其中绘制间隙装饰

测试

4. 颜色、样式和宽度

本节中的属性定义取代 [CSS-MULTICOL-1] 中同名属性的定义。

4.1. 间隙装饰颜色:column-rule-colorrow-rule-colorrule-color 属性

名称: column-rule-color, row-rule-color
值: <line-color-list> | <auto-line-color-list>
初始值: currentcolor
适用于: 网格容器弹性 容器多列容器,以及 网格分道容器
继承:
百分比: 不适用
计算值: 按指定值
规范顺序: 按语法
动画类型: 可重复列表,参见 § 4.7 列表值的插值
<line-color-list>          = <line-color-or-repeat>#

<auto-line-color-list>     = <line-color-or-repeat>#? ,
                             <auto-repeat-line-color> ,
                             <line-color-or-repeat>#?

<line-color-or-repeat>     = [ <color> | <repeat-line-color> ]

<repeat-line-color>        = repeat( [ <integer [1,∞]> ] , [ <color> ]# )

<auto-repeat-line-color>   = repeat( auto , [ <color> ]# )

这些属性设置间隙装饰的颜色。

名称: rule-color
值: <'column-rule-color'>
初始值: 参见各单独属性
适用于: column-rule-colorrow-rule-color 相同
继承:
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-colorrow-rule-color 设置为相同的值。

测试

4.2. 间隙装饰样式:column-rule-stylerow-rule-stylerule-style 属性

名称: column-rule-style, row-rule-style
值: <line-style-list> | <auto-line-style-list>
初始值: none
适用于: 网格容器弹性容器多列容器,以及 网格分道容器
继承:
百分比: 不适用
计算值: 按指定值
规范顺序: 按语法
动画类型: 离散
<line-style-list>          = <line-style-or-repeat>#

<auto-line-style-list>     = <line-style-or-repeat>#? ,
                             <auto-repeat-line-style> ,
                             <line-style-or-repeat>#?

<line-style-or-repeat>     = [ <line-style> | <repeat-line-style> ]

<repeat-line-style>        = repeat( [ <integer [1,∞]> ] , [ <line-style> ]# )

<auto-repeat-line-style>   = repeat( auto , [ <line-style> ]# )

这些属性设置间隙装饰的样式。 <line-style> 值的应用方式与 border-style 相同。

名称: rule-style
值: <'column-rule-style'>
初始值: 参见各单独属性
适用于: column-rule-stylerow-rule-style 相同
继承:
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-stylerow-rule-style 设置为相同的值。

测试

4.3. 间隙装饰宽度:column-rule-widthrow-rule-widthrule-width 属性

名称: column-rule-width, row-rule-width
值: <line-width-list> | <auto-line-width-list>
初始值: medium
适用于: 网格容器弹性容器多列容器,以及 网格分道容器
继承:
百分比: 不适用
计算值: 绝对长度列表,按边框宽度吸附
规范顺序: 按语法
动画类型: 可重复列表,参见 § 4.7 列表值的插值
<line-width-list>          = <line-width-or-repeat>#

<auto-line-width-list>     = <line-width-or-repeat>#? ,
                             <auto-repeat-line-width> ,
                             <line-width-or-repeat>#?

<line-width-or-repeat>     = [ <line-width> | <repeat-line-width> ]

<repeat-line-width>        = repeat( [ <integer [1,∞]> ] , [ <line-width> ]# )

<auto-repeat-line-width>   = repeat( auto , [ <line-width> ]# )

这些属性设置间隙装饰的宽度。不允许负值。

名称: rule-width
值: <'column-rule-width'>
初始值: 参见各单独属性
适用于: column-rule-widthrow-rule-width 相同
继承:
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rule-widthrow-rule-width 设置为相同的值。

测试

4.4. 间隙装饰简写:column-rulerow-rulerule 属性

名称: column-rule, row-rule
值: <gap-rule-list> | <gap-auto-rule-list>
初始值: 参见各单独属性
适用于: 参见各单独属性
继承: 参见各单独属性
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法
<gap-rule-list>        = <gap-rule-or-repeat>#

<gap-auto-rule-list>   = <gap-rule-or-repeat>#? ,
                         <gap-auto-repeat-rule> ,
                         <gap-rule-or-repeat>#?

<gap-rule-or-repeat>   = <gap-rule> | <gap-repeat-rule>

<gap-repeat-rule>      = repeat( <integer [1,∞]> , <gap-rule># )

<gap-auto-repeat-rule> = repeat( auto , <gap-rule># )

<gap-rule>             = <line-width> || <line-style> || <color>

这些简写属性分别为 column-rule-widthcolumn-rule-stylecolumn-rule-color 属性, 或 row-rule-widthrow-rule-stylerow-rule-color 属性设置值。

名称: rule
值: <'column-rule'>
初始值: 参见各单独属性
适用于: column-rulerow-rule 相同
继承:
百分比: 参见各单独属性
计算值: 参见各单独属性
动画类型: 参见各单独属性
规范顺序: 按语法

简写属性column-rulerow-rule 设置为相同的值。

测试

4.5. 值列表和 repeat() 表示法

本节中的每个属性都接受一个逗号分隔的值列表。 以这种方式设置多个值,允许在给定容器内产生不同的间隙装饰

作者可以按如下方式指定红色和蓝色交替的列分隔线:
column-rule-width: 1px;
column-rule-style: solid;
column-rule-color: red, blue;

这样的列表可以包含 repeat() 表示法。 与 CSS 网格布局 1 § 7.2.3 重复行和列:repeat() 表示法类似,这些表示法允许将呈现重复模式的一系列间隙装饰 以更紧凑的形式写出。

repeat() 语法的通用形式大致为:

repeat( [ <integer [1,∞]> | auto ] , <value># )

repeat() 的第一个参数指定重复次数。

<integer>
指定一个整数 重复器整数重复器 展开为第二个参数中的值列表, 重复次数由第一个参数指定。
作者可以写成:
column-rule-color: gray, red, blue, red, blue, red, blue, gray;
或缩短为以下形式,它会产生相同的颜色序列:
column-rule-color: gray, repeat(3, red, blue), gray;
auto
指定一个自动 重复器自动重复器将用于为那些 无法从列表其他部分获得值的间隙填充值。 在给定值列表中,至多一个 repeat() 可以是 自动重复器
延续上一个示例,如果作者不知道最终布局中 会有多少列,他们可以改写为:
column-rule-color: gray, repeat(auto, red, blue), gray;
这会在第一个和最后一个列间隙中产生灰色装饰, 并在中间的列间隙中产生红色和蓝色交替的装饰。

repeat() 的第二个参数是一个逗号分隔的值列表, 其中的值会被出现该 repeat() 的属性接受。

4.6. 将间隙装饰值分配给间隙

分配间隙装饰之前,会先应用槽 折叠。 给定的一组折叠槽恰好消耗一个间隙装饰;下一个 间隙装饰 应用于下一个槽(或下一组折叠槽)。 因此,折叠槽会出于装饰目的被视为一个单独的 间隙

由于分片而被抑制的间隙, 即使没有绘制装饰,仍会从模式中消耗一个间隙装饰值。 这会在分片和未分片上下文中保持间隙与装饰之间的一致关联。

类似地,当弹性容器换行成多条弹性行时,装饰模式 会按顺序分配给整个 flexbox 中的间隙, 而不会在每条弹性行的开头重新开始。

要使用一个 values 列表向 gaps 列表分配间隙 装饰值
  1. values 中的任何整数 重复器替换为其展开后的等价项。
  2. 如果列表不包含自动重复器,则:
    1. values 中的第一项和 gaps 中的第一项开始, 将每个值分配给对应的间隙。 如果值少于间隙, 则从 values 的第一项开始重复, 重复所需次数。
    2. 结束此算法。
  3. values 包含一个自动重复器。 令 leading countvalues 中位于该自动重复器之前的项目数量。 令 trailing countvalues 中位于该自动重复器之后的项目数量。
  4. 按如下方式划分 gaps
    1. leading gaps 包含 gaps 中最前面的 leading count 项。
    2. trailing gaps 包含 gaps 中最后的 trailing count 项, 排除 leading gaps 中的任何项。
    3. auto gaps 包含 gaps 中 既不属于 leading gaps 也不属于 trailing gaps 的任何项。
  5. 如果 leading gaps 非空, 使用 values 中的前 leading count 项 向 leading gaps 分配间隙装饰值
  6. 如果 trailing gaps 非空, 使用 values 中的前 trailing count 项 向 trailing gaps 分配间隙装饰值
  7. 如果 auto gaps 非空, 使用该自动重复器的第二个参数中的值列表 向 auto gaps 分配间隙装饰值
测试

4.7. 列表值的插值

在对 repeat() 值,或 rule-colorrule-width 的值列表进行插值时,插值分两步进行:
  1. 展开:将任何 整数重复器 展开为其等价的值列表。
  2. 列表插值:对展开后的列表应用 可重复列表 的插值算法,逐项与对应项进行插值。
@keyframes example {
  from { column-rule-width: 10px; }
  to   { column-rule-width: 20px, 40px; }
}
上述值的插值会将“from”和“to”值展开为等长的列表,从而得到:
From:   10px, 10px
At 50%: 15px, 25px
To:     20px, 40px
@keyframes example {
  from { column-rule-width: repeat(2, 5px, 10px); }
  to   { column-rule-width: repeat(2, 15px, 20px); }
}
上述值的插值会将“from”和“to”值展开为等长的列表,从而得到:
From:    5px, 10px,  5px, 10px
At 50%: 10px, 15px, 10px, 15px
To:     15px, 20px, 15px, 20px
@keyframes example {
  from { column-rule-width: repeat(2, 10px, 20px); }
  to   { column-rule-width: 20px; }
}
上述值的插值会将“from”和“to”值展开为等长的列表,从而得到:
From:   10px, 20px, 10px, 20px
At 50%: 15px, 20px, 15px, 20px
To:     20px, 20px, 20px, 20px
@keyframes example {
  from { column-rule-width: repeat(2, 10px, 20px); }
  to   { column-rule-width: 20px, 30px; }
}
上述值的插值会将“from”和“to”值展开为等长的列表,从而得到:
From:   10px, 20px, 10px, 20px
At 50%: 15px, 25px, 15px, 25px
To:     20px, 30px, 20px, 30px

当我们要在其间插值的任一列表(fromto)包含一个 自动重复器 时:

  1. fromto 各自分割为若干段,方式与我们在 分配间隙装饰值 时的分割类似:
    1. leading values自动重复器 之前的值。
    2. trailing values自动重复器 之后的值。
    3. auto values 为位于 自动重复器 内的值。
  2. 如果只有 fromto 中的一个包含自动重复器,则退回到 离散 插值。
  3. 展开每个段中的任何整数重复器。
  4. 如果 fromleading values 的长度与 toleading values 的长度不匹配,则退回到 离散 插值。 如果 fromtrailing values 的长度与 totrailing values 的长度不匹配,则同样退回到 离散 插值。
  5. fromto 都包含自动重复器,且其段的长度按上述方式匹配时, 对每个 auto values 中的值列表应用 可重复列表 插值算法。
@keyframes example {
  from { column-rule-width: 10px, repeat(auto, 20px), 30px }
  to   { column-rule-width: 20px, repeat(auto, 40px), 40px }
}
across fromtoleading valuestrailing values 长度匹配, 因此我们可以对每个段应用 可重复列表 算法。
From:   10px, repeat(auto, 20px), 30px
At 50%: 15px, repeat(auto, 30px), 35px
To:     20px, repeat(auto, 40px), 40px
@keyframes example {
  from { column-rule-width: 10px, 20px, repeat(auto, 20px), 30px }
  to   { column-rule-width: 20px, 30px, repeat(auto, 40px, 50px), 40px }
}
across fromtoleading valuestrailing values 长度匹配, 因此我们可以对每个段应用 可重复列表 算法。
From:   10px, 20px, repeat(auto, 20px, 20px), 30px
At 50%: 15px, 25px, repeat(auto, 30px, 35px), 35px
To:     20px, 30px, repeat(auto, 40px, 50px), 40px
@keyframes example {
  from { column-rule-width: 10px, repeat(auto, 20px) }
  to   { column-rule-width: 20px, 30px, repeat(auto, 40px, 50px) }
}
fromleading valuestoleading values 长度不匹配, 因此我们退回到 离散 插值。
@keyframes example {
  from { column-rule-width: 10px, repeat(auto, 20px), 30px }
  to   { column-rule-width: 20px, repeat(auto, 40px), 40px, 50px }
}
fromtrailing valuestotrailing values 长度不匹配, 因此我们退回到 离散 插值。
@keyframes example {
  from { column-rule-width: 10px, repeat(auto, 20px), 30px }
  to   { column-rule-width: 20px }
}
from 包含一个 自动重复器,因此我们退回到 离散 插值。
Tests

4.8. 序列化

仅当组件长属性是 重复器对齐 时,column-rulerow-rulerule 简写才会从对应的长属性序列化出来。 如果长属性不是 重复器对齐,则该简写的序列化结果为空字符串。

WSC 分别为宽度、样式与颜色长属性的值。回想它们都是项的列表,其中每一项要么是单个值,要么是一个 repeat() 表示法。 当且仅当下列所有条件都为真时,长属性被称为 重复器对齐
  1. WSC 的项数相同。
  2. 对于每个项索引 iW[i]、S[i] 和 C[i] 具有相同的形态:
    1. 它们要么全是非重复值,要么全是 整数重复器,要么全是 自动重复器
    2. 若它们是 整数重复器,则这些 <integer> 值相等。
    3. 每个 repeat() 表示法包含相同数量的值。
该简写声明:
column-rule: 1px solid red, 2px dashed green, 3px dotted blue;

拆分得到如下长属性值:

column-rule-width: 1px, 2px, 3px;
column-rule-style: solid, dashed, dotted;
column-rule-color: red, green, blue;

由于长属性是 重复器对齐(三者均有相同的项数(3),且每项都是单个值), 它们会被序列化回相同的原始简写值。

如果直接指定这三个长属性(而不是来自简写),也会产生相同的行为。

该简写声明:
column-rule: 1px solid red, repeat(2, 2px dashed green);

拆分得到如下长属性值:

column-rule-width: 1px, repeat(2, 2px);
column-rule-style: solid, repeat(2, dashed);
column-rule-color: red, repeat(2, green);

由于长属性是 重复器对齐(三者均有相同的项数(2),且在每个索引处项类型匹配——索引 0 为单值,索引 1 为整数重复器;整数重复器的重复计数相同且包含相同数量的值), 它们会被序列化回相同的原始简写值。

如果直接指定这三个长属性(而不是来自简写),也会产生相同的行为。

该简写声明:
column-rule: repeat(auto, 1px solid red, 2px dashed green);

拆分得到如下长属性值:

column-rule-width: repeat(auto, 1px, 2px);
column-rule-style: repeat(auto, solid, dashed);
column-rule-color: repeat(auto, red, green);

由于长属性是 重复器对齐(三者均有相同的项数(1),每项是自动重复器,且自动重复器包含相同数量的值(2)), 它们会被序列化回相同的原始简写值。

如果直接指定这三个长属性(而不是来自简写),也会产生相同的行为。

这些声明:
column-rule: repeat(auto, 1px solid red, 2px dashed green);
column-rule-width: repeat(auto, 3px, 4px, 5px);

拆分得到如下长属性值:

column-rule-width: repeat(auto, 3px, 4px, 5px);
column-rule-style: repeat(auto, solid, dashed);
column-rule-color: repeat(auto, red, green);

由于长属性不是 重复器对齐(自动重复器包含不同数量的值),column-rule 简写将在序列化时输出为空字符串。

如果直接指定这三个长属性(而不是来自简写),也会产生相同的行为。

这些声明:
column-rule: repeat(2, 1px solid red, 2px dashed green);
column-rule-style: dashed, dotted, solid;

拆分得到如下长属性值:

column-rule-width: repeat(2, 1px, 2px);
column-rule-style: dashed, dotted, solid;
column-rule-color: repeat(2, red, green);

由于长属性不是 重复器对齐(在索引 0 处项的类型不匹配——宽度与颜色为整数重复器,而样式为单值),column-rule 简写将在序列化时输出为空字符串。

如果直接指定这三个长属性(而不是来自简写),也会产生相同的行为。

这些声明:
column-rule: repeat(2, 1px solid red, 2px dashed green);
column-rule-color: repeat(4, red, cyan);

拆分得到如下长属性值:

column-rule-width: repeat(2, 1px, 2px);
column-rule-style: repeat(2, solid, dashed);
column-rule-color: repeat(4, red, cyan);

由于长属性不是 重复器对齐(整数重复器的重复计数不同),column-rule 简写将在序列化时输出为空字符串。

如果直接指定这三个长属性(而不是来自简写),也会产生相同的行为。

Tests

5. 致谢

非常感谢 Sam Davis Omekara Jr. 和 Javier Contreras Tenorio, 他们为本规范贡献了大量规范性文本、示例和 WPT 覆盖。

Mats Palmgren 早期关于间隙装饰的 提案 帮助确立了本规范的方向。

还有许多人提供了有助于塑造本规范的额外反馈,包括: Ahmad Shadeed、 Alison Maher、 Benoît Rouleau、 Elika Etemad、 Ian Kilpatrick、 Josh Tumath、 Kurt Catti-Schmidt、 Lea Verou、 Oliver Williams、 Rachel Andrew、 Sebastian Zartner、 Tab Atkins-Bittner、 以及 CSS 工作组成员。

6. 隐私考虑

尚未报告本规范有新的隐私考虑。

7. 安全考虑

尚未报告本规范有新的安全考虑。

8. 变更

8.1. 2026 年 2 月 27 日工作 草案以来的变更

8.2. 2025 年 4 月 17 日工作 草案以来的变更

符合性

文档约定

符合性要求通过描述性断言与 RFC 2119 术语的组合来表达。术语 “MUST”、 “MUST NOT”、 “REQUIRED”、 “SHALL”、 “SHALL NOT”、 “SHOULD”、 “SHOULD NOT”、 “RECOMMENDED”、 “MAY” 和 “OPTIONAL” 在本文档的规范性部分中应按 RFC 2119 中的描述进行解释。 不过,为了可读性,这些词在本规范中并不全部以大写形式出现。

本规范的全部文本均为规范性内容,除非明确标注为非规范性、示例或注释的章节。 [RFC2119]

本规范中的示例以“for example”一词引入,或以 class="example" 与规范性文本区分开来,如下所示:

这是一个说明性的示例。

说明性注释以单词 “Note” 开头,并以 class="note" 与规范性文本区分开来,如下所示:

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

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

Tests

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


符合性类别

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

style sheet
一个 CSS 样式表
renderer
解释样式表语义并渲染使用它们的文档的 用户代理(UA)
authoring tool
用于编写样式表的 用户代理(UA)

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

如果渲染器在解释样式表方面遵循适当规范的定义,并且能够正确解析并支持本规范定义的所有特性并据此渲染文档,则该渲染器视为符合本规范。 但是,由于设备限制导致用户代理无法正确渲染某些文档并不表示该用户代理不符合规范。(例如,在单色显示器上并不要求用户代理渲染颜色。)

如果创作工具所生成的样式表在语法上符合通用 CSS 语法以及本模块中每个特性的各自语法,并满足本模块中所述样式表的所有其他符合性要求,则该创作工具视为符合本规范。

部分实现

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

不稳定与专有特性的实现

为避免与将来的稳定 CSS 特性发生冲突, CSS 工作组建议在实现 不稳定 特性和 CSS 的专有扩展 时遵循 最佳实践

非实验性实现

一旦规范进入候选推荐(Candidate Recommendation)阶段, 非实验性实现便成为可能,实现者应在能够证明符合规范正确实现的任何 CR 级功能时, 发布不带前缀的实现。

为了建立并维护跨实现的 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-BREAK-4]
Rossen Atanassov; Elika Etemad. CSS 分片模块 第 4 级. 2018 年 12 月 18 日. FPWD. URL: https://www.w3.org/TR/css-break-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-COLOR-5]
Chris Lilley; Una Kravets; Lea Verou. CSS 颜色模块 第 5 级. 2026 年 6 月 18 日. WD. URL: https://www.w3.org/TR/css-color-5/
[CSS-FLEXBOX-1]
Elika Etemad; Tab Atkins Jr.; Rossen Atanassov. CSS 弹性盒布局模块第 1 级. 2025 年 10 月 14 日. CRD. URL: https://www.w3.org/TR/css-flexbox-1/
[CSS-GRID-1]
Tab Atkins Jr.; et al. CSS 网格布局模块第 1 级. 2025 年 3 月 26 日. CRD. URL: https://www.w3.org/TR/css-grid-1/
[CSS-GRID-2]
Tab Atkins Jr.; et al. CSS 网格布局模块第 2 级. 2025 年 3 月 26 日. CRD. URL: https://www.w3.org/TR/css-grid-2/
[CSS-GRID-3]
Tab Atkins Jr.; et al. CSS 网格布局模块第 3 级. 2026 年 1 月 21 日. WD. URL: https://www.w3.org/TR/css-grid-3/
[CSS-MULTICOL-1]
Florian Rivoal; Rachel Andrew. CSS 多列布局 模块第 1 级. 2024 年 5 月 16 日. CR. URL: https://www.w3.org/TR/css-multicol-1/
[CSS-MULTICOL-2]
Florian Rivoal; Rachel Andrew. CSS 多列布局 模块第 2 级. 2024 年 12 月 19 日. FPWD. URL: https://www.w3.org/TR/css-multicol-2/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS 盒尺寸模块 第 3 级. 2021 年 12 月 17 日. WD. URL: https://www.w3.org/TR/css-sizing-3/
[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-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/
[RFC2119]
S. Bradner. 用于 RFC 中表示 需求级别的关键词. 1997 年 3 月. 当前最佳实践. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEB-ANIMATIONS-1]
Brian Birtles; et al. Web 动画. 2023 年 6 月 5 日. WD. URL: https://www.w3.org/TR/web-animations-1/

非规范性参考文献

[CSS-GAPS-1]
Kevin Babbitt. CSS Gap Decorations Module Level 1. 17 April 2025. FPWD. URL: https://www.w3.org/TR/css-gaps-1/

属性索引

名称 初始值 适用于 继承 百分比 动画类型 规范顺序 计算值
column-gap normal | <length-percentage [0,∞]> | <line-width> normal 多列容器、弹性容器、网格容器 参见 按计算值类型 按语法 指定的关键字,否则为计算后的 <length-percentage> 值
column-rule <gap-rule-list> | <gap-auto-rule-list> 参见各单独属性 参见各单独属性 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
column-rule-break none | normal | intersection normal 网格容器、弹性容器、多列容器,以及网格分道容器 不适用 离散 按语法 按指定值
column-rule-color <line-color-list> | <auto-line-color-list> currentcolor 网格容器、弹性容器、多列容器,以及网格分道容器 不适用 可重复列表,参见。 按语法 按指定值
column-rule-inset <'column-rule-inset-cap'> [ / <'column-rule-inset-junction'> ]? 参见各单独属性 与 column-rule-inset-cap、column-rule-inset-junction、row-rule-inset-cap 和 row-rule-inset-junction 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
column-rule-inset-cap <inset-value> <inset-value>? 参见各单独属性 与 column-rule-inset-cap-start、column-rule-inset-cap-end、 column-rule-inset-junction-start、column-rule-inset-junction-end、row-rule-inset-cap-start、 row-rule-inset-cap-end、row-rule-inset-junction-start 和 row-rule-inset-junction-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
column-rule-inset-cap-end <inset-value> 0 网格容器、弹性容器、多列容器,以及网格分道容器 参照交叉间隙宽度 按计算值类型 按语法 按指定值
column-rule-inset-cap-start <inset-value> 0 网格容器、弹性容器、多列容器,以及网格分道容器 参照交叉间隙宽度 按计算值类型 按语法 按指定值
column-rule-inset-end <inset-value> 参见各单独属性 与 column-rule-inset-cap-start、column-rule-inset-junction-start、 column-rule-inset-cap-end、column-rule-inset-junction-end、row-rule-inset-cap-start、 row-rule-inset-junction-start、row-rule-inset-cap-end 和 row-rule-inset-junction-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
column-rule-inset-junction <inset-value> <inset-value>? 参见各单独属性 与 column-rule-inset-cap-start、column-rule-inset-cap-end、 column-rule-inset-junction-start、column-rule-inset-junction-end、row-rule-inset-cap-start、 row-rule-inset-cap-end、row-rule-inset-junction-start 和 row-rule-inset-junction-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
column-rule-inset-junction-end <inset-value> 0 网格容器、弹性容器、多列容器,以及网格分道容器 参照交叉间隙宽度 按计算值类型 按语法 按指定值
column-rule-inset-junction-start <inset-value> 0 网格容器、弹性容器、多列容器,以及网格分道容器 参照交叉间隙宽度 按计算值类型 按语法 按指定值
column-rule-inset-start <inset-value> 参见各单独属性 与 column-rule-inset-cap-start、column-rule-inset-junction-start、 column-rule-inset-cap-end、column-rule-inset-junction-end、row-rule-inset-cap-start、 row-rule-inset-junction-start、row-rule-inset-cap-end 和 row-rule-inset-junction-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
column-rule-style <line-style-list> | <auto-line-style-list> none 网格容器、弹性容器、多列容器,以及网格分道容器 不适用 离散 按语法 按指定值
column-rule-visibility-items all | around | between | normal normal 网格容器和多列容器 不适用 离散 按语法 按指定值
column-rule-width <line-width-list> | <auto-line-width-list> medium 网格容器、弹性容器、多列容器,以及网格分道容器 不适用 可重复列表,参见。 按语法 绝对长度列表,按边框宽度吸附
gap <'row-gap'> <'column-gap'>? 参见各单独属性 多列容器、弹性容器、网格容器 参照内容区域的对应尺寸 按计算值类型 按语法 参见各单独属性
row-gap normal | <length-percentage [0,∞]> | <line-width> normal 多列容器、弹性容器、网格容器 参见 按计算值类型 按语法 指定的关键字,否则为计算后的 <length-percentage> 值
row-rule <gap-rule-list> | <gap-auto-rule-list> 参见各单独属性 参见各单独属性 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
row-rule-break none | normal | intersection normal 网格容器、弹性容器、多列容器,以及网格分道容器 不适用 离散 按语法 按指定值
row-rule-color <line-color-list> | <auto-line-color-list> currentcolor 网格容器、弹性容器、多列容器,以及网格分道容器 不适用 可重复列表,参见。 按语法 按指定值
row-rule-inset <'column-rule-inset-cap'> [ / <'column-rule-inset-junction'> ]? 参见各单独属性 与 column-rule-inset-cap、column-rule-inset-junction、row-rule-inset-cap 和 row-rule-inset-junction 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
row-rule-inset-cap <inset-value> <inset-value>? 参见各单独属性 与 column-rule-inset-cap-start、column-rule-inset-cap-end、 column-rule-inset-junction-start、column-rule-inset-junction-end、row-rule-inset-cap-start、 row-rule-inset-cap-end、row-rule-inset-junction-start 和 row-rule-inset-junction-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
row-rule-inset-cap-end <inset-value> 0 网格容器、弹性容器、多列容器,以及网格分道容器 参照交叉间隙宽度 按计算值类型 按语法 按指定值
row-rule-inset-cap-start <inset-value> 0 网格容器、弹性容器、多列容器,以及网格分道容器 参照交叉间隙宽度 按计算值类型 按语法 按指定值
row-rule-inset-end <inset-value> 参见各单独属性 与 column-rule-inset-cap-start、column-rule-inset-junction-start、 column-rule-inset-cap-end、column-rule-inset-junction-end、row-rule-inset-cap-start、 row-rule-inset-junction-start、row-rule-inset-cap-end 和 row-rule-inset-junction-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
row-rule-inset-junction <inset-value> <inset-value>? 参见各单独属性 与 column-rule-inset-cap-start、column-rule-inset-cap-end、 column-rule-inset-junction-start、column-rule-inset-junction-end、row-rule-inset-cap-start、 row-rule-inset-cap-end、row-rule-inset-junction-start 和 row-rule-inset-junction-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
row-rule-inset-junction-end <inset-value> 0 网格容器、弹性容器、多列容器,以及网格分道容器 参照交叉间隙宽度 按计算值类型 按语法 按指定值
row-rule-inset-junction-start <inset-value> 0 网格容器、弹性容器、多列容器,以及网格分道容器 参照交叉间隙宽度 按计算值类型 按语法 按指定值
row-rule-inset-start <inset-value> 参见各单独属性 与 column-rule-inset-cap-start、column-rule-inset-junction-start、 column-rule-inset-cap-end、column-rule-inset-junction-end、row-rule-inset-cap-start、 row-rule-inset-junction-start、row-rule-inset-cap-end 和 row-rule-inset-junction-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
row-rule-style <line-style-list> | <auto-line-style-list> none 网格容器、弹性容器、多列容器,以及网格分道容器 不适用 离散 按语法 按指定值
row-rule-visibility-items all | around | between | normal normal 网格容器和多列容器 不适用 离散 按语法 按指定值
row-rule-width <line-width-list> | <auto-line-width-list> medium 网格容器、弹性容器、多列容器,以及网格分道容器 不适用 可重复列表,参见。 按语法 绝对长度列表,按边框宽度吸附
rule <'column-rule'> 参见各单独属性 与 column-rule 和 row-rule 相同 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-break <'column-rule-break'> 参见各单独属性 与 column-rule-break 和 row-rule-break 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-color <'column-rule-color'> 参见各单独属性 与 column-rule-color 和 row-rule-color 相同 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-inset <'column-rule-inset'> 参见各单独属性 与 column-rule-inset 和 row-rule-inset 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-inset-cap <'column-rule-inset-cap'> 参见各单独属性 与 column-rule-inset-cap 和 row-rule-inset-cap 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-inset-end <'column-rule-inset-end'> 参见各单独属性 与 column-rule-inset-end 和 row-rule-inset-end 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-inset-junction <'column-rule-inset-junction'> 参见各单独属性 与 column-rule-inset-junction 和 row-rule-inset-junction 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-inset-start <'column-rule-inset-start'> 参见各单独属性 与 column-rule-inset-start 和 row-rule-inset-start 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-overlap row-over-column | column-over-row row-over-column 网格容器、弹性容器和网格分道容器 不适用 离散 按语法 按指定值
rule-style <'column-rule-style'> 参见各单独属性 与 column-rule-style 和 row-rule-style 相同 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-visibility-items <'column-rule-visibility-items'> 参见各单独属性 与 column-rule-visibility-items 和 row-rule-visibility-items 相同 参见各单独属性 参见各单独属性 参见各单独属性 按语法 参见各单独属性
rule-width <'column-rule-width'> 参见各单独属性 与 column-rule-width 和 row-rule-width 相同 参见各单独属性 参见各单独属性 按语法 参见各单独属性