如何使用css缩放图像以填充div保持纵横比?

mem*_*und 8 html css

我想填充一个div img,保持纵横比,并根据需要拉伸宽度或高度.

<div style="width: 80px; height: 80px">
    <img src="..." />
</div>
Run Code Online (Sandbox Code Playgroud)

我怎么能实现它?如果图像不是二次方,则必须"放大"并且要么是上下或左右,要么是哪一侧是较大的一侧.此外,图像应该在中心之后,以便角落被均等地切割.

我试过(但没效果):

.thumb {
    max-width:100%;
    max-height:100%;
}
Run Code Online (Sandbox Code Playgroud)

如果我添加额外的width: 100%; height:100%;,图像完全适合,但调整大小不保持aspect ratio.

mem*_*und 35

以下是诀窍:

    width:100%;
    height:100%;
    object-fit: cover;
    overflow: hidden;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这[在Internet Explorer中不起作用](http://caniuse.com/#search=object-fit). (3认同)

cdM*_*nix 9

使用时max-width,图像将包含在div内部,不会有溢出.

如果使用min-width,则较短的一侧将恰好是div的100%,而另一侧可以更长.为了使图像居中,我们可以使用平移和相对定位.

以下代码有效.

div {
  overflow: hidden;
} 
.thumb {
  min-width: 100%;
  min-height: 100%;
  transform: translate(-50%, -50%);
  position: relative;
  left: 50%;
  top: 50%;
}
Run Code Online (Sandbox Code Playgroud)


Gre*_*reg 6

要保持图像的纵横比,只需指定一个维度:

div {
    width: 80px;
    height: 80px;
    border: 2px solid red;
    overflow: hidden;
}

img {
    height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

这将产生以下效果:

小猫!

但是,正如您所看到的,小猫不是中心,但您可以使用Flex框对其进行排序.

div {
    width: 80px;
    height: 80px;
    border: 2px solid red;
    justify-content: center;
    display: flex;
    flex-direction: row;
}

img {
    flex: 1;
    height: 100%;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 两种方法都不起作用:在两种情况下都不会考虑父级的宽度 (2认同)

MoL*_*Low 5

使用背景大小:封面

div{
  background-image:url(http://placekitten.com.s3.amazonaws.com/homepage-samples/200/140.jpg);
  background-size:cover;
  }
Run Code Online (Sandbox Code Playgroud)
<div style="width:80px;height:80px;"></div>
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 4

.thumb {
    max-width:100%;
    height:auto;
}
Run Code Online (Sandbox Code Playgroud)

或者(允许放大和缩小,如果放大的话看起来会像素化,上面的内容只会缩放到图像的最大尺寸)

.thumb {
    width:100%;
    height:auto;
}
Run Code Online (Sandbox Code Playgroud)

就是您正在寻找的。

有关响应式图像的更多信息:

  1. http://demosthenes.info/blog/586/CSS-Fluid-Image-Techniques-for-Responsive-Site-Design

  2. http://www.w3schools.com/css/css_rwd_images.asp