简单说 CSS中的 object-fit 与 object-position

版权声明:本文为博主原创文章,欢迎转载,转载请注明出处。 https://blog.csdn.net/FE_dev/article/details/78249063

说明

问题: 一个div宽度不固定,高度固定,采用Flex布局,它里面有两个元素一个img宽度占40%,高度占100%,一个p元素,宽度占60%,高度占100%,调整浏览器窗口大小,要保证,img元素不变形,宽高比不变,怎么办!

从图中可以看出,随着调整浏览器窗口,图片的宽高比也被破坏了,我们该怎么办呢?我想大家应该会想到用 background,用一个div的background来替代img元素,这样就可以调整它的background-size 和 background-position,就能保证图片不变形,宽高比不变了,但是其实不用这么麻烦,我们直接用 object-fit 与 object-position 就可以了。

效果图:

代码:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8"> 
    <style type="text/css">
    div{
        height: 300px;
        border: 1px solid red;
        display: flex;
    }

    img {
        width: 40%;
        height: 100%;

        /*只是增加下面两行就可以了*/
        object-fit: none;
        object-position: center;  /*这行都可以不写,object-position 默认就是 center*/
    }

    p{
        width: 60%;
        height: 100%;
        background: blue;
        margin: 0;
        overflow: hidden;
    }
    </style>
</head>

<body>
    <div>
        <img src="https://img-blog.csdn.net/20171016170931485">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
    </div>
</body>

</html>

上面是object-fit取值为 none 的情况,我们看看object-fit取值为 contain 的情况。

好的,问题解决了,我们来具体看看 object-fit 与 object-position 这两个属性

解释

object-fit 属性

这个属性决定了像img和videos这样的替换元素的内容应该如何使用他的宽度和高度来填充其容器。

object-fit 具体有5个值:

描述

fill

默认值。填充,替换元素填满整个内容区域,可能会改变长宽比,导致拉伸。

contain

包含,保持原始的尺寸比例,保证替换元素完整显示,宽度或高度至少有一个和内容区域的宽度或高度一致,部分内容会空白。

cover

覆盖,保持原始的尺寸比例,保证内容区域被填满。因此,替换元素可能会被切掉一部分,从而不能完整展示。

none

保持替换元素原尺寸和比例。

scale-down

等比缩小。就好像依次设置了none或contain, 最终呈现的是尺寸比较小的那个。

替换元素:

其内容不受CSS视觉格式化模型控制的元素,比如img,嵌入的文档(iframe之类)或者applet,叫做替换元素。比:img元素的内容通常会被其src属性指定的图像替换掉。替换元素通常有其固有的尺寸:一个固有的宽度,一个固有的高度和一个固有的比率。比如一幅位图有固有用绝对单位指定的宽度和高度,从而也有固有的宽高比率。另一方面,其他文档也可能没有固有的尺寸,比如一个空白的html文档。 CSS渲染模型不考虑替换元素内容的渲染。这些替换元素的展现独立于CSS。object,video,textarea,input也是替换元素,audio和canvas在某些特定情形下为替换元素。使用CSS的content属性插入的对象是匿名替换元素。

我们来看看,每个属性值,起作用的样子

因为scal-down 就是 none和contain之间进行选择,选择的是尺寸比较小的那个 ,所以它是始终能保证替换元素完整显示的,并且它显示的最大尺寸就是图片实际尺寸。

object-position 属性

object-position 用来控制替换内容位置

语法: object-position:x轴距离 y轴距离;

object-position属性定义时可以用像素,也可以用百分比,也可以用关键字。例如,object-position: 10px 10px 是左上角各空出10px,object-position: 100% 100%是右下角,object-position: center 是中间 和 object-position: 50% 50% 效果一样。

我们来看看各种取值的效果

注意: 1、object-position属性与background-position很相似,其取值和background-position属性取值一样,但是它的默认值是50% 50%, background-position的默认值是0% 0% 2、如果仅指定了一个值,其他值将是50%

总结

这两个属性,主要是解决在布局时遇到的 尺寸 和 宽高比问题,说简单点就是处理图片会变形的问题,而object-position默认值是 50% 50% ,就是居中的意思,也可以用这两个属性来做 替换元素 的内容的水平垂直居中。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券