用 object-fit 替代 width/height 硬拉伸可避免图片变形:cover 等比填满裁边,contain 等比显示留白,fill 会失真;需显式设置容器宽高,注意 IE 不支持、Safari 旧版抖动、需 overflow: hidden 配合。
object-fit 替代 width/height 硬拉伸直接设 width: 100% 和 height: 200px 会让图片强行撑开、五官错位。根本原因是浏览器默认把图片当「替换元素」,不按普通块级元素盒模型处理。object-fit 才是专治这个的属性,它控制的是内容(图片)在容器里的“怎么放”,而不是容器“怎么压它”。
object-fit: cover:等比缩放填满容器,可能裁边(适合头像、封面图)object-fit: contain:等比缩放完整显示,留白(适合证件照、图表)object-fit: fill:完全拉伸,丢比例(就是你原来干的事)width 和 height 显式设置容器尺寸,否则没效果object-fit 不生效?检查父容器和图片加载时机常见现象是写了 object-fit: cover 但毫无反应——大概率是容器没尺寸,或者图片还没加载完就渲染了。CSS 层面,object-fit 只作用于有明确宽高的替换元素(<img>、<video>),对背景图无效(那是 background-size 的事)。
display: inline 或依赖内容自适应的布局(比如 flex 容器里没设 min-width)img 元素尺寸为 0,object-fit 没东西可 fitv-if 或条件渲染 <img> 时,确保 DOM 插入后再应用样式object-fit 在 IE 中是纯空白,连降级都不触发。Safari 10–12 在 cover 模式下偶尔会多渲染一帧空白,尤其搭配 transform 动画时。
background-image + background-size: cover 模拟(需改 HTML 结构)will-change: transform 或强制重绘修复抖动object-fit 做精确像素对齐——不同浏览器缩放算法略有差异,边缘像素可能差 1pximg 的 srcset 配合时要注意尺寸来源object-fit 缩放的是最终渲染的图像内容,跟 srcset 选哪个分辨率无关。但如果你用 contain,又给容器设了固定宽高,那高 DPR 设备下图片可能被缩得更小、细节变糊。
立即学习“前端免费学习笔记(深入)”;
srcset 提供足够大的原图(比如 2x 分辨率),再由 object-fit 控制显示比例width/height 属性(HTML 属性)和 CSS 尺寸,两者冲突会导致 Safari 下 object-fit 失效cover 模式下关键内容可能被切掉overflow: hidden。尤其是 cover 模式,图片超出部分本该被裁,但容器没隐藏溢出,就会漏出来。