img标签实现和背景图一样的显示效果——object-fit和object-position (实用)

本文详细解析了CSS3中的object-fit和object-position属性,通过实例展示了如何使用这两个属性来调整图片在容器中的显示效果,包括尺寸适应、裁剪和定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文出处:https://www.cnblogs.com/libo0125ok/p/8422617.html

延伸阅读:张鑫的《半深入理解CSS3 object-position/object-fit属性》详尽说明

不知大家在做前端页面的时候,有没有遇到类似这样的问题:有一个不是正方形的图片,可能是宽度大于高度的,也可能是高度大于宽度的,而你又并不想用背景图的方式来做,要实现用img标签来让此图片显示出一个正方形的且不变形的效果。即如下图:只显示图片中间部分(红框部分)

 

下面我们便来简单讨论如何实现让长方形图片显示出正方形的效果,首先我们本次讨论中用到的两张图片的原图就是上面的两张图片(一张宽度大于高度,另一张高度大于宽度)

1、背景图显示正方形效果的做法

首先还是从背景图的做法说起,遇到类似的问题,我们大部分人首先想到的是,能用背景图片做的话,就直接用背景图片来做了,至少我是这么想的。那么用背景图的方式是怎么做的,代码还是写一下如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>背景图的做法</title>
    <style>
        .bg-img1 {
            width: 200px;
            height: 200px;
            background: url("images/img1.jpg") center;
            background-size: contain;
        }
        .bg-img2 {
            width: 200px;
            height: 200px;
            background: url("images/img2.jpg") center;
            background-size: cover;
        }
    </style>
</head>
<body>
    <h3>背景图的做法</h3>
    <div class="bg-img1"></div>
    <br>
    <div class="bg-img2"></div>

</body>
</html>

 

页面效果如下图:

当然:背景图还可以实现很多其他效果,只需要background-size属性使用不同的值就可以实现不同的效果,例如:cover,contain,这里就不再一一赘述,因为我们重点要说的是关于img标签显示图片的问题。

2、img标签显示正方形效果的做法

首先、也是需要设置img标签的宽度和高度是一致的,另外需要用到一个关键的css属性——object-fit:cover。下面还是直接贴出代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>img标签的做法</title>
    <style>
        .img-1 {
            width: 200px;
            height: 200px;
            object-fit: cover;
        }
        .img-2 {
            width: 200px;
            height: 200px;
            object-fit: cover;
        }
    </style>
</head>
<body>
<h3>img标签的做法</h3>
<img src="images/img1.jpg" class="img-1">
<br>
<img src="images/img2.jpg" class="img-2">
</body>
</html>

 

效果如下图:


至此,已经实现了我们开头说的需求。

3、object-fit的其它值

那么object-fit属性还有哪些值呢?
  object-fit: fill;
  object-fit: contain;
  object-fit: cover;
  object-fit: none;
  object-fit: scale-down;

fill: 中文释义“填充”。默认值。替换内容拉伸填满整个contentbox,不保证保持原有的比例。
contain: 中文释义“包含”。保持原有尺寸比例。保证替换内容尺寸一定可以在容器里面放得下。因此,此参数可能会在容器内留下空白。
cover: 中文释义“覆盖”。保持原有尺寸比例。保证替换内容尺寸一定大于容器尺寸,宽度和高度至少有一个和容器一致。因此,此参数可能会让替换内容(如图片)部分区域不可见(上面讲解的例子就是如此)。
none: 中文释义“无”。保持原有尺寸比例。同时保持替换内容原始尺寸大小。
scale-down: 中文释义“降低”。就好像依次设置了none或contain, 最终呈现的是尺寸比较小的那个。

下面我们来测试一下每一个属性值显示的效果,为了更明显的看出区别,我们换另外一张图片。
每个img标签都设置的 width:200px 和 width:200px,再加上设置的object-fit属性的不同值,效果图如下:

4、object-position属性

object-position要比object-fit单纯的多,就是控制图片在盒子中显示位置的。默认值是50% 50%,也就是居中效果,所以,无论上一节object-fit值为那般,图片都是水平垂直居中的。因此,下次要实现尺寸大小不固定图片的垂直居中效果,可以试试object-fit.

与background-position类似,object-position的值类型为<position>类型值。也就是说,CSS3的相对坐标设定样式支持的。
这里就不再代码实验了,自己可以动手试试。

注:目前IE应该还不支持object-fit和object-position属性

