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

CSS网格布局:行数变化时让第三单元格占满整行的实现方法

实现第三项换行后占满整行的CSS网格方案

当然可行,以下是两种实用的实现方式:

方法一:媒体查询(兼容性好)

通过媒体查询判断容器宽度,针对不同宽度区间设置网格布局规则,精准控制第三项的显示:

.grid-container {
  margin: 0 auto;
  display: grid;
  gap: 0;
  justify-items: stretch;
  align-items: stretch;
  /* 宽度足够时,三个项平分一行 */
  grid-template-columns: repeat(3, 1fr);
}

/* 当容器宽度小于 840px(3*280px)时,切换为2列布局,第三项占满整行 */
@media (max-width: 839px) {
  .grid-container {
    grid-template-columns: repeat(2, 1fr);
  }
  .grid-item:nth-child(3) {
    grid-column: 1 / -1; /* 跨越所有列,占满整行 */
  }
}

/* 当容器宽度小于 560px(2*280px)时,切换为单列布局 */
@media (max-width: 559px) {
  .grid-container {
    grid-template-columns: 1fr;
  }
}

这种方法兼容性强,所有支持CSS网格的浏览器都能正常工作。

方法二:使用:has选择器(无需媒体查询)

利用CSS的:has选择器判断第三项是否处于单独一行,自动调整布局:

.grid-container {
  margin: 0 auto;
  display: grid;
  gap: 0;
  justify-items: stretch;
  align-items: stretch;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
}

/* 当第三项是最后一个且单独占一行时,设置为2列布局并让第三项占满整行 */
.grid-container:has(.grid-item:nth-child(3):nth-last-child(1)) {
  grid-template-columns: repeat(2, 1fr);
}
.grid-container:has(.grid-item:nth-child(3):nth-last-child(1)) .grid-item:nth-child(3) {
  grid-column: 1 / -1;
}

注意::has选择器目前已被现代主流浏览器支持(Chrome、Firefox 121+、Safari等),如果需要兼容旧版浏览器,建议优先使用方法一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:42:49