object-fit: contain - CSS 属性详解

公開日: 2025-05-08 14:37 706文字 4 min read

做产品前,先别急着写代码:我是怎么判断一个点子值不值得做的想偷卷?但微信不支持md文档?这个软件助你!新手小白如何开发练手项目?前端常见安全问题 + 防御方法 + 面试回答吉比特(雷霆游戏)前端二面问题总结吉比特27前端实习面试纷享销客前端实习一面08-刚体约束 Constraint07-监听碰撞事件和获取碰撞信息06 - 物体休眠与休眠事件详解(Cannon.js)05-碰撞与碰撞组04 - 弹性与接触材质详解03 - Cannon 材质与摩擦系数设置02 - Cannon 引擎基础碰撞讲解01 - Cannon.js 引擎的用途和基本使用一款减轻前端图片命名工作量的图片转换器总结:一个双非大学生的两年,是怎么过来的?数学公式Input-输入框组件实现详解用HTML5实现实时ASCII艺术摄像头object-fit: contain - CSS 属性详解GSAP (GreenSock Animation Platform) 动画库学习指南Webview通信系统学习指南实现手势操控3D粒子动画?太好玩了!东田数码科技前端面试前端性能优化面试回答技巧(一)React与Vue表单的对比差异融山科技前端面经·React的入门学习(一)九方前端面试JavaScript 核心:数组/字符串 API 精要指南JavaScript的常用数组API原理解析前端练习小网站-新手突破之路前端の骚操作代码合集 (二)| 让你的网页变得有趣前端Threejs入门(五)Vue 3 响应式原理:computed的模板解包机制Vue 监听器 watch 深度解析Axios 深入解析从0到1配置vue项目跟git仓库连接!前端Three.js入门(四)你懂keep-alive吗?见过Vue的小区保安吗?前端Three.js入门(三)前端Three.js入门(二)前端Three.js入门(一)-Three的第一个简单的页面 Git 大冒险:解锁代码管理的秘密武器如何将网站加载速度提升50%?前端性能优化全攻略前端の骚操作代码合集 | 让你的网页充满恶趣味进击蓝桥杯!2025web前端HTML5uniapp-页面生命周期
この投稿は「日本語」では表示できません。元の投稿を表示しています。
objectfit: contain CSS 属性详解 作者: 前端AC | 原文: https://juejin.cn/post/7501618843065630771 前言 小编做动画业务的时候,看代码用到了这个大小,专门来学习一下。 objectfit: contain CSS 属性...

object-fit: contain - CSS 属性详解

作者: 前端AC | 原文: https://juejin.cn/post/7501618843065630771

前言

小编做动画业务的时候,看代码用到了这个大小,专门来学习一下。

object-fit: contain - CSS 属性详解

📌 基本定义

object-fit: contain; 是 CSS 用于控制替换元素(如 <img><video><object>)内容如何适应容器尺寸的属性。

<img src="image.jpg" style="object-fit: contain;">

🌟 核心特性

特性说明
保持宽高比内容始终按原始比例缩放
完整显示内容确保内容全部可见,不会被裁剪
可能产生留白当容器比例与内容比例不一致时,自动添加空白区域
不拉伸变形内容不会被迫填充容器导致失真

🔍 对比其他 object-fit

视觉对比表

/* 不同值的对比示例 */
.contain  { object-fit: contain; }  /* 保持比例+完整显示+留白 */
.cover    { object-fit: cover; }    /* 保持比例+填满容器+裁剪 */
.fill     { object-fit: fill; }     /* 忽略比例+拉伸填满 */
.none     { object-fit: none; }     /* 原始尺寸+不缩放 */
.scale-down { object-fit: scale-down; } /* 自动选择contain或none */

适用场景推荐

最佳使用场景是否常用
contain需完整展示内容(如证件照、产品图)★★★★★
cover背景图/横幅(允许裁剪边缘)★★★★☆
fill需要强制填充(通常不推荐)★★☆☆☆
none显示原始像素(特殊需求)★★☆☆☆

🛠️ 实际应用示例

案例1:相册图片展示

<div class="gallery">
  <img src="photo.jpg" alt="Gallery Photo">
</div>

<style>
.gallery {
  width: 300px;
  height: 200px;
  border: 1px solid #ddd;
}
.gallery img {
  width: 100%;
  height: 100%;
  object-fit: contain; /* 保证照片完整显示 */
}
</style>

案例2:视频播放器适配

<video controls class="player">
  <source src="movie.mp4" type="video/mp4">
</video>

<style>
.player {
  width: 100%;
  height: 400px;
  object-fit: contain; /* 不同比例视频都能完整显示 */
  background: #000;    /* 留黑边时更美观 */
}
</style>

💡 进阶技巧

  1. 配合 object-position 使用
    控制内容在容器中的对齐位置:

    img {
      object-fit: contain;
      object-position: top center; /* 顶部居中 */
    }
  2. 响应式设计组合技

    .responsive-media {
      width: 100%;
      height: auto;
      aspect-ratio: 16/9; /* 固定比例容器 */
      object-fit: contain;
    }
  3. 解决 Safari 兼容性问题
    添加 font-family: 'object-fit: contain;' Hack:

    img {
      font-family: 'object-fit: contain;';
    }

⚠️ 注意事项

  1. 父容器需有明确尺寸
    object-fit 只在容器有固定 width/height 时生效

  2. IE 完全不支持
    需使用 Polyfill 或备用方案:

    /* 备用方案示例 */
    img {
      width: auto;
      max-width: 100%;
      height: auto;
      max-height: 100%;
      /* 现代浏览器会覆盖此样式 */
      @supports (object-fit: contain) {
        width: 100%;
        height: 100%;
      }
    }
  3. SVG 文件需特殊处理
    <svg> 标签内使用 preserveAspectRatio="xMidYMid meet" 达到类似效果


📚 扩展阅读