首页 > 其他分享 >【实例】深入详解 CSS 中的 object-fit 5个属性值

【实例】深入详解 CSS 中的 object-fit 5个属性值

时间:2023-06-19 15:57:47浏览次数:46  
标签:容器 fit object 图像 contain CSS 纵横

【实例】深入详解 CSS 中的 object-fit 5个属性值

在本文中,我们将介绍如何使用object-fit,以及一些实际用例和建议。

我们并不总是能够为 HTML 元素加载不同大小的图像,如果我们使用与图像纵横比不成比例的宽度和高度,则图像可能会被压缩或拉伸。为解决此问题,我们可以为img元素使用object-fit

首先,让我们看一看下图:

 一张好看的照片,在卡片组件中使用时会被挤压 

 

 

为什么会这样?

图像具有纵横比,浏览器使用该图像填充包含框,如果图像的纵横比与为其指定的宽度和高度不同,则结果将是压缩或拉伸的图像。

我们在下图中看到了这一点:

 图像的纵横比与包含框不同,图像被拉伸。

 

 

解决方案

当图像的纵横比与包含元素的宽度和高度不一致时,我们并不总是需要添加不同大小的图像。我们可以通过裁剪图片的方法,保留图像的纵横比并防止其被挤压。而CSS的object-fit就具有这样的作用。

CSS object-fit

object-fit属性定义了被替换元素的内容(例如imgvideo应该如何调整大小以适应其容器)。object-fit的默认值是fill,这可能会导致图像被挤压或拉伸。

让我们它的几个属性值。

object-fit: contain

使用object-fit: contain,图像将调整大小以适应其容器的纵横比。如果图像的纵横比与容器的不匹配,它将被加黑。

 用object-fit: contain时,图像将被相应地调整大小

 

object-fit: cover

使用object-fit: cover,图像也将被调整大小以适应其容器的纵横比,如果图像的纵横比与容器的不匹配,那么它将被裁剪以适应。

 使用object-fit: cover时,图像将被剪裁以适合或相应地调整大小

 

object-fit: fill

使用object-fit: fill,图像将被调整大小以适应其容器的纵横比,如果图像的纵横比与容器的不匹配,它将被挤压或拉伸。我们不希望那样。

 使用object-fit: fill时,图像将被相应地压缩、拉伸或调整大小

 

object-fit: none

使用object-fit: none时,图像根本不会调整大小,既不会拉伸也不会压缩。它像cover值一样工作,但它不尊重其容器的纵横比。

使用 时object-fit: none,如果图像的尺寸不相同,则不会调整图像大小

除了object-fit,我们还有object-position属性,它负责将图像定位在其容器中。

object-position的可能值

object-position属性的工作方式类似于 CSS 的background-position属性:

 当包含框的纵横比垂直较大时,topbottom关键字也有效。

 比较object-position: top(左)和object-position: bottom(右)

 

用例和例子

object-fit: cover一个完美的用例是用户头像。头像允许的纵横比通常是正方形的。将图像放在方形容器中可能会扭曲图像。

 

 object-fit有和没有object-fit: cover的用户头像的比较

 

1、标志列表

列出企业的客户很重要。为此,我们经常会使用徽标。因为徽标会有不同的大小,所以我们需要一种方法来调整它们的大小而不会扭曲它们。

值得庆幸的是,object-fit: contain这是一个很好的解决方案。 

  • .logo__img {
  •     width: 150px;
  •     height: 80px;
  •     object-fit: contain;
  • }

 使用object-fit: contain可以帮助我们在不扭曲客户徽标的情况下调整其大小

 

2、文章缩略图

这是一个非常常见的用例。文章缩略图的容器可能并不总是具有相同纵横比的图像。

  • .article__thumb {
  •     object-fit: cover;
  • }

 借助object-fit: cover

 

3、使用object-fit: contain为图像添加背景

你知道你可以为img添加背景颜色吗?我们可以使用object-fit: contain

在下面的示例中,我们有一个图像网格。当图像和容器的纵横比不同时,会出现背景色。

  • img {
  •     object-fit: contain;
  •     #def4fd;
  • }

 我们可以使用object-fit: contain为图像添加背景颜色

 

结论

正如我们所见,使用object-fit处理图像纵横比非常有用。我们并不总是能够控制为每个图像设置完美的尺寸,而这正是这个功能的亮点所在。

标签:容器,fit,object,图像,contain,CSS,纵横
From: https://www.cnblogs.com/Dasate/p/17491316.html

相关文章

  • Retrofit通过OkHttp发送请求的过程
    retrofit是对okhttp的封装。retrofit使用注解来创建请求的,retrofit的注解有哪些,分别代表什么意义,有大量的博客都有介绍,我就不重复了。但注解创建的请求,很显然是不能被okhttp识别的,其中必定有个转换的过程。这个过程我没有搜到,所以我阅读了retrofig源码,把用注解创建的请求,变为okhttp......
  • (七)CSS动画与响应式
    一、CSS动画 二、响应式 ......
  • 使用Kotlin+Rretrofit+rxjava+设计模式+MVP封装网络请求
    0、前言:kotlin使用起来非常顺畅,尤其是结合rxjava、设计模式使用,你会发现写代码原来可以这么开心!什么?你还在使用java?赶紧去学一下kotlin吧!我相信你一定会对他爱不释手,kotlin也很容易学,花一天的时间就可以从java切换为kotlin一、正文本文主要介绍如何使用kotlin封装网络请求的工具,结......
  • (一)CSS样式、CSS选择器、伪元素、CSS背景
    一、CSS样式二、CSS选择器 三、伪元素四、背景  ......
  • java中的深拷贝和浅拷贝、Object类中的clone()
    概念浅拷贝:复制基本数据类型的值,以及实例对象的引用地址,拷贝出来的对象,内部类属性指向的是同一个对象深拷贝:即会拷贝基本数据类型的值,也会针对实例对象的引用地址所指向的对象进行复制,拷贝出来的对象,内部类属性指向的不是同一个对象。Object类中的clone()方法。默认是浅拷贝......
  • css+html案例
    css+html案例 <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"content=&quo......
  • Nginx代理静态界面资源后,浏览器端CSS、JS不起作用
    现象说明:VUE项目打包后通过Nginx代理访问时,JS、CSS等资源都加载到浏览器端了,但是不起作用。经过分析后,发现对于JS、CSS在浏览器端显示的资源类型为:Content-Type=text/plain。发现Nginx没有配置:includemime.types;当Nginx服务器收到静态文件请求时,会根据请求文件中的后缀名在M......
  • hObject==handles.pushbutton1;sprintf('handles.pushbutton1 is %d',handles.pushbutt
    %---Executesonbuttonpressinpushbutton1.functionpushbutton1_Callback(hObject,eventdata,handles)%hObjecthandletopushbutton1(seeGCBO)%eventdatareserved-tobedefinedinafutureversionofMATLAB%handlesstructurewithhandles......
  • python: object
    """Peson.py人类类edit:ide:date:"""classHuman(object):"""人类类"""#限制对象属性只能是SLOTS里面的变量名对象绑定属性,不用先定义属性#__slots__=('sage','sname','sfrom......
  • JavaScript之Object.defineProperty()
    1.对象的定义与赋值经常使用的定义与赋值方法obj.prop=value或者obj['prop']=valueletPerson={};Person.name="Jack";Person["gender"]="female";console.log(Person.name);//Jackconsole.log(Person.gender);//femaleconsole.log(Pers......