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

简介

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

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

先决条件

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

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

观察示例图片的默认行为

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

<img
  src="https://img-blog.csdnimg.cn/img_convert/3571e1785cfa8fccd33ff704355aca8a.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."
/>

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

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://img-blog.csdnimg.cn/img_convert/3571e1785cfa8fccd33ff704355aca8a.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."
/>

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

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;"
  ...
/>

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

Sample image of a tutle riding on top of an alligator that is swimming in the water - scaled to 300 x 337 - with object-fit: fill.

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

使用 object-fit: cover

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

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

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

Sample image of a tutle riding on top of an alligator that is swimming in the water - scaled to 300 x 337 with object-fit: cover.

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

使用 object-fit: contain

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

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

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

一个鳄鱼游泳中,上面骑着一只乌龟的示例图像 - 缩放至 300 x 337 - 使用 object-fit: contain。

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

使用 object-fit: none

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

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

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

一个鳄鱼游泳中,上面骑着一只乌龟的示例图像 - 缩放至 300 x 337 - 使用 object-fit: none。

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

使用 object-fit: scale-down

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

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

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

一个鳄鱼游泳中,上面骑着一只乌龟的示例图像 - 缩放至 300 x 337 - 使用 object-fit: scale-down。

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

使用 object-fitobject-position

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

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

一个鳄鱼游泳中,上面骑着一只乌龟的示例图像 - 缩放至 300 x 337 - 使用 object-fit: cover。

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

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

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

裁剪后的示例图像,显示一个在水中游泳的鳄鱼 - 缩放至 300 x 337 - 使用 object-fit: contain 和 object-position: 100% 0。

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

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

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

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

裁剪后的示例图像,显示部分乌龟和部分在水中游泳的鳄鱼 - 缩放至 300 x 337 - 使用 object-fit: contain 和 object-position: -20% 0。

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

结论

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/435646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在有/没有备份的情况下恢复华为上已删除的视频?6 个推荐选项

“我不小心删除了华为手机上的一堆视频。我怎样才能把它们找回来&#xff1f;我在谷歌上也找不到它们”。——来自知乎 在我们日常生活的喧嚣中&#xff0c;意外时有发生。无论是由于华为手机上的无意删除、恢复出厂设置、病毒感染、数据损坏还是系统故障&#xff0c;这些视频…

GEE数据——GEDI04_A_和GEDI02_A_002_MONTHLY出现的数据问题

简介 产品介绍 该数据集包含全球生态系统动力学调查&#xff08;GEDI&#xff09;第 4A 级&#xff08;L4A&#xff09;第 2 版对地上生物量密度&#xff08;AGBD&#xff0c;单位为兆克/公顷&#xff09;的预测&#xff0c;以及对每个采样地理定位激光足迹内预测标准误差的估…

python+django高校澡堂洗浴浴室预约签到管理系统8d8c

本系统在设计过程中&#xff0c;高校洗浴管理系统的出现就有很大的需求。该系统可以很好地解决这些麻烦和问题。 很好地发挥了该开发方式的优势&#xff0c;让实现代码有了良好的可读性&#xff0c;而且使代码的更新和维护更加的方便&#xff0c;操作简单&#xff0c;对以后的维…

前端将html导出pdf文件解决分页问题

这是借鉴了qq_251025116大佬的解决方案并优化升级完成的&#xff0c;原文链接 1.安装依赖 npm install jspdf html2canvas2.使用方法 import htmlToPdffrom ./index.jsconst suc () > {message.success(success);};//记得在需要打印的div上面添加 idlet dom document.que…

文心一言 VS 讯飞星火 VS chatgpt (209)-- 算法导论15.4 6题

六、设计一个 O(nlgn) 时间的算法&#xff0c;求一个 n 个数的序列的最长单调递增子序列。&#xff08;提示&#xff1a;注意到&#xff0c;一个长度为 i 的候选子序列的尾元素至少不比一个长度为 i-1 候选子序列的尾元素小。因此&#xff0c;可以在输入序列中将候选子序列链接…

如何在Linux上为PyCharm创建和配置Desktop Entry

在Linux操作系统中&#xff0c;.desktop 文件是一种桌面条目文件&#xff0c;用于在图形用户界面中添加程序快捷方式。本文将指导您如何为PyCharm IDE创建和配置一个 .desktop 文件&#xff0c;从而能够通过应用程序菜单或桌面图标快速启动PyCharm。 步骤 1: 确定PyCharm安装路…

Nodejs 第五十二章(定时任务)

什么是定时任务&#xff1f; 定时任务是指在预定的时间点或时间间隔内执行的任务或操作。它们是自动化执行特定逻辑的一种方式&#xff0c;可用于执行重复性的、周期性的或计划性的任务。 定时任务通常用于以下情况&#xff1a; 执行后台任务&#xff1a;定时任务可用于自动…

