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

如何用CSS Grid让所有列宽度与最宽列保持一致?

问题描述

我正在用CSS Grid做网格布局,想要所有列宽度一致,且这个宽度等于网格里最宽列的宽度。我知道用JS或者display: table能实现,但想纯靠CSS Grid完成(如果可行的话)。

目前的代码如下:

CSS代码

* {
  box-sizing: border-box;
}

div {
  display: grid;
  grid-template-columns: repeat(auto-fit, 120px);
  gap: 5px;
}

span {
  padding: 10px;
  border: 1px solid black;
}

HTML代码

<div>
  <span>Orange</span>
  <span>Purple</span>
  <span>Aquamarine</span>
  <span>Black</span>
  <span>Brown</span>
  <span>Red</span>
</div>

现在我把列宽固定成了120px,但希望这个宽度能自动适配最宽的"Aquamarine"列的宽度。

解决方案

直接修改grid-template-columns的取值就能实现,不需要额外的JS或者table布局:

方案1:自动换行且列宽统一为最宽项宽度

如果希望网格在容器空间不足时自动换行,同时所有列保持和最宽项一样的宽度,用下面的写法:

div {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(max-content, 1fr));
  gap: 5px;
}

这个写法的逻辑是:max-content确保列宽至少能容纳最宽的内容,1fr让列在空间足够时填充容器,但所有列的宽度会统一对齐到最宽项的尺寸。

方案2:列宽严格等于最宽项,超出容器则横向滚动

如果不需要自动换行,只想让所有列宽度完全匹配最宽项,直接用:

div {
  display: grid;
  grid-template-columns: repeat(auto-fit, max-content);
  gap: 5px;
}

这种情况下,所有列的宽度都会和"Aquamarine"所在列一致,当总宽度超过容器时,会出现横向滚动条。

补充说明

max-content是CSS Grid支持的关键字,它会自动计算出能容纳内容的最小宽度(也就是内容不换行的宽度),通过repeat(auto-fit, ...)把这个宽度应用到所有列,就能实现所有列宽度统一为最宽项的尺寸。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:31:02