如何使用overflow:hidden?垂直居中并裁剪图像?

时间:2012-10-05 19:49:21

标签: html css image

我正在尝试显示预设的图像大拇指而不拉伸或缩小图像。我的HTML看起来像这样:

<div class="container">
    <img src="photo.jpg" alt="Test Photo" class="clipped" />
</div>

我的CSS:

.container{
    height: 75px;
    width: 75px; 
    overflow: hidden;
}

.container img.clipped {
    width: 100%; 
}

enter image description here

我希望在下面的75 x 75像素容器中看到图像的中心,即垂直居中。

enter image description here

知道我缺少什么吗?

4 个答案:

答案 0 :(得分:6)

图像从框的左上角开始调整大小,因此仅剪切其底部。

您可以实现将图像移动到背景的结果:

Demo - 警告:无法在IE8上运行

HTML:

<div class="container"></div>​

CSS:

.container{
    height: 75px;
    width: 75px; 
    overflow: hidden;
    background:url(photo.jpg) left center no-repeat;
    background-size:75px auto; /* or background-size:100% auto; */
}​

要将此方法应用于多个容器,可以将其拆分为两个类:

.container {
    height: 75px;
    width: 75px; 
    overflow: hidden;
}​

.myPic {
    background:url(photo.jpg) left center no-repeat;
    background-size:75px auto; /* or background-size:100% auto; */
}

然后你可以:

<div class="container myPic"></div>​
<div class="container2 myPic"></div>​
<div class="container myPic2"></div>​
<div class="container2 myPic2"></div>​

......等等。

或者您可以使用内联样式设置背景图像:

.container {
    /* same stuff */
    background-position: left center;
    background-repeat: no-repeat;
    background-size:75px auto; /* or background-size:100% auto; */
}

<div class="container" style="background-image:url(photo.jpg);">
<div class="container" style="background-image:url(photo2.jpg);">

答案 1 :(得分:2)

我没有一个纯粹的CSS解决方案,而且我不确定你的HTML会有一个相当简单的尺寸,但是使用javascript你可以做到这一点(如果你不喜欢,请适应vanilla不使用jQuery:

$('.container').each(function(){
    var $img = $(this).find('img');
    $(this).scrollTop(($img.height()-$(this).height())/2);
    $(this).scrollLeft(($img.width()-$(this).width())/2);
});​

Demonstration

答案 2 :(得分:1)

支持translateY的现代浏览器的一种方式。

.clipped {
    position: relative;
    top: 50%;
    -webkit-transform: translateY(-50%);
    -ms-transform: translateY(-50%);
    transform: translateY(-50%);
}

jsFiddle示例:http://jsfiddle.net/5qts9jt5/130/

答案 3 :(得分:0)

.container {
  line-height: 73px;
}
.container img.clipped {
  vertical-align:middle;
}