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

news2025/1/21 5:46:58

简介

在处理图片时,你可能会遇到需要保持原始宽高比的情况。保持宽高比可以防止图片被拉伸或压缩而出现失真。解决这个问题的常见方法是使用 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 专题页面,了解练习和编程项目。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【系统安全加固】Centos 设置禁用密码并打开密钥登录

文章目录 一&#xff0c;概述二&#xff0c;操作步骤1. 服务器端生成密钥2. 在服务器上安装公钥3.下载私钥到本地&#xff08;重要&#xff0c;否则后面无法登录&#xff09;4. 修改配置文件&#xff0c;禁用密码并打开密钥登录5. 重启sshd服务6. 配置xshell使用密钥登录 一&am…

【异常处理】sbt构建Chisel库时出现extracting structure failed:build status:error的解决办法

文章目录 报错背景&#xff1a;解决思路&#xff1a;①IDEA中配置本地的SBT进行下载②更改下载源为华为的镜像站1. 修改sbtconfig.txt2. 增加repositories文件 ③查看报错信息 总结整理的Scala-Chisel-Chiseltest版本信息对应表 报错背景&#xff1a; 最近在写Chisel时&#x…

14、电源管理入门之Watchdog看门狗

目录 1. 软硬件watchdog的区别 2. 软件看门狗 2.1 kernel watchdog 2.1.1 soft lockup 2.1.1 hard lockup 2.2 用户态watchdog 2.2.1 softdog 2.2.1 hardware watchdog 3. 硬件看门狗 3.1 硬件寄存器介绍 3.2 喂狗操作 3.3 watchdog硬件驱动编写 参考: 看门狗,又…

shell 脚本 if-else判断 和流程控制 (基本语法|基础命令)

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Shell编程专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人 前言———— shell脚本中的if-else功能对于shell程序员来说是一笔重要的财富。当您需要根据预定义条件执行一组语句时&#xff0c…

一个系列很多样式的wordpress外贸建站模板

菌菇干货wordpress跨境电商模板 食用菌、羊肚菌、牛肝菌、香菇、干黄花菜、梅干菜、松茸wordpress跨境电商模板。 https://www.jianzhanpress.com/?p3946 餐饮调味wordpress跨境电商模板 豆制品、蛋黄糖、烘焙、咖啡、调料、调味酱、餐饮调味wordpress跨境电商模板。 http…

【MATLAB源码-第157期】基于matlab的海马优化算法(SHO)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 海马优化器&#xff08;Sea Horse Optimizer, SHO&#xff09;是一种近年来提出的新型启发式算法&#xff0c;其设计灵感来源于海洋中海马的行为模式&#xff0c;特别是它们在寻找食物和伴侣时表现出的独特策略。海马因其独特…

企业如何安全参与开源项目?

【开源三句半】 企业参与开源潮&#xff0c; 安全创新都重要&#xff0c; 持续投入不可少&#xff0c; 眼光独到。 开源已经成为构建现代软件的常见方式&#xff0c;这不仅局限于IT技术本身&#xff0c;更推动了多个行业的数字化发展。企业决定引入开源项目打造商业软件时&…

[动态规划][蓝桥杯 2022 省 B] 李白打酒加强版 -- 代码注释含详解

P8786 [蓝桥杯 2022 省 B] 李白打酒加强版(洛谷) 洛谷题目链接 李白打酒很快活&#xff0c;而我打了一晚上代码才把这题弄懂&#x1f972; P8786 [蓝桥杯 2022 省 B] 李白打酒加强版(洛谷)题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示\***\*\*\*\*\***\*\*\**…

Java高频面试之集合篇

Java 中常用的容器有哪些&#xff1f; ArrayList 和 LinkedList 的区别&#xff1f; ArrayList 是基于数组实现的,LinkedList 是基于链表实现的. ArrayList实现了RandomAccess接口,可基于下标访问. LinkedList 实现了Deque /dek/,可以当做双端队列使用. 插入效率对比 如果从头部…

Java单测Mock升级实践

Java单测Mock升级实践 一、背景 众所周知&#xff0c;单元测试是改善代码质量&#xff0c;提升研发交付品质的手段之一&#xff0c;能否写出好的单元测试用例&#xff0c;也是衡量我们研发专业性的标准之一。所以&#xff0c;想要成为一名合格的研发&#xff0c;就应该要有编…

Python基于微博的大数据舆论,情感分析可视化系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

MATLAB --传统 GRAPPA MRI 重建

本文主要实现多通道脑部MRI图片的加速重建&#xff0c;使用GRAPPA方法。 目录 加载满采数据 数据欠采样 GRAPPA重建 完整数据代码下载 加载满采数据 load brain_8ch DATA DATA/max(max(max(abs(ifft2c(DATA))))) eps; 数据欠采样 maskones(sy,sx); for i1:2:syif 94…

ORACLE 如何使用dblink实现跨库访问

dbLink是简称&#xff0c;全称是databaselink。database link是定义一个数据库到另一个数据库的路径的对象&#xff0c;database link允许你查询远程表及执行远程程序。在任何分布式环境里&#xff0c;database都是必要的。另外要注意的是database link是单向的连接。在创建dat…

基于OpenCV的图形分析辨认02

目录 一、前言 二、实验目的 三、实验内容 四、实验过程 一、前言 编程语言&#xff1a;Python&#xff0c;编程软件&#xff1a;vscode或pycharm&#xff0c;必备的第三方库&#xff1a;OpenCV&#xff0c;numpy&#xff0c;matplotlib&#xff0c;os等等。 关于OpenCV&…

Python编程作业五:面向对象编程

目录 一、类的定义和方法 二、图书管理系统 一、类的定义和方法 定义一个学生类&#xff08;Student&#xff09;&#xff0c;包括学号(id)、姓名(name)、出生日期(birthday)和分数(score)4个属性&#xff0c;其中出生日期是私有属性&#xff0c;不能被外界直接访问。该类应具…

【论文阅读】Elucidating the Design Space of Diffusion-Based Generative Models

Elucidating the Design Space of Diffusion-Based Generative Models 引用&#xff1a; Karras T, Aittala M, Aila T, et al. Elucidating the design space of diffusion-based generative models[J]. Advances in Neural Information Processing Systems, 2022, 35: 26565…

打破界限,释放创新:一键将HTML转化为PDF

在互联网时代&#xff0c;HTML作为网页的标准语言&#xff0c;承载着无数的信息与创意。然而&#xff0c;有时我们需要将这些在线内容转化为可打印、可分享的PDF格式。这时&#xff0c;一款高效、便捷的转换工具就显得尤为重要。 首先&#xff0c;我们要进入首助编辑高手主页面…

智能边缘计算网关实现工业自动化与数据处理的融合-天拓四方

随着物联网&#xff08;IoT&#xff09;技术的迅速发展和普及&#xff0c;越来越多的设备被连接到互联网上&#xff0c;产生了海量的数据。如何有效地处理和分析这些数据&#xff0c;同时确保数据的安全性和实时性&#xff0c;成为了摆在企业面前的一大挑战。智能边缘计算网关作…

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

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

8、JavaWeb-案例-部门管理-员工管理

P135 案例-准备工作 依据案例&#xff0c;学习根据接口文档开发接口的能力。 完成部门管理和员工管理两部分。可以分析这两部分&#xff0c;一个部门可以有多个员工&#xff0c;一个员工归属一个部门。 准备数据库表&#xff0c;创建一个springboot工程&#xff0c;引入web开…