You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现每3个<li>元素换行?现有columns布局方案存在问题

解决方案:用Flexbox或CSS Grid实现每3个列表项自动换行

原来的columns属性是按列强制分配空间,不管列表项总数,所以当数量不是3的倍数时,多余的项会被塞进前面的列里,没法实现“每3个一行”的需求。下面提供两种精准满足需求的方案:

方案一:Flexbox实现(兼容性更优)

CSS代码

ul {
  list-style: none; /* 隐藏项目符号 */
  padding: 0;
  margin: 0;
  display: flex;
  flex-wrap: wrap; /* 空间不足时自动换行 */
  gap: 10px; /* 可选:设置列表项之间的间距 */
}

ul li {
  flex: 0 0 calc(33.333% - 7px); /* 固定占1/3宽度,减去间距的影响 */
  box-sizing: border-box; /* 确保内边距/边框不会撑开宽度 */
}

关键说明

  • flex-wrap: wrap:让超出一行的列表项自动换行
  • calc(33.333% - 7px):抵消gap带来的额外宽度,保证每行刚好3个项
  • box-sizing: border-box:避免内边距或边框导致宽度溢出

方案二:CSS Grid实现(代码更简洁)

CSS代码

ul {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 直接定义3列,每列宽度均分 */
  gap: 10px; /* 可选:设置行列间距 */
}

关键说明

  • repeat(3, 1fr):快速生成3个等宽列
  • 当列表项总数不是3的倍数时,最后一行的项会自动靠左排列,完全符合“多余元素单独换行”的需求

效果验证

用你提供的HTML结构测试,两种方案都能实现:

  • 6个列表项:2行3列
  • 7个列表项:3行(前两行各3个,第三行1个)
  • 8个列表项:3行(前两行各3个,第三行2个)

你可以根据项目兼容性需求选择方案:Flexbox支持IE10+,Grid支持IE11+。

内容的提问来源于stack exchange,提问作者saneese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:19