在多列布局中:被对齐的不是元素,而是「列盒」
多列(multicol)是 Box Alignment 最晚、支持最薄的一块。它的特别之处在于对齐对象 = column box(列盒):当容器够宽、按 column-width 算出的列占不满容器时,会多出行内方向的剩余空间——此时 justify-content(行内轴)可把这些列盒整体摆放 /
分散,align-content(块轴)则沿块轴摆放。还有个历史细节:column-gap 在多列里初始值是 1em(其余模式是 0)。下方横幅是对当前浏览器的实测。
对象层级变了: Flex/Grid 对齐的是「项」,多列对齐的是「列盒」——容器是 multicol 的内容盒、subject 是浏览器生成的一个个列。空间分布(space-between 等)产生的额外间隔会叠加到列间缝上,使实际缝宽超过 column-gap 指定值。
1 · 列占不满容器时,justify-content 分配列盒
容器定宽定高、column-width: 78px,内容只够铺成几列、列宽之和小于容器 → 行内轴有剩余空间。切换 justify-content 看这几个列盒如何在容器里靠左 / 居中 / 两端铺开;调 column-gap 看列间缝变化(注意默认非 0)。
| 属性 | 轴 | 作用 |
|---|---|---|
justify-content |
行内 | 列宽之和 < 容器时,把列盒整体摆放 / 分散到行内方向的剩余空间。 |
align-content |
块 | 沿块轴摆放列内容(列高之和 < 容器高时)。 |
column-gap / gap |
行内 |
列间缝。初始值 1em(多列特例);空间分布带来的额外间隔会叠加其上。
|
*-items / *-self |
— | 不适用:多列没有「单个 item 的格子」概念,只有列盒这一层。 |
放进全局看: 同一个 justify-content,在 Flex 里分配主轴上的项、Grid 里分配列轨、多列里分配列盒——对象不同、轴的归属不同,但「把一组对齐对象在容器剩余空间里摆放」这个统一语义不变。这正是 Box Alignment
把对齐从各布局里抽象出来的价值。