如何使用 CSS object-fit 进行图片的缩放和裁剪

简介: 如何使用 CSS object-fit 进行图片的缩放和裁剪

本文详细介绍了CSS中的object-fit属性及其fill、cover、contain、none和scale-down值,展示了如何调整图片大小并控制裁剪与位置。同时提到了object-position属性的应用,以及浏览器兼容性的考虑。

简介

在处理图片时,你可能会遇到需要保持原始宽高比的情况。保持宽高比可以防止图片被拉伸或压缩而出现失真。解决这个问题的常见方法是使用 background-image CSS 属性。更现代的方法是使用 object-fit CSS 属性。

在本文中,你将探索 object-fit CSS 属性中可用的 fillcovercontainnonescale-down 值的效果,以及它们如何裁剪和缩放图片。你还将探索 object-position CSS 属性以及它如何偏移图片。

先决条件

如果你想跟着本文学习,你需要:

  • 了解 CSS 属性和值。
  • style 属性中使用 CSS 声明。
  • 一个代码编辑器。
  • 一个支持 object-fitobject-position 的现代网页浏览器。

观察示例图片的默认行为

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

<img
  src="https://i-blog.csdnimg.cn/blog_migrate/c3cd4e389636adb5bea3df15a75b46a8.jpeg"
  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."
/>

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

这张图片的原始宽度为 1200px,高度为 674px。使用 img 属性,宽度被设置为 600,高度被设置为 337 - 保持了宽高比。

现在,考虑一种情况,布局期望图片占据宽度为 300px,高度为 337px:

<img
  src="https://i-blog.csdnimg.cn/blog_migrate/c3cd4e389636adb5bea3df15a75b46a8.jpeg"
  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."
/>

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

结果图片不再保持原始宽高比,看起来被视觉上“压扁”了。

使用 object-fit: fill

fill 值是 object-fit 的初始值。这个值不会保持原始宽高比。

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

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

由于这是浏览器渲染引擎的“初始”值,与缩放后的图片相比,外观没有变化。结果图片仍然看起来被压扁了。

使用 object-fit: cover

cover 值保持了原始宽高比,但图片占据了所有可用空间。

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

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

在某些情况下,object-fit: cover 会导致图片被裁剪。在这个示例图片中,原始图片的左右部分由于无法适应声明的宽度而未显示。

使用 object-fit: contain

contain 值保留了原始的长宽比,但同时也限制了图像不超出可用空间的边界。

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

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

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

使用 object-fit: none

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

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

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

在图像比可用空间大的情况下,它将被裁剪。在这个示例图像中,由于原始图像的某些部分无法适应声明的宽度和高度的边界,因此左侧、右侧、顶部和底部的一些部分不会显示。

使用 object-fit: scale-down

scale-down 值将根据哪种方式会导致更小的图像,显示像 containnone 一样的效果。

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

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

在这个示例图像中,图像已经被缩小,表现得像 contain 一样。

使用 object-fitobject-position

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

考虑之前的 object-fit: cover 示例:

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

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

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

在这个示例图像中,乌龟已经被裁剪出图像。

最后,让我们观察一下如果指定的位置超出了可用空间的边界会发生什么:

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

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

在这个示例图像中,乌龟和鳄鱼的头部已经被裁剪出图像。图像的左侧还有一些空间,以弥补图像左侧的 20% 偏移。

结论

在本文中,您探索了object-fitobject-position CSS 属性可用的值。

object-fit 还支持 inherit、initial 和 unset。

在项目中使用 object-fit 之前,请通过在 Can I Use? 上检查浏览器支持情况来验证它是否受到您预期受众使用的浏览器的支持。

如果您想了解更多关于 CSS 的知识,请查看我们的 CSS 专题页面,了解练习和编程项目。


目录
相关文章
|
5月前
|
前端开发 UED 容器
CSS基础-背景属性:颜色、图片、重复
【6月更文挑战第9天】本文介绍了CSS背景属性,包括背景颜色、图片、重复的使用和常见问题。通过实例展示了如何设置背景颜色(如使用rgba()注意透明度影响)、背景图片(使用background-size控制缩放)、背景重复(避免默认平铺导致混乱)以及综合使用背景属性创建复杂效果。理解并熟练运用这些属性能提升网页设计的视觉层次和用户体验。建议通过实践不断探索和提升CSS技能。
67 4
|
30天前
|
前端开发 UED
Webpack 中处理 CSS 和图片资源的多 Loader 配置
【10月更文挑战第12天】 处理 CSS 和图片资源是 Webpack 配置中的重要部分。通过合理选择和配置多个 Loader,可以实现对这些资源的精细处理和优化,提升项目的性能和用户体验。在实际应用中,需要不断探索和实践,根据项目的具体情况进行灵活调整和优化,以达到最佳的处理效果。通过对 Webpack 中多 Loader 处理 CSS 和图片资源的深入了解和掌握,你将能够更好地应对各种复杂的资源处理需求,为项目的成功构建和运行提供坚实的基础。
52 1
|
3月前
|
前端开发
视觉冲击:CSS实现相册图片的放大效果,让网站首页更震撼!
视觉冲击:CSS实现相册图片的放大效果,让网站首页更震撼!
|
4月前
|
前端开发 容器
CSS【详解】对齐 (含文本垂直对齐,文本水平对齐、单行文本垂直居中、多行文本垂直居中、6 种方案块级元素水平垂直居中 、7 种方案图片水平垂直居中、文本自适应对齐、图标和文本对齐,图片和文本对齐等)
CSS【详解】对齐 (含文本垂直对齐,文本水平对齐、单行文本垂直居中、多行文本垂直居中、6 种方案块级元素水平垂直居中 、7 种方案图片水平垂直居中、文本自适应对齐、图标和文本对齐,图片和文本对齐等)
69 0
|
4月前
|
前端开发 C++
css 鼠标悬浮显示放大图片 vs 鼠标点击显示放大图片
css 鼠标悬浮显示放大图片 vs 鼠标点击显示放大图片
50 0
|
4月前
|
前端开发
前端 CSS 经典:clip-path 裁剪
前端 CSS 经典:clip-path 裁剪
35 0
|
4月前
|
前端开发 UED
前端 CSS 经典:在 Vue3 中使用渐进式图片
前端 CSS 经典:在 Vue3 中使用渐进式图片
111 0
|
4月前
|
前端开发
前端 CSS 经典:图片边框
前端 CSS 经典:图片边框
37 0
|
4月前
|
前端开发 容器
css 【详解】—— 图片底部留有间隙(含解决方案)
css 【详解】—— 图片底部留有间隙(含解决方案)
132 0
|
4月前
|
Web App开发 前端开发
css小技巧——鼠标悬浮时切换图片
css小技巧——鼠标悬浮时切换图片
386 0