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

如何使Flex布局中的四张图片保持相同高度?

图片错落排版问题解决方法

我有四张图片,想要实现左右两列的错落排版:左列上方是一张高图,下方是一张矮图;右列上方是一张矮图,下方是一张高图,整体上下对齐。但当前用flex写的代码效果不符合预期。

当前代码

HTML

<div class="gallery">
  <div class="flex-item-40">
    <img src="./images/coast.jpg" alt="" />
  </div>
  <div class="flex-item-60">
    <img src="./images/island.jpg" alt="" />
  </div>
  <div class="flex-item-60">
    <img src="./images/balloon.jpg" alt="" />
  </div>
  <div class="flex-item-40">
    <img src="./images/mountain.jpg" alt="" />
  </div>
</div>

CSS

.gallery {
  display: flex;
  flex-wrap: wrap;
}

.flex-item-40 {
  flex-basis: 40%;
}

.flex-item-60 {
  flex-basis: 60%;
}

问题原因

当前flex布局因为flex-wrap: wrap,第三张图会被挤到下一行,没法形成左右两列上下对应的错落结构;另外没有设置图片的缩放规则,导致图片比例混乱,排版错位。

解决方法

方法一:用CSS Grid实现(推荐)

Grid布局可以直接通过行列跨度控制元素位置,适配现有HTML结构只需修改CSS:

.gallery {
  display: grid;
  grid-template-columns: 40% 60%; /* 定义两列宽度 */
  height: 600px; /* 可根据需求设置整体高度,或让内容自动撑开 */
}

.gallery img {
  width: 100%;
  height: 100%;
  object-fit: cover; /* 保持图片比例,裁剪多余部分,避免变形 */
}

/* 控制每个元素的行跨度 */
.flex-item-40:first-of-type {
  grid-row: span 2; /* 左上图占2行高度 */
}
.flex-item-60:first-of-type {
  grid-row: span 1; /* 右上图占1行高度 */
}
.flex-item-60:last-of-type {
  grid-row: span 2; /* 右下图占2行高度 */
}
.flex-item-40:last-of-type {
  grid-row: span 1; /* 左下图占1行高度 */
}

方法二:调整Flex布局结构

把左右两列拆分成独立容器,确保上下元素对应:

修改后的HTML

<div class="gallery">
  <div class="column column-40">
    <div class="item tall">
      <img src="./images/coast.jpg" alt="" />
    </div>
    <div class="item short">
      <img src="./images/mountain.jpg" alt="" />
    </div>
  </div>
  <div class="column column-60">
    <div class="item short">
      <img src="./images/island.jpg" alt="" />
    </div>
    <div class="item tall">
      <img src="./images/balloon.jpg" alt="" />
    </div>
  </div>
</div>

对应的CSS

.gallery {
  display: flex;
  width: 100%;
  height: 600px; /* 设置整体高度 */
}

.column {
  display: flex;
  flex-direction: column;
  width: 100%;
}

.column-40 {
  flex-basis: 40%;
}

.column-60 {
  flex-basis: 60%;
}

.item {
  width: 100%;
}

.tall {
  flex: 2; /* 高图占2份高度 */
}

.short {
  flex: 1; /* 矮图占1份高度 */
}

.item img {
  width: 100%;
  height: 100%;
  object-fit: cover; /* 保持图片比例 */
}

两种方法都能实现目标排版,Grid方式代码更简洁,无需调整HTML结构;Flex方式通过拆分容器也能精准控制上下元素的对应关系。object-fit: cover可根据需求替换为contain(显示完整图片,可能留空白)或其他属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:16:13