使用 CSS 在 <DIV> 中居中 <IMG/>

Posted

技术标签:

【中文标题】使用 CSS 在 <DIV> 中居中 <IMG/>【英文标题】:center <IMG/> inside a <DIV> with CSS 【发布时间】:2011-06-24 21:49:31 【问题描述】:

我想在一个 div 中居中图像。 div 的宽度固定为 300 像素。图像宽度仅在运行时已知。它通常大于 300px,因此图像应该居中并左右切割。在这种情况下,margin 0 auto 不起作用。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<style type="text/css">

divwidth:300px;border:1px solid red; overflow:hidden

img
/* NOTE!!!!
margin:auto; doesn't work when image width is bigger than div width
image width is known only at runtime!!!
*/

</style>
</head>

<body>
<div>
    <img src="" />
</div>
</body>
</html>

感谢任何 CSS 想法


UPD 关注这个有趣的任务here

【问题讨论】:

【参考方案1】:

提供div text-align: center 应该可以。 (不过,您可能需要添加 align='center' 作为属性才能使其在 IE6 中运行。)注意:正如 @streetpc 所指出的,如果图像宽度大于容器。

或者,您也可以将图像作为背景图像:

background-image: url(url);
background-position: center top;

【讨论】:

如果你的 div 有text-align: center,检查img 有display: inline(或inline-block),但图像只会向右裁剪。 @streetpc 你是对的,如果图像比容器宽,它不会以第一种方法居中。背景图像确实是最好的方法(或者,一个具有巨大固定宽度的内部 div - 但那很hacky) 考虑到背景图像可能无法打印,无法在运行时以通用方式替换,爬虫可能无法获取它(例如,谷歌图像),您可以使用max-width 限制图片大小。 @Gonzalo 除了最后一个 IMO 之外的所有优点 - max-width 将调整图像的大小,我认为这不是 OP 的意图。【参考方案2】:

如果你在图像周围包裹另一个元素,你可以让它工作:

<div class="outer">
    <div class="inner"><img src=""  /></div>
</div>

还有以下 CSS:

.outer 
    width: 300px;
    border: 1px solid red;
    overflow: hidden;
    *position: relative;

.inner 
    float: left;
    position: relative;
    left: 50%;

img 
    display: block;
    position: relative;
    left: -50%;

.outer 上的position: relative 标有*,因此它仅适用于 IE6/7。如果您愿意,可以将其移至条件 IE 样式表,或者完全删除 *。需要避免现在相对定位的children溢出。

【讨论】:

你的方法有效!你有什么疯狂的想法在(裁剪或不裁剪)图像周围制作边框吗?不是外边框,不是图像边框,而是图像可见部分的边框?我的智商太低,做不到……【参考方案3】:

将图像置于 html 页面的中心:

<p style="text-align:center; margin-top:0px; margin-bottom:0px; padding:0px;">
<img src="image.jpg" />
</p>

【讨论】:

【参考方案4】:

您可以使用 CSS 转换来定位元素:

div  position: relative;  
img  position: absolute; left: 50%; transform: translateX(-50%); 

【讨论】:

以上是关于使用 CSS 在 <DIV> 中居中 <IMG/>的主要内容,如果未能解决你的问题,请参考以下文章

在未知大小的容器中居中多个 DIV

为啥这个 CSS 按钮不在 div 中居中?

如何在div中居中图像?

如何在 div 中居中输入 [重复]

在 DIV 中居中放置 H1 标签

如何在 div 中居中(背景)图像?