我正在尝试将div放在文档中心,它可以水平工作,但不能垂直工作:
width: 950px;
height: 630px;
background: #FFFFFF;
margin: auto;
margin: auto
不应该将它放在任何内容的中心(页面本身,在这种情况下)?我以前有一个解决方法,但我不能让它工作。知道我做错了什么也很好,所以我可以停止这样做。
答案 0 :(得分:5)
margin: auto
不会垂直对齐元素。
如果您必须支持旧浏览器,则必须为div定义固定高度:
div {
position: relative;
top: 50%;
width: 750px;
height: 500px; /* sample. adjust as needed */
margin: -250px auto 0; /* half the height */
}
这是小提琴:http://jsfiddle.net/2qmVX/
如果你不关心IE8及以下,这将允许你保持你的液体高度:
div {
position: relative;
top: 50%;
margin: auto;
transform: translateY(-50%);
/* add prefixed versions... */
}
这是小提琴:http://jsfiddle.net/VMaVM/(请记住:仅限现代浏览器)。
更新:正如@FabrícioMatté所指出的那样,你还必须对html
& body
元素:
html, body {
height: 100%;
}
参见上面的演示。
答案 1 :(得分:3)
正确的垂直居中是CSS3尚未涵盖的内容。
幸运的是,在您的情况下,由于您有一个固定的高度,您可以操纵top
/ left
属性并使用否定margin-top
和margin-left
来获得所需的行为,absolute
定位:
background: #FFFFFF;
width: 950px;
height: 630px;
top: 50%;
left: 50%;
margin: -315px 0 0 -425px; /*top is negative half of height, same for width*/
position: absolute;
请注意,在小于div
的分辨率下,负边距可能会出现意外行为。
使用表格,这是一种稍微晦涩的方式。基本思想是应用于表时vertical-align:middle
CSS属性与旧valign="center"
属性具有相同的效果。所以HTML看起来像这样:
<table class="vcenter"><tr><td>
<div id="myDiv">This is a centered div</div>
</td></tr></table>
CSS:
.vcenter {
vertical-align: middle;
width: 100%;
height: 100%;
}
#myDiv {
background: #FFF;
width: 950px;
height: 630px;
margin: 0 auto;
}
html, body { height: 100%; }
这种方法的优点在于它在IE6及更高版本,Firefox,Chrome,Opera和Safari上进行了完全跨浏览器测试。我没有测试移动浏览器,虽然它应该工作。此外,它没有小分辨率的滚动问题。我在我的一个生产站点中使用这个hack作为居中模态。