垂直对齐复杂的多个div站点布局

时间:2011-06-26 00:07:42

标签: center css

行。这是交易。我在这个网站上阅读了很多文章,其他人关于垂直居中,但它们似乎都指的是以单个div为中心而我无法将其正确应用于更复杂的布局。我正在一个有标题,导航栏,内容区域,侧边栏和页脚的网站上工作。可以在这里看到设计的模型:mockup

由于在容器div和内容&中使用了0px文本技巧,我已经很好地将所有div组合在一起了。侧边栏使用display:inline-block坐在一起。标题,导航栏和页脚使用margin-left水平居中:auto&保证金权:汽车。这很好地使整个站点水平居中,但我无法弄清楚如何在不破坏设计的情况下将垂直居中应用于整个站点。这不是流畅的布局,所有div都有固定的像素大小,内容非常适合。似乎应该有一些方法来使用绝对或相对定位和百分比来垂直居中,但我无法弄清楚如何去做。附加了模型的代码。谢谢!

<style type="text/css">
<!--
DIV.container {
    position:relative;
    height:100%;
    width:100%;
    display:table;
    text-align:center;
    font-size:0px;
    overflow:hidden;
}
#header {
    width:650px;
    height:87px;
    z-index:1;
    background-color:#C90;
    vertical-align:middle;
    margin-left:auto;
    margin-right:auto;
    font-size:12px;
}
#navbar {
    width:650px;
    height:32px;
    z-index:2;
    background-color:#0FF;
    vertical-align:middle;
    font-size:12px;
    margin-left:auto;
    margin-right:auto;
}
#content {
    width:500px;
    height:265px;
    z-index:3;
    background-color:#33F;
    display:inline-block;
    vertical-align:middle;
    font-size:12px;
}
#sidebar {
    width:150px;
    height:265px;
    z-index:4;
    background-color:#999;
    display:inline-block;
    vertical-align:middle;
    font-size:12px;
}
#footer {
    width:650px;
    height:58px;
    z-index:5;
    background-color:#F69;
    vertical-align:middle;
    font-size:12px;
    margin-left:auto;
    margin-right:auto;
}
-->
</style>
</head>

<body>
<div class="container">
<div id="header">Header</div>
<div id="navbar">Navbar</div>
<div id="content">Content</div>
<div id="sidebar">Sidebar</div>
<div id="footer">Footer</div></div>
</body>
</html>

3 个答案:

答案 0 :(得分:2)

您需要在整个部件周围放置一个容器,使其垂直居中,您需要知道高度。然后你给它一个距离顶部50%的absolute位置并给它一个半高度的margin-top

因此,如果您的容器高400px,您将使用以下css:

#container {
    position:    absolute;
    top:         50%;
    margin-top: -200px;
}

在你的情况下你的'容器'是442px高,所以改变这个css:

DIV.container {
    position:relative;
    height:100%;
    width:100%;
    display:table;
    text-align:center;
    font-size:0px;
    overflow:hidden;
}

对此:

DIV.container {
    position:absolute;
    top:50%;
    margin-top:-221px;
    width:100%;
    display:table;
    text-align:center;
    font-size:0px;
    overflow:hidden;
}

答案 1 :(得分:1)

您的样式表可以更清晰/更小。

请参阅this demo fiddle

如果您在浏览器窗口变小时不想要滚动条,则将overflow: hidden添加到正文,请参阅this fiddle。但根据可用性,这不是一个提示。

答案 2 :(得分:0)

要使其动态化,请使用Javascript / jQuery查找窗口的高度,并调整DIV.container的margin-top,如Kokos所示。