
使用 CSS columns 属性可原生、语义化地将 <ul> 列表自动分割为多列,避免嵌套冗余的 div.row/col 结构,兼顾语义正确性与响应式灵活性。
使用 css `columns` 属性可原生、语义化地将 `
- ` 列表自动分割为多列,避免嵌套冗余的 `div.row/col` 结构,兼顾语义正确性与响应式灵活性。
在 Bootstrap 等框架中强行用网格系统(如 row + col)包裹 <li> 元素,不仅违背 HTML 语义规范(<ul> 的直接子元素应仅为 <li>),还破坏了列表的可访问性与 SEO 友好性。更优雅的解决方案是利用现代 CSS 的多列布局能力。
✅ 推荐方案:CSS columns 属性(语义优先)
只需一行 CSS 即可实现四列自动分栏:
.list-group {
columns: 4;
column-gap: 1.5rem; /* 可选:控制列间距 */
}配合干净的 HTML 结构(无任何中间 div):
<div class="grid">
<ul class="list-group">
<li class="list-group-item">1</li>
<li class="list-group-item">2</li>
<li class="list-group-item">3</li>
<li class="list-group-item">1</li>
<li class="list-group-item">2f</li>
<li class="list-group-item">3</li>
<li class="list-group-item">1</li>
<li class="list-group-item">2</li>
<li class="list-group-item">1</li>
<li class="list-group-item">2</li>
</ul>
</div>✅ 优势:
立即学习“前端免费学习笔记(深入)”;
- 完全符合 HTML 规范(<li> 直接位于 <ul> 下);
- 自动平衡各列高度(浏览器按内容流式分栏);
- 响应式友好(结合 column-count 或 columns: 4 auto 可适配不同视口);
- 无障碍支持良好(屏幕阅读器仍按顺序读取所有 <li>)。
⚠️ 注意事项与替代方案
- columns 的局限性:它按内容高度均衡分栏,而非按项数均分。若需严格“每列固定项数”(如前两列各3项、后两列各2项),则 columns 不适用。此时推荐 CSS Grid + nth-child:
.list-group {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.5rem;
}
/* 若需手动控制每列项数,可显式定位(适用于已知总项数) */
.list-group > li:nth-child(-n+3) { grid-column: 1; }
.list-group > li:nth-child(n+4):nth-child(-n+6) { grid-column: 2; }
.list-group > li:nth-child(n+7):nth-child(-n+8) { grid-column: 3; }
.list-group > li:nth-child(n+9) { grid-column: 4; }- 兼容性提醒:columns 在所有现代浏览器中支持良好(Chrome 50+、Firefox 52+、Safari 10.1+、Edge 79+),如需支持 IE,应降级为 Flex/Grid 方案。
✅ 总结
优先使用 columns: 4 实现语义清晰、维护成本低的多列列表;仅当业务逻辑强制要求“精确项数分配”时,再考虑 CSS Grid 配合 nth-child 的精细化控制。摒弃为分栏而添加非语义 div 的做法,让结构更健壮、样式更可控、代码更可持续。


















