我正在尝试将 div 居中放在文档上,它可以水平工作,但不能垂直工作:
width: 950px;
height: 630px;
background: #FFFFFF;
margin: auto;
不应该margin: auto
把它放在它所在的任何地方(在这种情况下是页面本身)的中心吗?我曾经有一个解决方法,但我无法让它工作。知道我做错了什么也很好,所以我可以停止这样做。
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
元素应用 100% 的高度:
html, body {
height: 100%;
}
请参阅上面的演示。
正确的垂直居中是 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
.
这是使用表格的稍微更hackish的方式。基本思想是CSS 属性在应用于表格时与旧属性vertical-align:middle
具有相同的效果。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 用于居中模式。