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

如何让Grid子项跨所有行且不影响其他Grid子项布局?

动态Grid布局实现方案

需求说明

要实现一个动态Grid布局:

  • 所有新元素默认放入第一列的新行,高度随内容自适应
  • 最后一个元素切换到第二列,并占满该列的全部高度
  • 元素数量动态变化,不能使用固定值或针对固定位置的选择器

期望布局效果

第一列包含多个高度自适应的元素(每个元素高度由自身内容决定),第二列仅有一个元素,从容器顶部延伸到底部,且不会导致第一列元素被强制拉平高度。

解决方案

核心是通过调整Grid容器的对齐属性,避免第一列元素被强制拉伸,同时让最后一个元素自动占据第二列全部高度。

修改后的代码

CSS

ul {
  margin: 0;
  list-style-type: none;
  display: grid;
  grid-template-columns: auto auto;
  grid-gap: 20px;
  max-width: 600px;
  align-items: start; /* 关键:阻止元素被拉伸到行高 */
}

li {
  grid-column: 1;
  border: 1px solid black;
}

li:last-child { /* 适配动态元素数量,自动选中最后一个元素 */
  grid-column: 2;
  grid-row: 1 / -1; /* 占满第二列的全部高度 */
}

img {
  max-width: 100%;
}

HTML

<ul>
  <li>here's some content</li>
  <li>here's some content<br>多一行内容测试高度自适应</li>
  <li>here's some content</li>
  <li>here's some content<br><br>更多内容</li>
  <li><img src="https://images.unsplash.com/photo-1481349518771-20055b2a7b24?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxzZWFyY2h8NHx8cmFuZG9tfGVufDB8fDB8fA%3D%3D&w=1000&q=80"></li>
</ul>

原理说明

  • align-items: start:Grid容器默认的align-items: stretch会让单元格内的元素拉伸至行高,添加该属性后,第一列元素会保持自身内容高度,不会被第二列的高元素强制拉平。
  • li:last-child:替代固定类名,无论元素数量多少,最后一个元素都会自动应用第二列布局规则,完美适配动态场景。
  • grid-row: 1 / -1:让最后一个元素从第一行延伸到最后一行,占满第二列的全部高度,满足布局需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:20:40