只设width或height属性即可等比缩放,浏览器按原始宽高比自动计算缺失尺寸;同时设两者会拉伸变形;响应式推荐max-width: 100% + height: auto,需父容器有明确宽度,object-fit适用于固定容器内比例填充。

只设 width 或 height 属性就能等比缩放
浏览器在只收到 width 或只收到 height 时,会自动按图片原始宽高比推算另一个尺寸,这是 HTML 原生行为,无需 CSS。比如:<img src="a.jpg" style="max-width:90%">,原图 1200×800,高度就自动算出为 200;反过来写 style="max-width:90%",宽度也自动匹配。
常见错误是两个属性都写死:width="300" height="200",哪怕原图是 4:3,也会被压成 3:2——这不是缩放,是拉伸。
-
width和height的值不带单位(width="300"正确,width="300px"无效) - 百分比只对
width生效(width="50%"可用,height="50%"不生效) - 该方式会提前预留布局空间,避免图片加载时内容“跳动”,但无法响应视口变化
max-width: 100% + height: auto 是响应式底线
这是目前兼容性最好(IE9+)、最稳的 CSS 方案,尤其适合文章页、CMS 等图片源不可控的场景。
max-width: 100% 是上限指令:图片比容器小时保持原尺寸,比容器大时才缩放;height: auto 才是保比例的核心——缺了它,哪怕写了 width: 100%,也可能因继承默认高度而拉伸。
- 必须确保父容器有明确宽度(如
div { max-width: 1200px; }),否则100%无参照 - 加
display: block消除img默认inline带来的底部空白 - 别用
width: 100%替代——小图会被强行撑宽,必然失真
object-fit 需要固定容器尺寸才生效
object-fit 不是“让图片自适应窗口”的工具,它是解决“已知容器宽高、但图片比例不一”时的装填策略。没给父容器设 width 和 height,它直接不工作。
例如卡片头像框 160px × 160px,用:
.avatar img {<br> width: 100%;<br> height: 100%;<br> object-fit: cover;<br>}
-
object-fit: cover:等比缩放后填满,裁边——适合封面、头像,注意配合object-position(如top center)防关键内容被切 -
object-fit: contain:等比缩放后完整显示,留白由父容器背景色填充——适合证件照、示意图 - 在
flex或grid容器中,若子项未设min-width: 0或min-height: 0,object-fit可能被忽略
aspect-ratio + object-fit 是现代简洁方案
当容器尺寸可预估(如卡片统一 16:9)、且目标浏览器支持(Chrome 88+、Firefox 89+、Safari 15.4+),可用 aspect-ratio 替代 JS 或 padding-trick。
例如:
.card img {<br> width: 100%;<br> aspect-ratio: 16 / 9;<br> object-fit: cover;<br>}
-
aspect-ratio让浏览器自动计算高度,不再依赖height: auto或父容器硬设高 - 慎用
aspect-ratio: attr(width)/attr(height):attr()在aspect-ratio中支持不全,目前仅部分 Chromium 版本实验性支持 - 仍需配
object-fit控制内容如何填充——aspect-ratio只管盒子形状,不管图片怎么“塞进去”
div 没设 max-width、被 float 拉离文档流、或处在未约束的 flex 项里——此时 max-width: 100% 根本找不到“100%”的参照物。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











