在占满整个视窗的div中,如何垂直居中一个高度不固定的div?

6

我知道这看起来像是一个被问了很多次的问题,但我就是找不到解决那个非常特定情况的方法。

这是我的布局基本线框图:

enter image description here

基本上,我有几个带不同背景的div,它们占据浏览器窗口的100%宽度和100%高度。在每个div内部都有另一个div,它占其父元素50%的宽度,但高度可变,具体取决于其内容。

我希望所有这些div-within-a-div都能垂直对齐。 现在,我已经阅读过将display:table-cell和vertical-align:middle放置在父级上应该可以解决问题,但在这种情况下,它似乎只会把事情搞砸。 :-/

我的代码:

<head>
<style>
     html, body {
            height: 100%;
        }
        body > div {
            width: 100%;
            height: 100%;
            background-size: cover;
        }

        .centered {
            width: 50%;
            margin: 0 auto;
            background: rgba(0,0,0,0.4);
            padding: 50px 0 30px 0;
        }
</style>
</head>
        <body>

            <div id="pic_1">
                    <div class="centered">content</div>
            </div>

            <div id="pic_2">
                    <div class="centered">content</div>
            </div>

            <div id="pic_3">
                    <div class="centered">content</div> 
            </div>  

        </body>

感谢您的帮助!

1个回答

2

将祖先元素设置为display:table; height:100%,并将父元素设置为display:table-cell; vertical-align:middle

有关示例,请参见此处的"方法1"

此外,请注意您的标记不应使用class="centered";请改用语义类名。


谢谢你的回答!当只有一个父元素时,它确实非常有效。但在这种情况下,divs #pic_1、#pic_2和#pic_3似乎以3列布局组合在一起,每个占浏览器宽度的33%。我尝试将它们的宽度设置为100%,但没有效果:它们仍然是3列布局。只是这一次,#pic_1似乎占据了66%的宽度,其他两个共享剩下的部分。:-/ - Tom S.
如果您想要将它们垂直堆叠,则需要三个表格(三个祖先元素),每个表格都具有 height:100% - Phrogz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接