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

CSS Grid实现左列5行右列3行不等行数布局问题

问题描述

我希望实现如下Grid网格布局:
目标Grid布局效果
核心需求为第一列共5行,第二列共3行。以下是我尝试编写的实现代码:

CSS样式:

.tableGrid {
  display:grid; 
  grid-template-columns: 1fr 1fr;
  grid-template-rows: repeat(5); 
  row-gap: 6px;
}

结构代码:

<div className='tableGrid'>
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
  <div>7</div>
  <div>8</div>
</div>

上述代码实际渲染为两列各4行的效果,无法实现一列5行、另一列3行的预期布局。我了解到可通过repeat属性调整行配置,但在该场景下未生效,寻求可行的实现方案。

问题原因

代码不生效有两个直接原因:

  • repeat() 函数语法错误:该函数要求必须传入两个参数,分别是重复次数、轨道尺寸,你写的repeat(5)缺少尺寸参数,这条CSS规则完全不生效,Grid会启用自动布局,按子项总数均分行列,8个子项配2列自然会排成4行。
  • 没有给子项设置跨行属性:Grid默认每个子项仅占用1个行轨道,不手动指定跨幅的话,所有格子大小一致,不可能出现两列行数不同的效果。
可行实现方案

直接定义5个等高的行轨道,给第二列的3个子项分别设置行跨幅,让3个元素的总占行高度和第一列5行对齐即可:

.tableGrid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  /* 正确写法:重复5次,每次行高1fr,和列宽逻辑一致 */
  grid-template-rows: repeat(5, 1fr);
  row-gap: 6px;
  /* 可按需添加列间距 */
  column-gap: 6px;
}
/* 第二列三个元素分别设置跨行行数,总和2+2+1=5,和第一列总高度匹配 */
.tableGrid > div:nth-child(2) {
  grid-row: span 2;
}
.tableGrid > div:nth-child(4) {
  grid-row: span 2;
}
.tableGrid > div:nth-child(6) {
  grid-row: span 1;
}
/* 可选:给格子加基础样式方便调试,可根据需求删除 */
.tableGrid > div {
  border: 1px solid #e5e7eb;
  padding: 12px;
  display: flex;
  align-items: center;
  justify-content: center;
}

原有JSX结构不需要做任何修改,直接使用即可实现预期效果。

注意:如果第二列的3个格子不需要按2:2:1分配高度,也可以调整span的数值,只要三个元素的span总和等于总行数5,就能和第一列完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:48:18