水平和水平垂直居中的响应图像

时间:2014-06-18 15:54:19

标签: html css html5 css3 alignment

我试图在一个可变高度和宽度的div内水平和垂直居中。 到目前为止,这么好。(见下面的jsfiddle链接)

现在抓住的是图像也应该响应并调整容器的高度和/或宽度是否小于图像的高度或宽度。

经过研究,经历了所有不同的解决方案"在那里,摆弄一个解决方案,我无法找到完美的解决方案,但两个接近:

1。)第一个可以完成我需要的一切,除非窗口宽度小于图像宽度,图像不再水平对齐:

http://jsfiddle.net/me2loveit2/ejbLp/8/

HTML

<div class="overlay">
    <div class="helper"></div>
    <img src="http://dummyimage.com/550x480/000/fff?text=H/V Centered and height/width variable">
</div>

CSS

.helper {
    height:50%;
    width:100%;
    margin-bottom:-240px;
    min-height: 240px;
}
.overlay {
    width: 100%;
    height: 100%;
    position: fixed;
    top: 0px;
    left: 0px;
    cursor: pointer;
    background-color: rgba(0, 0, 0, 0.5);
}
img {
    margin: 0 auto;
    max-width: 100%;
    max-height: 100%;
    display: block;
}

2。)第二个示例使所有内容保持对齐,但当高度小于图像高度时,图像不会缩小:

http://jsfiddle.net/me2loveit2/ejbLp/9/

HTML

<div id="outer">
    <div id="container">
        <img src="http://dummyimage.com/550x480/000/fff?text=H/V Centered and height/width variable">
    </div>
</div>

CSS

#outer {
    height:100%;
    width:100%;
    display:table;
    position:fixed;
    top:0px;
    left:0px;
    background-color: rgba(0, 0, 0, 0.5);
}
#container {
    vertical-align:middle;
    display:table-cell;
    max-width: 100%;
    max-height: 100%;
}
img {
    margin: 0 auto;
    max-width: 100%;
    max-height: 100%;
    display:block;
}

1 个答案:

答案 0 :(得分:1)

我过去曾试过这个,而且我提出的唯一非JS解决方案(顺便说一句是frowned upon)是这样的:

html, body {
    margin: 0;
    padding: 0;
    width: 100%;
    height: 100%;
}

body {
    display: table;
}

.container {
    display: table-cell;
    vertical-align: middle;
    border: 1px solid #f00;
}

.container > div {
    width: 100%;
    height: 100%;
    margin: 0 auto;
    border: 1px solid #00f;
    max-width: 550px;
    max-height: 480px;
    background: url("http://dummyimage.com/550x480/000/fff?text=H/V Centered and height/width variable") 50% 50% no-repeat;
    background-size: contain;
}

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

http://jsfiddle.net/pYzBf/1/

div 的背景颜色设置为黑色,以查看没有图像边缘的缩放。我使用了这些尺寸,因此您可以通过调整框架来测试它。