原答案:
如果你准备好选择 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 设置为该relative
位置。这意味着所有子元素都将从该 DIV 开始的位置获取起始坐标(原点)。
图像被设置为 BLOCK 元素,min-width/height
两者都设置为 100% 意味着将图像大小调整为与其父级的 100% 的最小值无关。min
是关键。如果按最小高度,图像高度超过了父级的高度,没问题。它将寻找最小宽度并尝试将最小高度设置为父母的 100%。两者反之亦然。这确保了 div 周围没有间隙,但图像总是有点大并被修剪overflow:hidden;
现在image
,这被设置为 和的absolute
位置。意味着将图像从顶部向左推 50%,以确保原点取自 DIV。左/上单位是从父单位测量的。left:50%
top:50%
神奇时刻:
transform: translate(-50%, -50%);
现在,translate
CSS3transform
属性的这个功能移动/重新定位有问题的元素。此属性处理应用的元素,因此值 (x, y) OR (-50%, -50%) 表示将图像负片向左移动图像大小的 50%,并将负片顶部移动图像大小的 50% .
例如。如果图像大小为 200px × 150px,transform:translate(-50%, -50%)
将计算为 translate(-100px, -75px)。当我们有各种尺寸的图像时,% 单位会有所帮助。
这只是找出图像质心和父 DIV 并匹配它们的一种棘手方法。
抱歉花了太长时间来解释!
阅读更多资源: