如何将 <img> 置于 div 的中心并使其与 div 的高度成比例?

How can I center an <img> inside a div and have it scale with the div's height?

我正在使用居中的 img 作为某些图块的背景。我正在尝试让这些图像与其父级 div 的高度成比例,如果它们比它们的父级更宽,那么它们可以隐藏溢出。

示例:

* 我现在可以使用了。答案在下面,我正在更新此代码以显示我需要用来让它工作的所有内容 *

HTML

<div class="container">
    <img class="derp" src="http://gridiculo.us/images/kitty02.jpg">
</div>

CSS:

.container {
    height:250px;
    width:50%;
}
.derp{
  object-fit: cover;
  height: 100%;
  width: 100%;
}

这是一个近似的例子:http://codepen.io/chriscoyier/pen/myPMGB

不同之处在于我使用的是 s 而不是背景图像,而不是 img 完全填充 div 它会适合高度并隐藏宽度溢出。

我尽量避免使用背景图片,因为我使用了很多这样的图块,并且为每个图块制定 CSS 规则是行不通的。

为了根据 div 的高度缩放它,我将高度从 px 更改为 % - 这样,较大的 [=23= 】,图片越大。为了确定图像,我会在图像中使用边距 css。看起来像这样:

    .derp{
        height:80%;
        width:80%;
        margin:10%;
     }
.container {
    height:250px;
    width:50%; /* needed */
    /* inner img is centered horizontally */
    vertical-align:top;
    text-align:center;
    overflow-x:hidden;
}
<div class="container" style="background-color:gray"> <!-- The background is there so you could see the image relative to the div -->
    <img class="derp" src="http://gridiculo.us/images/kitty02.jpg">
</div>

根据您需要支持的浏览器数量,我建议您使用object-fit!对它的支持是 okay if you can ignore IE, but in case your project qualifies, I see no problem with using it today. Also, there is always a polyfill.

您可以找到关于 属性 的精彩摘要 on CSS-Tricks.com。它基本上与 background-size 类似,但适用于 <img> 标签。在你的情况下,object-fit: cover; 就可以了。

我在 CodePen 上制作了 a little demo,向您展示了它是如何工作的。

img {
  height: 100%;
  object-fit: fill;
  width: 100%;
}

保持图像纵横比的最佳方法是将宽度设置为自动(这是默认行为,因此您无需明确设置)。通过一个简单的 overflow:hidden,它几乎可以如您所愿地工作。

困难的部分是水平居中。你可以试试这个答案:css to center a image horizontally

但是,如果您的所有图片尺寸不同,您将需要为每张图片制定一条规则。在这种情况下,将图像设置为 background-img 对于语义和可访问性会更好(因为您的图像在页面中没有意义,它不传达任何信息,它是装饰)。 <img> 将被屏幕 reader(alt 属性)读取,在您的情况下,它不会帮助盲人。