1. 介绍
本节不具备规范性。
CSS Multicol 1 § 4 列间隙与分隔线 允许在 多栏容器 的列之间绘制分隔线。 本规范扩展了 column-rule-width、column-rule-style 和 column-rule-color 属性, 增加了行方向的等效属性,扩展了它们在其他容器布局中的应用,并提供了对间隙装饰绘制位置和方式的高级控制。
1.1. 值定义
本规范遵循 CSS 属性定义约定(见 [CSS2]), 并采用 值定义语法(见 [CSS-VALUES-3])。 本规范未定义的值类型,在 CSS Values & Units [CSS-VALUES-3] 中定义。 与其他 CSS 模块组合时,这些值类型的定义可能会被扩展。
除了定义中列出的属性特定值外, 本规范定义的所有属性也接受 CSS 全局关键字 作为属性值。 为了可读性,未在此处重复列出。
2. 间隙装饰
CSS 中的多种布局,如 多栏容器、弹性容器、网格容器 和 砌体容器 都会将子盒子并排排列,并在它们之间留有间隙(也称为 gutter)。 每个这样的间隙可以包含一个 间隙装饰, 即在相邻盒子之间绘制的可见分隔符(如线条)。
.grid-with-spans { display: grid; grid-template: repeat(4, 100px) / repeat(4, 100px); gap: 20px; row-rule: 6px solid red; column-rule: 6px solid blue; }

.flex { display: flex; flex-wrap: wrap; gap: 20px; width: 500px; row-rule: 6px solid red; column-rule: 6px solid blue; }

2.1. 布局与绘制
本规范通常不定义容器布局中间隙的几何形状; 这部分内容由其他规范规定。 请参见 CSS Box Alignment 3 § 8 盒子间的间隙 以获取关于 多栏容器、弹性容器 和 网格容器 的相关定义。
间隙装饰 不会占用空间。 也就是说,间隙装饰 的出现或宽度不会影响其他内容的排布。 如果某个 间隙装饰 的宽度大于其间隙, 任何相邻盒子都会与该装饰重叠, 在某些情况下装饰甚至可能超出容器盒子的范围。间隙装饰 会绘制在容器边框之上。 对于可滚动容器, 注意虽然容器的边框和背景不会随着内容滚动, 但装饰需要随着容器内的项目一起滚动。
在下列每种位置定义了一个 间隙交点:
- 间隙与容器内容边交点的中心。
- 不同方向间隙的交点的中心。
以下示例说明了 间隙交点 的位置, 在每个示例中用洋红色 + 标记。
.grid { 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; }

