许多前端开发人员在处理列表多栏布局时,通常会优先考虑使用 Bootstrap 的网格系统,或者手动添加大量 div。然而,这种做法往往为了视觉呈现而牺牲了 HTML 的语义结构。实际上,CSS 自带的 columns 属性完全可以简洁高效地实现这一需求。 例如,在构建导航菜单、标签墙或长列表时,经常
纯CSS实现列表自动分栏,无需额外div容器
作者:技术拾光
时间:2026-07-04
浏览:605
许多前端开发人员在处理列表多栏布局时,通常会优先考虑使用 Bootstrap 的网格系统,或者手动添加大量 div。然而,这种做法往往为了视觉呈现而牺牲了 HTML 的语义结构。实际上,CSS 自带的 columns 属性完全可以简洁高效地实现这一需求。
例如,在构建导航菜单、标签墙或长列表时,经常需要将 中的 均匀分为 4 列。传统方法借助 Bootstrap 的 .row 和 .col 来包裹每个 ,尽管操作看似简单,却存在不少问题:
- 违背 HTML 语义规则——
的合法父元素只能是或,中间插入会直接破坏 DOM 结构的合法性;- 标签冗余度过高,屏幕阅读器可能无法正确解析嵌套关系,导致可访问性降低;
- 后期维护不便,增减列表项时需手动调整列容器,增加了开发成本。
推荐方案:CSS 多列布局(Multi-column Layout)
只需一行 CSS 代码,即可让浏览器自动将连续的
流畅分配到指定列数:.list-group { columns: 4; /* 指定列数 */ column-gap: 1.5rem; /* 可选:列间距 */ column-rule: 1px solid #e9ecef; /* 可选:列间分隔线 */}相应的 HTML 依旧保持语义纯净:
- 1
- 2
- 3
- 1
- 2f
- 3
- 1
- 2
- 1
- 2
该方案的优势十分明显:
- 零结构侵入:无需添加任何非语义的 div,完全采用标准的
结构; - 自动平衡:浏览器会根据内容高度智能分配项目,避免人工拆分导致的列高不匀;
- 天然响应式:结合
column-count与column-width(例如columns: 15em),可实现“最小宽度优先”的流式列数自适应; - 广泛兼容:Chrome 50+、Firefox 52+、Safari 10.1+、Edge 79+ 均已原生支持,现代项目可放心使用。
注意事项
columns属于高度驱动型布局,按列高均衡分配。若业务要求严格按顺序“每列固定 N 项”(比如前两列各 3 项,后两列各 2 项),建议改用 CSS Grid 配合:nth-child()精确定位:.list-group { display: grid; grid-template-columns: repeat(4, 1fr); gap: 0.5rem;}/* 若需精确控制每列项数,可用 :nth-child(an+b) 分组 */- 在
内部请勿混入其他元素(如),否则columns的渲染逻辑会受到影响;- 若仍需兼容旧版 IE,只能降级采用 Flex 或 Grid 方案——不过现代项目通常已无需考虑 IE。
一句话总结:使用
columns进行列表分栏,是最轻量、最合规的选择。它并非要取代 Grid 或 Flex——面对复杂布局需求,Grid 和 Flex 依然是更合适的工具。但在“纯内容流式分栏”这一场景下,columns显然更加优雅,也更符合 Web 标准的本意。每个工具都有其最擅长的领域,关键在于用对地方。实用工具推荐
电子包浆使用 ›绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
图片压缩使用 ›选择画质和输出格式,预览压缩前后的大小。