跨列和平衡列

本指南介绍了如何在多列 (multicol) 容器内让元素跨列,以及如何控制列的填充方式。

跨列

要使某个元素跨列,请使用 column-span 属性,并将其值设置为 all。这样会使该元素成为一个跨列元素,跨越所有列。

多列容器的任何后代元素都可以变成跨列元素,包括直接和间接子元素。例如,直接嵌套在容器内的标题可以变成跨列元素,嵌套在多列容器内的 <section> 内的标题也可以变成跨列元素。

在下面的示例中,<h2> 元素被设置为 column-span: all,跨越所有列。

在第二个示例中,标题位于 <article> 元素内部,但仍能按预期跨越内容。

引入跨列元素后,会打断列的流动;跨列元素之后会重新开始列,实际上会创建一组新的列框。内容不会跳过跨列元素。

column-span 的局限性

column-span 只能取两个值。初始值 none 表示元素不跨列,仍然保留在列中。值 all 表示元素跨越所有列。没有值可以实现部分跨列,例如让元素跨越三列中的两列。

需要注意的事项

如果跨列元素位于另一个具有边距、填充和边框或背景色的元素内部,则该框可能会出现在跨列元素的上方,其余内容显示在下方。因此,在将元素设置为跨越所有列时,应该谨慎,确保考虑这种情况。

此外,如果跨列元素出现在内容的后面,当跨列元素之后没有足够的内容来创建列时,可能会导致意外或不希望的行为。请谨慎使用跨列,并在不同的断点处进行测试,确保获得预期的效果。

填充和平衡列

平衡的列集是指所有列的內容量大致相同。当内容量与提供的空间量不匹配时,填充和平衡就很重要,例如,当在容器上声明了 height 属性时。

column-fill 的初始值为 balancebalance 的值表示所有列尽可能平衡。在片段化上下文中,例如 分页媒体,只有最后一个片段是平衡的。这意味着在最后一页,最后一组列框是平衡的。

另一个平衡值 balance-all 会平衡片段化上下文中的所有列。

此示例中的列包含一个图像和一些文本,它们是平衡的。图像不能断开,位于第一列。其他列是平衡的,填充了等量的文本。

column-fillauto 值按顺序填充列,先在内联起始方向填充第一列,然后将内容放置到后续列中,而不是平衡并均匀填充所有列。在此示例中,我们将 column-fill 更改为 auto。列填充到容器的高度,在末尾留下空列。

后续步骤

在下一份指南中,您将学习 多列如何处理溢出,以及当列数超过容器容纳的数量时的情况。