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

align-items: stretch导致CSS Grid行高异常问题咨询

网格项目内元素对齐差异的原因解释

重现代码

CSS 代码

* {
  margin: 0;
  padding: 0;
}

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  margin: 20px auto;
  align-items: stretch;
}

.sub-grid {
  background-color: #f0f0f0;
  padding: 20px;
  border: 1px solid #ccc;
  font-size: 1.2rem;
  display: grid;
  grid-template-columns: min-content 1fr;
  gap: 15px 10px;
}

.sub-grid>.icon {
  grid-row: 1 / span 2;
  width: 45px;
  height: 45px;
}

HTML 代码

<div class="grid">
  <div class="sub-grid cell-1"><img class="icon"
src="https://picsum.photos/id/237/200/300"
alt="Icon 1"
/>
    <h2>Heading 1</h2>
    <p>Lorem,
      ipsum dolor sit amet consectetur adipisicing elit. Tenetur distinctio necessitatibus pariatur voluptatibus. </p>
  </div>
  <div class="sub-grid cell-2"><img class="icon"
src="https://picsum.photos/id/237/200/300"
alt="Icon 2"
/>
    <h2>Heading 2</h2>
    <p>Voluptatum mollitia quae. Vero ipsum sapiente molestias accusamus rerum sed a eligendi aut quia. </p>
  </div>
  <div class="sub-grid cell-3"><img class="icon"
src="https://picsum.photos/id/237/200/300"
alt="Icon 3"
/>
    <h2>Heading 3</h2>
    <p>Tenetur distinctio necessitatibus pariatur voluptatibus quidem consequatur harum. </p>
  </div>
  <div class="sub-grid cell-4"><img class="icon"
src="https://picsum.photos/id/237/200/300"
alt="Icon 4"
/>
    <h2>Heading 4</h2>
    <p>Vero ipsum sapiente molestias accusamus rerum. Lorem,
      ipsum dolor sit amet consectetur adipisicing elit. </p>
  </div>
  <div class="sub-grid cell-5"><img class="icon"
src="https://picsum.photos/id/237/200/300"
alt="Icon 5"
/>
    <h2>Heading 5</h2>
    <p>Quidem consequatur harum,
      voluptatum mollitia quae. Tenetur distinctio necessitatibus pariatur voluptatibus. </p>
  </div>
  <div class="sub-grid cell-6"><img class="icon"
src="https://picsum.photos/id/237/200/300"
alt="Icon 6"
/>
    <h2>Heading 6</h2>
    <p>Pariatur voluptatibus quidem consequatur harum,
      voluptatum mollitia quae </p>
  </div>
</div>

问题现象

当.sub-grid内的文本行数不同时(比如第一个.sub-grid的文本是4行,第二个是3行),h2元素下方的间距出现差异,导致第一个.sub-grid里的文本第二行比第二个的略高。设置.grid的align-items: start后,子网格内的行就能对齐一致。

原因解释

  • align-items: stretch的强制拉伸:外部.grid设置align-items: stretch时,同一网格行里的所有.sub-grid都会被拉到和该行最高的.sub-grid一样高。
  • 内部网格的空间分配:.sub-grid本身是网格容器,默认align-content: stretch。当它被强制拉高后,内部的网格项目(图标、标题、文本)之间会自动分配额外的空白空间,这些空间会加到gap或者项目的上下,导致不同.sub-grid里的文本行位置错位。
  • align-items: start的修正作用:改成align-items: start后,每个.sub-grid的高度只由自身内容决定,不会被强制拉伸。内部网格没有多余空间需要分配,所有.sub-grid里的标题和文本都会从顶部开始排列,自然就能保持行对齐一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:56:00