Nodejs 第五十一章(限流阀)

限流功能 目前我们学习了redis,lua,nodejs&#xff0c;于是可以结合起来做一个限流功能&#xff0c;好比一个抽奖功能&#xff0c;你点击次数过多&#xff0c;就会提示请稍后重试&#xff0c;进行限制&#xff0c;我们来实现一下该功能。 安装依赖 npm i ioredis express代码…

『操作系统OS笔记』MAC(m1芯片)电脑安装FFmpeg

MAC(m1芯片)电脑安装FFmpeg mac电脑安装ffmpeg两种方法 文章目录 1. brew安装FFmpeg2. 官网下载FFmpeg压缩包3. 使用FFmpeg将音频和视频合并 1. brew安装FFmpeg brew install ffmpeg # 需要等比较久的时间&#xff0c;安装很多东西&#xff0c;安装过程中如果遇到报错对应解决…

第十一篇 - 应用于市场营销视频场景中的人工智能和机器学习技术 – Video --- 我为什么要翻译介绍美国人工智能科技巨头IAB公司?

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒体…

MATLAB环境下基于图像处理的计算病理学图像分割(MATLAB R2021B)

人工智能是病理学诊断和研究的重要新兴方法&#xff0c;其不仅可用于病理形态数据分析&#xff0c;还可整合免疫组化、分子检测数据和临床信息&#xff0c;得出综合的病理诊断报告&#xff0c;为患者提供预后信息和精准的药物治疗指导。计算病理学是病理学与AI、计算机视觉等信…

机器人编程学习有哪些好处?

机器人编程学习有许多好处&#xff0c;无论是对个人还是对社会都具有重要意义。以下是机器人编程学习的一些好处&#xff1a; 1. **培养计算思维&#xff1a;** 通过机器人编程学习&#xff0c;可以培养逻辑思维、问题解决能力和创新思维。编程过程中需要分析问题、设计算法、…

旧物回收小程序开发:环保与科技的创新结合

随着科技的飞速发展&#xff0c;我们的日常生活越来越离不开手机应用程序。而在环保日益成为社会焦点的今天&#xff0c;如何将科技与环保相结合&#xff0c;成为了一个值得深思的问题。今天&#xff0c;我们将探讨旧物回收小程序的开发&#xff0c;它如何助力环保&#xff0c;…

dolphinscheduler海豚调度(五)seatunnel案例

seatunnel作为新一代流行的数据集成工具&#xff0c;其功能非常强大且简单易用&#xff0c;今天演示一下如何通过dolphinscheduler创建并运行seatunnel任务 本次dolphinscheduler和seatunnel均部署在同一机器上的单机版本 1、环境配置 打开dolphinscheduler安装目录&#xf…

Appium系列(1)安装启动Appium

Appium环境准备 Mac电脑jdk环境AndroidSDK环境node>8.1.0&#xff08;最好用最新版本&#xff09; 安装命令 npm i -g appium安装不成功请检查node 版本是否正确 安装成功命令行输入appium回车查看 安装驱动程序 1、先检查当前驱动情况 通过 appium driver list 进行…

How to use Grammarly with Overleaf

遵循以下步骤使用Grammarly和Overleaf: 安装Grammarly提供的浏览器扩展。更多信息请参考Grammarly的支持页面。 安装首选的浏览器扩展后&#xff0c;你需要注册一个Grammarly帐户。 下面是Chrome的Grammarly扩展钉到Chrome工具栏的截图: 1、 2、 3、

力扣--动态规划516.最长回文子序列

思路分析&#xff1a; 创建一个二维动态规划表dp&#xff0c;其中dp[i][j]表示在子串s[i...j]中的最长回文子序列的长度。初始化基本情况&#xff1a;对角线上的元素dp[i][i]都为1&#xff0c;因为单个字符本身就是长度为1的回文子序列。从字符串末尾向前遍历&#xff0c;填充…

基于Springboot+Layui餐厅点餐系统

一、项目背景 在互联网经济飞速发展的时代&#xff0c;网络化企业管理也在其带领下快速兴起&#xff0c;开发一款自主点餐系统会受到众多商家的青睐。现如今市场上的人力资源价格是非常高昂的&#xff0c;一款自主点餐系统可以减少餐厅的人力开销&#xff0c;将服务员从繁忙的…

Linux_防火墙无法启动问题

当查看防火墙状体的时候报如下错误 ● firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)Active: inactive (dead) since 四 2024-03-07 07:42:16 CST; 7s agoDocs: man…

2024.3.6 网络编程

思维导图 作业&#xff1a;数据库操作的增、删、改完成 程序代码&#xff1a; #include <myhead.h> void do_add(sqlite3 *ppDb) {char *errmsg NULL;char sql[128] "insert into Worker values(1001,小张,15000);";// "insert into Worker values(10…