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

如何使图片在Flexbox中保持宽高比适配?代码疑问

解决Flexbox容器中图片object-fit:contain不生效的问题

你的问题核心在于**object-fit需要图片本身有明确的尺寸约束,才能按照容器空间进行缩放适配**。当前代码里的.box虽然通过flex:1占据了容器的剩余空间,但图片并没有被限制在.box的尺寸范围内,所以object-fit:contain无法发挥作用。

修改方案一:让图片填满容器空间

给图片添加width: 100%; height: 100%;,让它填满.box的可用空间,此时object-fit:contain就能基于这个固定尺寸进行宽高比适配了。

修改后的完整代码:

* { box-sizing: border-box; margin: 0; }
.container { 
  display: flex; 
  flex-direction: column; 
  align-items: stretch; 
  width: 400px; 
  height: 200px; 
  padding: 10px; 
  background: red; 
}
.box { flex: 1; }
.box img { 
  width: 100%; 
  height: 100%; 
  object-fit: contain; 
}
<div class="container">
  <h1>lorem ipsum</h1>
  <figure class="box">
    <img src="http://lorempixel.com/400/200/">
  </figure>
</div>

修改方案二:通过Flex布局居中适配

如果希望图片在.box内居中显示,也可以给.box添加Flex布局,用max-width和max-height限制图片的最大尺寸,同样能实现宽高比保持的效果:

* { box-sizing: border-box; margin: 0; }
.container { 
  display: flex; 
  flex-direction: column; 
  align-items: stretch; 
  width: 400px; 
  height: 200px; 
  padding: 10px; 
  background: red; 
}
.box { 
  flex: 1; 
  display: flex; 
  justify-content: center; 
  align-items: center; 
}
.box img { 
  max-width: 100%; 
  max-height: 100%; 
  object-fit: contain; 
}

原理说明

  • 方案一中,width:100%; height:100%;给图片明确了填充目标,object-fit:contain会在这个范围内保持图片原始宽高比,确保完整显示不裁剪。
  • 方案二中,Flex布局让图片在.box内居中,max-width和max-height确保图片不会超出容器边界,object-fit:contain则负责维持宽高比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:34:44