注意: CSS Box Alignment 3 § 8.1 行与列间隙:row-gap 与 column-gap 属性 定义了 弹性容器中交叉方向的间隙是指同一行中相邻弹性项目之间的间隙。 因此,在上面的例子中, 即使 #4 和 #7 的右边缘对齐, #5 和 #8 的左边缘对齐, 这两对项目之间的空间也是两个独立的间隙,因为它们位于不同的行。 所以 #4、#5、#7 和 #8 之间的交点 包含两个位置重合的 间隙交点: 一个在 #4 和 #5 之间间隙的底部, 一个在 #7 和 #8 之间间隙的顶部。
间隙装饰 是依据一对 间隙交点 绘制的, 位于相应间隙的中心并与其边缘平行。
2.2. 将间隙装饰分割为多个线段:column-rule-break、row-rule-break 和 rule-break 属性
名称: | column-rule-break,row-rule-break |
---|---|
值: | none | spanning-item | intersection |
初始值: | spanning-item |
适用于: | 网格容器,弹性容器,多栏容器 和 砌体容器 |
是否继承: | 否 |
百分比: | 不适用 |
计算值: | 按指定 |
规范顺序: | 按语法 |
动画类型: | 离散 |
设置在可见的“T”或“十字”交点处,如何将某一间隙内的装饰分割为多个线段。 如何具体应用这些值的详细说明请参见确定间隙装饰端点对的步骤。
- none
- 间隙装饰不会在可见的“T”或“十字”交点处开始或结束。 而是从间隙一端到另一端绘制一条连续的装饰线。
- spanning-item
- 间隙装饰会在可见的“T”交点处开始和结束,但会贯穿可见的“十字”交点。
- intersection
- 间隙装饰会在可见的“T”交点和“十字”交点处开始和结束。
名称: | rule-break |
---|---|
值: | <'column-rule-break'> |
初始值: | 见各自属性 |
适用于: | 同 column-rule-break 和 row-rule-break |
是否继承: | 见各自属性 |
百分比: | 见各自属性 |
计算值: | 见各自属性 |
动画类型: | 见各自属性 |
规范顺序: | 按语法 |
将 column-rule-break 和 row-rule-break 属性设置为相同的值。
2.2.1. 将间隙交点配对为线段
注意: 此定义的主要用例是避免间隙装饰在作者不希望的情况下与跨越项相交,
例如当跨越项触及容器边缘时,
或当跨越项形成“T交点”时。
但该定义的具体表述
也旨在处理如下情况:
标记的四个间隙交点位于同一条间隙中线。
但因第3项比第1和第5项稍宽,
从上往下数第二和第三个交点是不连续的。
因此,上面两个间隙交点成一对,
下面两个间隙交点成一对。
(还有另外一对间隙交点,
稍微偏右,未被标记,
这些点将组成另一对。)
- 令 pairs 为空列表。 令 endpoints 为落在 gap 中线上的间隙交点列表, 按照 gap 轴线的起点到终点排序。 令 break 为 column-rule-break 或 row-rule-break 的使用值, 以适用于 gap 为准。
- 如果 endpoints 少于2项,则返回 pairs。
- 如果 break 不为 none, 且 endpoints 前两项为不连续, 则删除 endpoints 的第一项,然后返回第2步。
- 从 endpoints 移除第一项。 令 start 等于该项。
- 从 endpoints 移除第一项。 令 end 等于该项。
-
如果 endpoints 非空,且下列任一条件为真...
- break 为 none。
- break 为 spanning-item, 且 start 与 endpoints 的第一项不是不连续的。
- break 为 intersection, 且 start 与 endpoints 的第一项不是不连续的, 并且该交点两侧都有跨越项。
- 为 start 在 gap 内计算偏移量。 按 gap 轴线正方向偏移 start。
- 为 end 在 gap 内计算偏移量。 按 gap 轴线反方向偏移 end。
- 向 pairs 添加由 start 和 end 组成的元组。
- 返回第2步。
每对通过上述步骤确定的端点之间都会绘制一个间隙装饰。
以下示例展示了 *-rule-break 属性的不同设置。 为便于比较差异,*-rule-outset 属性都设置为 0。
.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; rule-outset: 0px; }

.break-spanning-item-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: spanning-item; rule-outset: 0px; }

.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; rule-outset: 0px; }

.break-none-flex { display: flex; flex-wrap: wrap; gap: 20px; row-rule: 6px solid red; column-rule: 6px solid blue; rule-break: none; rule-outset: 0px; }

注意: 由于 flexbox 没有跨越项的概念, spanning-item 在 flexbox 上的效果与 none 相同。
.break-intersection-flex { display: flex; flex-wrap: wrap; gap: 20px; width: 500px; gap: 20px; row-rule: 6px solid red; column-rule: 6px solid blue; rule-break: intersection; rule-outset: 0px; }

