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

如何让CSS父容器中中间子元素占据剩余高度?

解决方案

问题出在两个核心点:

  • 上下的宽图默认会被flex容器压缩(flex-shrink默认值为1),无法保持自身宽高比的自适应高度
  • 中间长图使用flex-grow:1时,未限制尺寸超出剩余空间,且图片缩放规则未调整,导致不符合预期

修正后的完整代码

HTML(无需修改)

<div class="parent">
   <img class="wide" src="wide.png">
   <img class="tall" src="tall.png">
   <img class="wide" src="wide.png">
</div>

CSS

.parent {
    display: flex;
    flex-direction: column;
    width: 100px;
    height: 200px;
    background: repeating-linear-gradient(
        45deg,
        rgba(0, 0, 0, 0),
        rgba(255, 0, 0, 0.4) 20px
    );
    border: 1px solid black;
}
.wide {
    width: 100%;
    flex-shrink: 0; /* 阻止宽图被压缩,保持宽高比自适应高度 */
}
.tall {
    flex-grow: 1; /* 自动填充父容器减去上下宽图后的剩余高度 */
    max-height: 100%; /* 限制长图高度不超过分配到的空间 */
    width: 100%; /* 适配父容器宽度 */
    object-fit: contain; /* 保持图片比例,完整显示在容器内 */
    /* 若需要图片填满容器并裁剪多余部分,替换为 object-fit: cover; */
}

关键属性解释

  • flex-shrink: 0:给上下宽图添加这个属性,避免flex容器在空间不足时压缩它们的高度,确保宽图根据自身宽高比自动计算高度。
  • flex-grow: 1:让中间长图占据父容器减去上下宽图高度后的所有剩余空间,无需硬编码数值,适配父容器尺寸变化。
  • max-height: 100%:配合flex-grow,确保长图不会超出分配到的剩余高度范围。
  • object-fit: contain:保证长图在指定尺寸内保持原有比例,不会被拉伸变形;如果需要图片完全覆盖容器区域,可改用object-fit: cover。

这样设置后,无论父容器的宽高如何调整,上下宽图都会自适应宽度并维持比例高度,中间长图自动填充剩余空间且保持图片原有比例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:46:17