Bootstrap 5.3+ 推荐用 ratio 类(如 ratio-16x9)包裹图片实现可靠宽高比,避免直接在 img 上设 aspect-ratio 被忽略;需配合 w-100、h-100 和 object-fit-cover/contain;旧版需 padding-top 模拟;img-fluid 仅负责缩放,不替代比例控制;背景图须用 background-size: cover/contain,与 ratio 无关。

Bootstrap 5.3+ 中用 ratio 类控制图片比例最省事
直接给图片加 ratio-16x9 这类类名,比手写 aspect-ratio 更可靠。因为 Bootstrap 的 ratio 容器已预设 position: relative、overflow: hidden 和 aspect-ratio,绕过了 元素固有尺寸覆盖 CSS 属性的问题。
常见错误是把 aspect-ratio 直接写在 上:——浏览器优先按原始宽高渲染,该样式会被忽略。
正确写法必须包裹:
<div class="ratio ratio-16x9"> @@##@@ </div>
-
object-fit-cover裁剪填满,适合封面图、轮播图等强调视觉一致性的场景 - 若需完整显示(如证件照预览),换用
object-fit-contain - 不加
h-100会导致容器高度被撑开,破坏比例
Bootstrap 5.2 及更早版本只能靠 padding-top 模拟比例
旧版不支持 aspect-ratio,IE 和老 Safari 也不认,得用传统技巧:用 padding-top: 56.25%(即 9/16)撑出高度,再绝对定位图片铺满。
关键点在于外层必须设 position: relative,否则 position: absolute 的图片会脱离文档流乱飞。
<div class="position-relative" style="padding-top: 56.25%"> @@##@@ </div>
- 兼容 IE9+,但维护成本高:每个比例都要单独算
padding-top值 - 不能响应式切换比例(比如小屏切 4:3),得靠媒体查询重写整个结构
- 如果父容器本身宽度不固定(如
col内嵌套),padding-top百分比仍有效,因为它基于父容器宽度计算
img-fluid 和 ratio 不是互斥关系,而是分工明确
img-fluid 只负责“等比缩放不溢出”,它不管容器有没有高度、比例是否稳定;ratio 才真正锁定宽高比。两者一起用才完整。
常见踩坑:只加 img-fluid 放在卡片里,结果卡片高度塌陷、图片挤成一条线——因为没设容器比例或最小高度。
- 轮播图、封面图等需要固定比例的场景,
ratio必须上 - 普通内容图(如文章配图)可只用
img-fluid,避免过度约束 -
img-fluid对 SVG 也生效,但内联 SVG 必须带viewBox,否则缩放后图形错位
用 background-image 替代 
时,比例控制逻辑完全不同

背景图没有原生宽高比概念,background-size: cover 或 contain 是唯一可控手段,和 ratio 类无关。
想让背景图“全屏且不变形”,别碰 100% 100%——那是拉伸,不是适配。正确组合是:
.hero-bg {
background-image: url("bg.jpg");
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
min-height: 100vh;
}
-
cover保证铺满且等比,但裁剪不可控;contain保全内容但必留白 - 移动端 Safari 对
vh计算不准(地址栏遮挡),可用min-height: 100dvh缓解 - 如果设计师要求“人脸始终居中”,光靠 CSS 不够,得用 JS 动态算
background-position偏移并注入 CSS 变量
实际项目中,比例失控往往不是技术选错,而是没分清:这是内容图(用 + 
ratio),还是装饰图(用 background-image + cover)。混用就会两边都失守。











