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

使用Flexbox实现每行3个div 避免最后一行元素宽度异常

问题根源

你使用的flex: 33%是flex: 1 1 33%的缩写,其中flex-grow: 1属性会让元素在容器有剩余空间时自动拉伸填充,所以当一行不足3个元素时,现有元素会平分剩余宽度,才会出现2个元素各占50%的问题。另外你的响应式规则里没有覆盖.flex-item-center,小屏显示会出现错乱。

修复方案

修改flex属性关闭自动拉伸,固定元素宽度为三分之一,同时修正响应式规则即可,修改后的完整CSS如下:

* {
  box-sizing: border-box;
}

.flex-container {
  display: flex;
  flex-wrap: wrap;
  font-size: 30px;
  text-align: center;
  /* 如果需要元素间距可以加gap: 10px; 同时下方元素宽度调整为 calc(33.33% - 6.67px) */
}

.flex-item-left {
  background-color: #f1f1f1;
  padding: 10px;
  flex: 0 0 33.33%; /* 0 0 代表禁止拉伸、禁止压缩,固定宽度为1/3 */
}

.flex-item-center {
  background-color: dodgerblue;
  padding: 10px;
  flex: 0 0 33.33%;
}

.flex-item-right {
  background-color: red;
  padding: 10px;
  flex: 0 0 33.33%;
}

/* 响应式布局修正,覆盖所有flex子项 */
@media (max-width: 800px) {
  .flex-item-right, .flex-item-left, .flex-item-center {
    flex: 0 0 100%;
  }
}

如果需要所有元素自动换行,不需要拆分多个.flex-container容器,把所有子项放在同一个容器下即可自动按每行3个排布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:06:08