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

说明

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

图片描述

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

效果图:canvas

图片描述

代码:浏览器

<!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="http://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 的状况。
这里写图片描述app

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

解释

object-fit 属性布局

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

object-fit 具体有5个值:flex

图片描述

替换元素:ui

其内容不受CSS视觉格式化模型控制的元素,好比img,嵌入的文档(iframe之类)或者applet,叫作替换元素。比:img元素的内容一般会被其src属性指定的图像替换掉。替换元素一般有其固有的尺寸:一个固有的宽度,一个固有的高度和一个固有的比率。好比一幅位图有固有用绝对单位指定的宽度和高度,从而也有固有的宽高比率。另外一方面,其余文档也可能没有固有的尺寸,好比一个空白的html文档。

CSS渲染模型不考虑替换元素内容的渲染。这些替换元素的展示独立于CSS。object,video,textarea,input也是替换元素,audio和canvas在某些特定情形下为替换元素。使用CSS的content属性插入的对象是匿名替换元素。spa

咱们来看看,每一个属性值,起做用的样子

图片描述

图片描述

由于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% 效果同样。

咱们来看看各类取值的效果

图片描述

图片描述

图片描述

图片描述

图片描述

注意:
一、object-position属性与background-position很类似,其取值和background-position属性取值同样,可是它的默认值是50% 50%, background-position的默认值是0% 0%
二、若是仅指定了一个值,其余值将是50%

总结

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

相关文章
相关标签/搜索