在固定大小的 div 中垂直对齐中心图像

Posted

技术标签:

【中文标题】在固定大小的 div 中垂直对齐中心图像【英文标题】:vertical align center image in fixed size div 【发布时间】:2011-06-27 16:12:32 【问题描述】:

我有一个 145px X 145px 的 div。我在这次潜水中有一个 img。 img 可以是任意大小(最长边为 130 像素)。我希望图像在 div 中垂直居中。我尝试过的一切都适用于大多数浏览器,但不适用于 IE7。我需要一些可以在 IE7 中运行的东西。

【问题讨论】:

我也有类似的要求。找到解决方案here。 【参考方案1】:

这是一个跨浏览器的解决方案:

<div class="img-container"><img src="picture.png" class="cropped"/></div>


div.img-container 
     width: 390px;
     height: 211px;
     position: relative;
     margin-left: auto;
     margin-right: auto;
     overflow: hidden;
 
img.cropped 
    position: absolute;
    margin: auto;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;

【讨论】:

这个解决方案太棒了。我搜索了整个网络,table-cell 和 flexbox 这两种常见的解决方案对我不起作用,但这一种就像魔术一样。 我没有在除 chrome 之外的任何浏览器中测试过这个,但它在那里工作得很好...... 当图像的高度大于容器时,这似乎不起作用。 完美运行,谢谢!我可以添加 img.croppedmax-height: 100%; max-width: 100%; 对于大于容器的图像 这真是天才!不敢相信这没有得到更广泛的使用。【参考方案2】:

您可以像这样用 div 上的背景替换图像:

<div style="background:url(myimage.jpg) no-repeat center center"></div>

【讨论】:

无论如何这仍然是我的首选解决方案。【参考方案3】:

不确定 IE7,但对于 IE9 和其他现代浏览器的后续作品。

    .picturecontainer
        width:800px;
        height:800px;
        border:solid 1px;
        display:table-cell;
        vertical-align:middle;

    
    .horizontalcenter
        display:block;
        margin-left:auto;
        margin-right:auto;
        vertical-align:middle;
    

使用它

<div class="picturecontainer"><img src="" class="horizontalcenter"/></div>

这会将图像置于死点。​​

【讨论】:

【参考方案4】:

不确定到目前为止您尝试了什么,但如果图像显示为内联元素,vertical-align CSS 属性应该可以工作。

关于垂直对齐的一些信息:http://www.w3schools.com/css/pr_pos_vertical-align.asp

如果您必须考虑所有图像高度,那几乎是不使用 javascript 的唯一方法。

如果图像不是内联元素并且您只需要容纳一致高度的图像,您可以执行以下操作:

img 
    margin-top: -50px; /* This number should be half the height of your image */
    position: absolute;
        top: 50%;

否则,我认为容纳不同高度的图像的唯一方法是使用您的 CSS 执行类似的操作,但使用 JS 将负边距设置为图像高度的一半。

【讨论】:

但正如他所说,图像“img 可以是任意大小”。所以 -50 的值只适用于 100 像素高的图像。因此,当它不能解决 OP 的问题时,不确定为什么这个答案有这么多赞成票? 是的,我的主要答案是针对不同尺寸的图像,但我也提供了一些其他选项的详细信息。您阅读了我的全部答案还是只阅读了代码?【参考方案5】:

使用line-height 属性为我解决了这个问题。

参考:vertical-align image in div

HTML:

<div class="img_thumb">
    <a class="images_class" href="large.jpg" rel="images"><img src="http://www.minfo.pt/fotos/_cache/produtos/0/068.M.976010002__thumbnail_50_50_true_sharpen_1_1.JPG" title="img_title"  /></a>
</div>

CSS:

.img_thumb 
    float: left;
    height: 120px;
    margin-bottom: 5px;
    margin-left: 9px;
    position: relative;
    width: 147px;
    background-color: rgba(0, 0, 0, 0.5);
    border-radius: 3px;
    line-height:120px;
    text-align:center;


.img_thumb img 
    vertical-align: middle;

【讨论】:

【参考方案6】:

我创建了一个小的 jQuery 代码来做到这一点,而不必使用讨厌的表格:

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js">
imagepos = function () 
    $('img').each(function ()   
            imgheight = Math.round($(this).height() / 2);
            imgwidth = Math.round($(this).width() / 2);    
            $(this).attr("style", "margin-top: -" + imgheight + "px; margin-left: -" + imgwidth + "px; opacity:1;");
        );
       
$(window).load(imagepos);
</script>

而且你还需要一点 css:

div

position:relative;

img

display:block;
margin:auto;
max-width:100%;
position:absolute;
top:50%;
left:50%;
opacity:0;

【讨论】:

以上是关于在固定大小的 div 中垂直对齐中心图像的主要内容,如果未能解决你的问题,请参考以下文章

如何左对齐和垂直对齐标题中的图像并将文本水平保持在div的中心[重复]

响应式设计:如何调整图像/背景图像的大小并垂直对齐 div?

图像 <a> 垂直和水平对齐中心并在两者中都使用 % 调整大小

如何在固定高度的div内垂直居中动态高度的图像?

打破容器时垂直对齐图像

div中的垂直对齐div [重复]