如何使用 CSS object-fit 缩放和裁剪图像

介绍

在处理图像时,您可能会遇到希望保留原始纵横比的情况。保留纵横比将防止图像因拉伸或挤压而出现扭曲。此问题的常见解决方案是使用background-imageCSS 属性。更现代的方法是使用object-fitCSS 属性。

在本文中,您将浏览的效果fillcovercontainnone,并scale-down提供给值object-fitCSS属性以及它如何裁剪和缩放图像。您还将探索object-positionCSS 属性以及它如何偏移图像。

先决条件

如果你想跟随这篇文章,你需要:

观察示例图像的默认行为

考虑以下用于显示示例图像的代码:

<img
  src="https://assets.digitalocean.com/articles/alligator/css/object-fit/example-object-fit.jpg"
  width="600"
  height="337"
  style="width: 600px; height: 337px;"
  alt="Sample image of a turtle riding on top of an alligator that is swimming in the water - scaled to 600 x 337."
/>

此代码将在浏览器中产生以下结果:

一只乌龟骑在一只在水中游泳的鳄鱼身上的示例图像 - 缩放到 600 x 337。

此图像的原始宽度为 1200 像素,高度为 674 像素。使用img的属性,该宽度已经被设置为600337-原始尺寸的一半-保持长宽比。

现在,考虑布局期望图像占据 300px 宽度和 337px 高度的情况:

<img
  src="https://assets.digitalocean.com/articles/alligator/css/object-fit/example-object-fit.jpg"
  width="600"
  height="337"
  style="width: 300px; height: 337px;"
  alt="Sample image of a tutle riding on top of an alligator that is swimming in the water - scaled to 300 x 337."
/>

此代码将在浏览器中产生以下结果:

骑在一只在水中游泳的鳄鱼身上的小鸭子的示例图像 - 缩放到 300 x 337。

生成的图像不再保留原始纵横比,并且在视觉上似乎被“压扁”了。

使用 object-fit: fill

fill值是 的初始值object-fit此值不会保留原始纵横比。

<img
  ...
  style="width: 300px; height: 337px; object-fit: fill;"
  ...
/>

此代码将在浏览器中产生以下结果:

一只骑在水中游泳的鳄鱼身上的 tutle 的示例图像 - 缩放到 300 x 337 - 使用对象拟合:填充。

由于这是浏览器渲染引擎的“初始”值,因此缩放图像的外观没有变化。生成的图像仍然显得压扁。

使用 object-fit: cover

cover值保留原始纵横比,但图像占用所有可用空间。

<img
  ...
  style="width: 300px; height: 337px; object-fit: cover;"
  ...
/>

此代码将在浏览器中产生以下结果:

一只骑在水中游泳的鳄鱼身上的图特尔的示例图像 - 缩放到 300 x 337,对象适合:覆盖

在某些情况下,object-fit: cover会导致图像出现裁剪。在此示例图像中,左侧和右侧的原始图像的某些部分没有出现,因为它们无法容纳在声明的宽度范围内。

使用 object-fit: contain

contain值保留原始纵横比,但图像也被限制为不超过可用空间的边界。

<img
  ...
  style="width: 300px; height: 337px; object-fit: contain;"
  ...
/>

此代码将在浏览器中产生以下结果:

一只骑在水中游泳的鳄鱼身上的 tutle 的示例图像 - 缩放到 300 x 337 - 对象适合:包含

在某些情况下,object-fit: contain会导致图像没有填满所有可用空间。在此示例图像中,图像上方和下方都有垂直空间,因为声明的高度高于缩小后的高度。

使用 object-fit: none

none值根本不会调整图像大小。

<img
  ...
  style="width: 300px; height: 337px; object-fit: none;"
  ...
/>

此代码将在浏览器中产生以下结果:

一只骑在水中游泳的鳄鱼身上的 tutle 的示例图像 - 缩放到 300 x 337 - 对象适合:无。

在图像大于可用空间的情况下,它会出现裁剪。在此示例图像中,原始图像的左侧、右侧、顶部和底部的某些部分没有出现,因为它们无法容纳在声明的宽度和高度的范围内。

使用 object-fit: scale-down

scale-down值将显示类似containnone取决于哪个会导致较小的图像的图像。

<img
  ...
  style="width: 300px; height: 337px; object-fit: scale-down;"
  ...
/>

此代码将在浏览器中产生以下结果:

一只骑在水中游泳的鳄鱼身上的 tutle 的示例图像 - 缩放到 300 x 337 - 对象适合:按比例缩小。

在此示例图像中,图像已被缩小以表现得像contain

使用object-fitobject-position

如果生成的图像object-fit出现裁剪,默认情况下图像将显示居中。object-position属性可用于更改焦点。

考虑object-fit: cover之前例子:

一只骑在水中游泳的鳄鱼身上的图特尔的示例图像 - 缩放到 300 x 337,对象适合:覆盖

现在让我们更改 X 轴上图像可见部分的位置,以显示图像的最右侧边缘:

<img
  ...
  style="width: 300px; height: 337px; object-fit: cover; object-position: 100% 0;"
  ...
/>

此代码将在浏览器中产生以下结果:

裁剪示例图像以显示在水中游泳的鳄鱼 - 缩放至 300 x 337 - 对象适合:包含和对象位置:100% 0。

在此示例图像中,海龟已从图像中裁剪掉。

最后,让我们观察如果在可用空间的边界之外指定位置会发生什么:

<img
  ...
  style="width: 300px; height: 337px; object-fit: cover; object-position: -20% 0;"
  ...
/>

此代码将在浏览器中产生以下结果:

裁剪示例图像以显示海龟的一部分和在水中游泳的鳄鱼的一部分 - 缩放到 300 x 337 - 对象适合:包含和对象位置:-20% 0。

在此示例图像中,海龟和鳄鱼头已从图像中裁剪掉。还有间距可以弥补图像左侧偏移的 20%。

结论

在本文中,您探索了可用于object-fitobject-positionCSS 属性的值

object-fit还支持继承、初始和未设置

object-fit在您的项目中使用之前,请通过检查我可以使用上浏览器支持来验证您的目标受众使用的浏览器是否支持它。.

如果您想了解有关 CSS 的更多信息,请查看我们的 CSS 主题页面以获取练习和编程项目。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