我正在寻找最有效(或优雅)的方式来垂直和水平地居中可变高度的内容。我想出了这个:http ://cssdeck.com/t/2veysdkg/16 ,它使用 css 表格将主要内容垂直居中。
我对编写这段特定代码的要求是:
- 必须能够垂直和水平居中可变和固定宽度的内容
- 居中的内容必须在正常的文档流中(所以没有重叠)
- 粘性页脚和普通页眉,均为 100% 宽度
- 尽可能少的 hack、丑陋的代码或非语义 html
- 我不关心对 IE6、IE7 的支持(我将为它们使用不同的样式表)
display:table-row
奇怪的是,只有当 header 和 footer 设置为, body-tag设置为 时,才满足上述要求display:table
。这很奇怪,因为据我了解,当缺少父表元素时,css 会生成匿名表元素。所以display:table-cell
应该在没有所有周围元素的情况下工作,但我无法让它工作。
如果由我决定,我宁愿不要弄乱 body 标签的显示模式,并将页眉和页脚保留在display:block
. 但我无法让它发挥作用。有谁知道为什么这不起作用,以及如何在不使用display:table
and的情况下满足上述要求display:table-row
?
对于那些不想访问 cssdeck 来查看我的源代码的人,我会在这里发布:
HTML
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Vertical Centering</title>
</head>
<body>
<div id="header">header</div>
<div id="vertical">
<div id="horizontal">content</div>
</div>
<div id="footer">footer</div>
</body>
</html>
CSS
body, html {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
body {
display: table;
}
#header {
display: table-row;
height: 2em;
background: gray;
}
#vertical {
display: table-cell;
vertical-align: middle;
width: 100%;
height: 100%;
}
#horizontal {
height: 500px;
width: 500px;
margin: auto;
background: gray;
}
#footer {
height: 2em;
display: table-row;
width: 100%;
background: gray;
}