2.3. 调整间隙装饰端点:column-rule-outset、row-rule-outset 和 rule-outset 属性
名称: | column-rule-outset,row-rule-outset |
---|---|
值: | <length-percentage> |
初始值: | 50% |
适用于: | 网格容器,弹性容器,多栏容器 和 砌体容器 |
是否继承: | 否 |
百分比: | 参考交叉间隙宽度 |
计算值: | 按指定 |
规范顺序: | 按语法 |
动画类型: | 按计算值类型 |
这些属性可用于相对于通常由间隙交点确定的端点,偏移间隙装饰的端点。 50% 的初始值会将间隙装饰端点放在交点中心。 取值为 0 时,间隙装饰端点会与交点边缘重合。 正值向交点中心延伸; 负值则远离交点中心。 这些偏移同样适用于容器边缘, 此时正值可能会超出容器内容区。
名称: | rule-outset |
---|---|
值: | <'column-rule-outset'> |
初始值: | 见各自属性 |
适用于: | 同 column-rule-outset 和 row-rule-outset |
是否继承: | 见各自属性 |
百分比: | 见各自属性 |
计算值: | 见各自属性 |
动画类型: | 见各自属性 |
规范顺序: | 按语法 |
将column-rule-outset和row-rule-outset属性设置为相同的值。
.outset-0px { column-rule-outset: 0px; column-rule-break: intersection; }

.outset-5px { column-rule-outset: 5px; column-rule-break: intersection; }

.outset-50percent { column-rule-outset: 50%; column-rule-break: intersection; }

.outset-negative-5px { column-rule-outset: -5px; column-rule-break: intersection; }

在考虑给定间隙内的间隙交点时, 每个交点都被分配一个交叉间隙宽度,定义如下:
- 容器内容边缘处
- 交叉间隙宽度为0。
- 与其他间隙的交点处
- 交叉间隙宽度为column-gap或row-gap属性的使用值, 以适用于交叉间隙为准。
- 令 width 为 point 的交叉间隙宽度。
- 令 outset 为 column-rule-outset 或 row-rule-outset 的计算值, 以适用于 gap 为准。 以 width 解析 outset 中的百分比。
- 令 result 为 width 乘以 50%。 从 result 中减去 outset。
- 返回 result。
关于如何应用偏移量的详细信息, 请参见确定间隙装饰端点对的步骤。
2.4. 间隙装饰绘制顺序:rule-paint-order 属性
名称: | rule-paint-order |
---|---|
值: | row-over-column | column-over-row |
初始值: | row-over-column |
适用于: | 网格容器,弹性容器,以及 砌体容器 |
是否继承: | 否 |
百分比: | 不适用 |
计算值: | 按指定 |
规范顺序: | 按语法 |
动画类型: | 离散 |
设置二维容器中间隙装饰的绘制顺序。
以下示例展示了使用rule-paint-order属性调整间隙装饰绘制顺序的效果。
.row-over-coulumn { rule-paint-order: row-over-column; row-rule: 6px solid red; column-rule: 6px solid blue; }

rule-paint-order: column-over-row; row-rule: 6px solid red; column-rule: 6px solid blue;

