【问题标题】:Center Image inside div vertically using display table property使用显示表属性垂直居中 div 内的图像
【发布时间】:2013-04-09 13:34:00
【问题描述】:

我试图在 div 内垂直居中图像。我在 stackoverflow 上阅读了一些其他类似的问题,并决定使用这个解决方案:

<div id="wrapper">
    <div id="cell">
        <img />
    </div>
</div>

#wrapper {display:table;}
#cell {display:table-cell; vertical-align:middle;}

这对于小于视口大小的图像非常有用。当图像的高度大于视口时会出现问题。在这种情况下,包装器 div 只是成为图像的高度。它溢出了页面。我该如何避免这种情况。

这个包装 div 是 view-port div 的一部分。视口 div 具有固定高度和 100% 宽度定位绝对

#view-port{ height: 600px; width:100% }

编辑:我想我对这个问题造成了一些混乱。我创建了 JSfiddle 来解释我的意思

这是一个链接:http://jsfiddle.net/sublime/fgTtj/

我想在#outer 内垂直居中图像我没有图像尺寸,正如您在小提琴上看到的那样,它工作得很好,但是当#outer divs 高度小于图像高度时,比如说 200 它会剪切图像。我想缩小该图像以适应外部 div

【问题讨论】:

  • 你试过溢出:隐藏吗?还是完全让 div 变大了
  • 这个包装器 div 位于某个高度为 600px 的视图 div 内。当高度 900px 的图像进入包装器时变为 900px 并溢出
  • 我认为您无法在纯csshtml 中对此做任何事情,因为无法检测屏幕高度。最好使用 javascript。
  • 当图像的高度较大时,您究竟希望发生什么?
  • @sublime: 更好地回答Linus Caldwell 问题,这样我们就可以帮助您...

标签: css vertical-alignment css-tables


【解决方案1】:

此答案已被截断和编辑以满足 OP 的需要。

使用 jQuery,这是我的建议。 您可以摆脱几个 div,只使用包装器和图像。上面代码的问题是您给外部 div 设置了 300px 的高度。这意味着它永远不会收缩得比这更小。我还编写了一个小脚本来说明窗口大小

http://jsfiddle.net/fgTtj/40/

我已经这样设置了你的 HTML:

<div class="wrapper">
    <img src='http://s13.postimg.org/b7hmfvhyv/css.jpg'></img>
</div>

CSS 像这样:

.wrapper {
    position:relative;
    width:100%;
    height:300px;
    background-color:blue;
    overflow:hidden;
}

.wrapper img{
    position:absolute;
    max-width:100%;
    max-height:100%;
}

新的 jQuery 看起来像这样:

function center(){
    var imgW = $('img').width();
    var imgH = $('img').height();
    var half_imgW = imgW / 2;
    var half_imgH = imgH / 2;
    $('img').css({
        left: "50%",
        top: "50%",
        margin: "-" + half_imgH + "px 0 0 -" + half_imgW + "px"
    });
}

$(document).ready(function(){
    var wrapper_Height = $('.wrapper').height();
    center();
    $(window).resize(function(){
        console.log(wrapper_Height);
        var winH = $(this).height();
        var wrapH = $('.wrapper').height();
        if(winH <= wrapH){
            $('.wrapper').height(winH);    
        } else {
            if(wrapH <= wrapper_Height){
                $('.wrapper').height(winH); 
            }
        }
        center();
    });    
});

您可以在任何方向调整此窗口的大小,图像将保持居中而不被截断。目前这只适用于一个窗口,因此您必须调整脚本以适应更多。

这个很棒的一点是它几乎可以在所有浏览器中运行,而display:table-cell 在旧版浏览器(例如 IE6 和我认为是 IE7)中无法运行。

【讨论】:

  • 如你所说,这无济于事。我想显示完整的图像而不将其切断或滚动查看。我只想将包装器 div 完全放在掩码内
  • 如果你愿意的话,使用 jQuery 可能会更简单?
【解决方案2】:

如果您不希望图像扩展视口高度,请设置max-height

#cell img { max-height: 600px; }

【讨论】:

  • 这无济于事,因为视口为 600 像素,并且当 #wrapper 变为 900 时它不会改变。我确实在包装器上尝试了 min-height:600 像素,但这也不起作用。我认为这与表格显示有关
  • 好吧,我不明白。那么究竟应该发生什么?您希望图像的最大高度为 600 像素吗?
  • 是的,我希望包装器 div 的最大高度为 600 像素。这意味着其中的图像也将变为 600 像素。
  • @sublime:您必须下定决心并清楚地说明您要做什么。在发布问题之前,最好知道您需要什么。它将使所有人免于混乱。祝你好运...
  • 在我的答案更新中设置max-height 是否有效?
【解决方案3】:

display:table 的意义何在?您可以将其留空(或使用display:inline-block),然后添加overflow 属性。

#wrapper{
  overflow:hidden;
  }

如果您希望能够滚动查看图像的其余部分:

 #wrapper{
  overflow:scroll;
   }

【讨论】:

猜你喜欢
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 1970-01-01
  • 2013-05-21
  • 2012-07-30
  • 1970-01-01
  • 2017-07-29
相关资源
最近更新 更多