翻译后的答案:
如果您准备选择CSS3,可以使用css3 translate属性。基于较大的值进行调整。如果您的高度比容器小,而宽度更小,则宽度将被拉伸到100%,并且高度将从两侧裁剪。同样适用于较大的宽度。
您需要的HTML:
<div class="img-wrap">
<img src="http://lorempixel.com/300/160/nature/" />
</div>
<div class="img-wrap">
<img src="http://lorempixel.com/300/200/nature/" />
</div>
<div class="img-wrap">
<img src="http://lorempixel.com/200/300/nature/" />
</div>
而且,CSS:
.img-wrap {
width: 200px;
height: 150px;
position: relative;
display: inline-block;
overflow: hidden;
margin: 0;
}
div > img {
display: block;
position: absolute;
top: 50%;
left: 50%;
min-height: 100%;
min-width: 100%;
transform: translate(-50%, -50%);
}
看,它工作了:http://jsfiddle.net/shekhardesigner/aYrhG/
说明
DIV设置为相对定位。这意味着所有子元素将从此DIV开始的起始坐标(原点)获得。
图像被设置为块元素,min-width/height
都设置为100%,这意味着将图像调整为它的父级的最小值,而不管其大小。min
是关键。如果由于min-height,图像高度超过了父级的高度,没有问题。它会查找min-width并尝试将最小高度设置为父级的100%。两者互为反义词。这确保没有间隙围绕div,但图像始终稍微大一些,并被overflow:hidden;
裁剪。
现在是image
,这被设置为绝对位置,具有left:50%
和top:50%
。表示将图像向左和向上推动50%,确保原点取自DIV。左/顶部单位是从父级测量的。
神奇时刻:
transform: translate(-50%, -50%);
现在,CSS3的transform
属性的此translate
函数移动/重新定位一个问题中的元素。此属性处理应用的元素,因此值(x,y)或(-50%,-50%)表示将图像左移50%并将其大小减小,然后将其移到负上方50%的位置。
例如,如果图像大小为200px x 150px,则transform: translate(-50%, -50%)
将计算为translate(-100px, -75px)。当我们有各种大小的图像时,%单位很有帮助。
这只是一种巧妙地找出图像和父DIV的质心并将它们匹配的方法。
对于解释时间过长词,我表示歉意!
更多阅读资源:
background-size: cover;
吗? - CP510max-height:100%;
替代width
,fiddle。 - Patrick Evans