3. 颜色、样式与宽度
本节中的属性定义将覆盖[CSS-MULTICOL-1]中同名属性的定义。
3.1. 间隙装饰颜色:column-rule-color 和 row-rule-color 属性
名称: | column-rule-color,row-rule-color |
---|---|
值: | <line-color-list> | <auto-line-color-list> |
初始值: | currentcolor |
适用于: | 网格容器,弹性容器,多栏容器和砌体容器 |
是否继承: | 否 |
百分比: | 不适用 |
计算值: | 按指定 |
规范顺序: | 按语法 |
动画类型: | 按计算值类型 |
<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> ]+ )
- <color>
- 设置间隙装饰的颜色。
3.2. 间隙装饰样式:column-rule-style 和 row-rule-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> 的取值按折叠边框模型解释。
3.3. 间隙装饰宽度:column-rule-width 和 row-rule-width 属性
名称: | column-rule-width,row-rule-width |
---|---|
值: | <line-width-list> | <auto-line-width-list> |
初始值: | medium |
适用于: | 网格容器,弹性容器,多栏容器,以及砌体容器 |
是否继承: | 否 |
百分比: | 不适用 |
计算值: | 绝对长度列表,按边框宽度对齐,或在下述条件下为 0 |
规范顺序: | 按语法 |
动画类型: | 按计算值类型 |
<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> ]+ )
该属性用于设置间隙装饰的宽度。不允许负值。
如果 column-rule-style 的计算值为 none 或 , 那么 column-rule-width 的计算值为 0。 此行为是为了与CSS Multicol 1 § 4.4 列规则宽度:column-rule-width 属性 向后兼容。
当涉及值列表时,是否应适用“强制为0”行为? 如果适用,未对齐的列表应如何处理?
3.4. 值列表与 repeat() 语法
本节中的每个属性都接受以空格分隔的值列表。 以这种方式设置多个值可以让一个容器内的间隙装饰各不相同。
这样的列表可以包含 repeat() 语法。 类似于 CSS Grid Layout 1 § 7.2.3 重复行和列:repeat() 语法,这种语法允许以更简洁的方式书写具有重复模式的间隙装饰系列。
repeat() 语法的大致通用形式如下:
repeat( [ <integer [1,∞]> | auto ] , <value>+ )
repeat() 的第一个参数指定重复次数。
- <integer>
- 表示整数重复器。 整数重复器 会将第二个参数中的值列表,按照第一个参数指定的次数重复展开。
- auto
- 表示自动重复器。 自动重复器用于为那些未被列表其他部分赋值的间隙补齐值。 一个值列表中最多只能有一个repeat()是自动重复器。
repeat() 的第二个参数是以空格分隔的值列表, 这些值可被 repeat() 出现的属性接受。
- 将 values 中的所有整数重复器 替换为其展开形式。
- 如果列表中没有自动重复器,则:
- 从 values 和 gaps 的第一个项目开始,逐一对应赋值。 若值数量少于间隙数量,则从头循环取值,直到全部间隙被赋值。
- 结束此算法。
- values 包含自动重复器。 令 leading count 为 values 中自动重复器前的项目数。 令 trailing count 为自动重复器后的项目数。
-
将 gaps 划分如下:
- leading gaps 包含 gaps 的前 leading count 项。
- trailing gaps 包含 gaps 的后 trailing count 项, 不包括已在 leading gaps 的项目。
- auto gaps 包含 gaps 中未在 leading gaps 或 trailing gaps 中的项目。
- 若leading gaps 非空,使用 values 的前 leading count 项赋值间隙装饰到 leading gaps。
- 若trailing gaps 非空,使用 values 的最后 trailing count 项反向赋值间隙装饰到 trailing gaps。
- 若auto gaps 非空,使用repeat()第二参数中的值赋值间隙装饰到 auto gaps。
3.5. 间隙装饰简写:column-rule 和 row-rule 属性
名称: | 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>
这些简写属性会同时设置对应的宽度、样式和颜色属性。
3.6. 双向间隙装饰简写:rule-color、 rule-style、rule-width 和 rule 属性
名称: | rule-color |
---|---|
值: | <'column-rule-color'> |
初始值: | 见各自属性 |
适用于: | 同 column-rule-color 和 row-rule-color |
是否继承: | 否 |
百分比: | 见各自属性 |
计算值: | 见各自属性 |
动画类型: | 见各自属性 |
规范顺序: | 按语法 |
名称: | rule-style |
---|---|
值: | <'column-rule-style'> |
初始值: | 见各自属性 |
适用于: | 同 column-rule-style 和 row-rule-style |
是否继承: | 否 |
百分比: | 见各自属性 |
计算值: | 见各自属性 |
动画类型: | 见各自属性 |
规范顺序: | 按语法 |
名称: | rule-width |
---|---|
值: | <'column-rule-width'> |
初始值: | 见各自属性 |
适用于: | 同 column-rule-width 和 row-rule-width |
是否继承: | 否 |
百分比: | 见各自属性 |
计算值: | 见各自属性 |
动画类型: | 见各自属性 |
规范顺序: | 按语法 |
名称: | rule |
---|---|
值: | <'column-rule'> |
初始值: | 见各自属性 |
适用于: | 同 column-rule 和 row-rule |
是否继承: | 否 |
百分比: | 见各自属性 |
计算值: | 见各自属性 |
动画类型: | 见各自属性 |
规范顺序: | 按语法 |
这些简写属性会将对应的列和行属性设置为相同的值。
隐私注意事项
目前本规范没有新增的隐私注意事项报告。
安全注意事项
目前本规范没有新增的安全注意事项报告。