如何在较窄的父div中水平居中img

时间:2011-11-04 22:04:01

标签: css

我需要居中的图像比包含它们的父div更宽。父div是固定宽度,溢出设置为隐藏。

<div style='overflow:hidden; width:75px height:100px;'>
    <img src='image.jpg' style='height:100px;' />
</div>

我必须使用图像作为子元素,因为我需要调整缩略图尺寸并且不能依赖背景尺寸,因为旧版本的移动版Safari不支持这是必需的。我也不能使用javascript,所以它必须是一个CSS解决方案。

还有一点需要注意的是,宽度会因图像而异,所以我不能仅仅在硬编码偏移处对子元素使用绝对定位。

这可能吗?

更新:

对于后代,我刚刚发现这可以通过使用

在旧版本的移动版游戏中完成
-webkit-background-size:auto 100px; 

当然,背景将照常设置,使用50%进行左侧定位。如果你需要这个在另一个浏览器上工作,接受的解决方案可能是最好的,但由于这个问题与iphone有关,这个解决方案有点清洁。

3 个答案:

答案 0 :(得分:3)

不使用背景图片仍然有用吗?你不应该调整它的大小。 这样的事情有意义吗? http://jsfiddle.net/QHRHP/44/

.container{
 margin:0 auto;
 width:400px;
 border:2px solid #000;  
 height:250px;
 background:url(http://placekitten.com/800/250) center top no-repeat;
}

答案 1 :(得分:2)

你对额外加价有多大不利?此外,图像的最大尺寸是多少?例如,如果您的最大图像宽度是225像素,那么您可以尝试:

<div class="frame">
  <div>
    <img src="image.jpg"/>
  </div>
</div>

.frame {
  overflow: hidden; 
  width: 75px;
  height: 100px;
  position: relative;
}
.frame > div {
  position: absolute;
  left: -5075px;
  width: 10225px;
  text-align: center;
}
.frame img {
  height: 100px;
  display: inline-block;
}

这里有一个小提琴示例:http://jsfiddle.net/brettwp/bW4xD/

答案 2 :(得分:0)

如果你知道div的宽度和图像的宽度,你可以简单地做一些数学运算。

假设div的宽度为200px,图像宽度为300px:

div.whatever {
    width: 200px;
}
img.someImg {
    left: -50px;
    position: relative;
}

我们知道,由于div的宽度是200个像素,因此将从图像中裁剪100个像素。如果要使图像居中,则会在任一侧的div边界之外隐藏50个像素。因此,我们将图像的左侧位置设置为-50px。

示例(了解图像大小):http://jsfiddle.net/7YJCD/4/

这有意义吗?

如果您不知道图像大小或div大小,可以使用javascript来检测这些值并执行相同的操作。

示例(不知道图像大小,使用jQuery javascript):http://jsfiddle.net/K2Rkg/1/

仅供参考,这是original image