object-fit: cover没效果主因是容器缺乏宽高约束;必须设置明确尺寸(如width/height或aspect-ratio),否则浏览器无法计算缩放基准,该属性即失效。
大概率是图片容器没设宽高约束。object-fit只决定“图怎么填进框里”,但前提是得有明确的框——浏览器默认按图片原始尺寸渲染,如果父容器高度塌陷(比如只写了width: 100%,没设height或aspect-ratio),那object-fit就无事可做。
必须给图片或其父容器加上尺寸限制:
img自身设width: 100%; height: 200px;(固定高)aspect-ratio: 16 / 9; + width: 100%(推荐,现代浏览器支持)padding-bottom: 56.25% + position: relative,图片设position: absolute
选错值会导致留白过多或关键内容被裁掉,不是风格偏好,而是语义需求:
object-fit: cover:适合封面图、头像、卡片缩略图——要求填满无空隙,允许裁剪。但要注意人物脸可能被切,得配object-position
object-fit: contain:适合产品图、图标、信息图表——必须完整可见,留白可接受。此时object-position影响不大,因为整张图都在框内object-fit: fill:会拉伸变形,除非刻意要扭曲效果,否则一律避免用cover时,默认object-position: center center,但很多图的重点不在正中心。比如人像偏上、Logo靠左、Banner文字在底部——这时就得手动挪“视窗”锚点:
立即学习“前端免费学习笔记(深入)”;
object-position: center top:顶部对齐,保全上方内容(人脸不被切)object-position: 20% 30%:水平20%、垂直30%处为裁剪中心,适合自定义焦点left/right/top/bottom),但不能混用单位iOS Safari 13.3 及更早版本不支持object-fit,加-webkit-object-fit前缀也无效。硬上会退化成fill行为(即拉伸),所以得换思路:
background-image替代<img>:配合background-size: cover + background-position,兼容性好<img>的语义化、alt文本、SEO 和懒加载能力<img>,可用 JS 检测支持性,不支持时动态插入picture fallback 或降级样式object-position、在 Safari 13 以下环境直接写object-fit却不兜底。这些地方一松动,图片就立刻崩形。