本博客根据阅读了张鑫旭的一篇博客后,自己动手实验后写的,张鑫旭的这篇博客地址是:http://www.zhangxinxu.com/wordpress/2015/03/css3-object-position-object-fit/

5、object-position属性应用(改变图片的位置) 
 

例如:图片一直定位在容器的右下角:

object-position: 100% 100%;

例如:图片元素相对于右下角20px 10px地方定位:

object-position: right 20px bottom 10px;

上面的表现在FireFox 36浏览器下符合预期,Chrome没看明白:
FireFox 36下相对右下角定位坐标

因此,建议还是使用calc实现相对右下角定位:

object-position: calc(100% - 20px) calc(100% - 10px);

此时,Chrome浏览器的表现符合预期了:
Chrome浏览器下使用calc右下角定位

同样的,object-position也支持负值,特征表现与background-position一致。

由于比较单纯,就不展开了。若有兴趣,您可以狠狠地点击这里:CSS3 object-position使用示意Demo


 

 

<think>嗯,用户问的是如何在HTML img标签中正确使用object-fit属性。首先,我需要回忆一下object-fit的作用。根据引用里的信息,object-fit是用来控制片或视频等元素如何适应其容器尺寸的,特别是调整尺寸时的填充方式。用户提到的那个例子,用max-widthmax-height加上定位的方法可能不够方便,而object-fit提供了更简洁的解决方案。 接下来,我得确定object-fit的具体取值用法。引用里提到主要的取值包括cover、contain、fill、nonescale-down。需要解释每个值的效果,比如cover会保持比例覆盖容器,可能会裁剪片;contain则保持比例完全显示,可能留有空白。用户可能想知道如何选择这些值,以及实际应用的例子。 然后,用户可能需要具体的代码示例。根据引用中的代码,比如设置img的宽高为200px400px,再应用object-fit: cover,可以让片覆盖容器。这时候,可能还需要配合object-position来调整焦点位置,比如居中,这在引用中的例子也有提到。 另外,需要注意父容器的尺寸设置。如果父容器没有固定尺寸,object-fit可能不会生效,所以需要提醒用户设置容器的widthheight,或者使用其他布局方法确保容器有明确的大小。 还要考虑兼容性问题,虽然现在主流浏览器都支持object-fit,但可能有些旧版本需要前缀或者替代方案。不过用户的问题主要是正确使用,可能暂时不需要深入兼容性处理,但可以简要提及。 用户可能的实际需求是让片按比例填充容器,特别是以最短边为中心放大,避免拉伸变形。这时候,covercontain的区别就很重要。例如,cover适合作为背景图效果,而contain适合完整显示片。需要给出不同场景下的使用建议。 最后,整理步骤:设置容器尺寸,应用object-fit属性,必要时调整object-position。给出代码示例,并说明各取值的适用情况。这样用户就能根据需求选择合适的方法了。</think>### HTML img标签object-fit属性的使用指南 #### 一、基础用法 `object-fit`属性用于控制片在容器中的填充方式,需与`width``height`属性配合使用。核心步骤如下: 1. 为容器设定明确尺寸(如父元素设置`width: 300px; height: 200px`) 2. 为`<img>`标签设置具体宽高 3. 应用`object-fit`属性 ```html <div class="container"> <img src="image.jpg" class="custom-image"> </div> <style> .container { width: 300px; height: 200px; border: 1px solid #ccc; } .custom-image { width: 100%; height: 100%; object-fit: cover; /* 核心属性 */ } </style> ``` #### 二、属性取值解析 | 取值 | 效果 | 适用场景 | |------|------|----------| | `cover` | 保持比例填充容器,可能裁剪片 | 头像展示、背景图[^2] | | `contain` | 保持比例完整显示,可能留白 | 产品展示、证件照 | | `fill` | 拉伸填充(默认值) | 需要变形效果时 | | `none` | 原始尺寸显示 | 需要局部特写 | | `scale-down` | 自动选择`none`或`contain` | 动态响应布局 | #### 三、进阶技巧 1. **焦点位置控制**:配合`object-position`属性调整显示区域 ```css .custom-image { object-fit: cover; object-position: 20% 80%; /* 水平位置 垂直位置 */ } ``` 2. **响应式适配**:使用`max-width: 100%`保证容器约束 3. **视频元素适配**:同样适用于`<video>`标签 #### 四、注意事项 1. 父容器必须设置明确尺寸 2. 旧版浏览器需添加`-webkit-`前缀 3. 与`background-size: cover`的差异:`object-fit`直接作用于元素本身,而非背景图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值