我的html看起来像这样:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<!--[if lte IE 8]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<header>
<h1>Some title thing, who knows</h1>
<nav>
<ul>
<li><a href="one/">One</a></li>
<li><a href="two/">Two</a></li>
<li><a href="three/">Three</a></li>
</ul>
</nav>
</header>
</body>
</html>
如果我给header
一个自动边距和一个宽度,它会水平居中。什么是确保它垂直居中的最不可怕的方法呢?
我知道以下文章提供了对该主题的一些讨论:
答案 0 :(得分:12)
由于此问题被标记为CSS3
,因此这是使用CSS3的“flexbox”的“最不可怕”的解决方案。不幸的是,只有Safari,Chrome和Firefox的最新版本支持它。
html, body {
margin:0;
padding:0;
height:100%;
background:#eee;
}
header {
width:30em;
background:#fff;
}
body {
display:box;
box-pack:center;
box-align:center;
box-orient:horizontal;
}
更完整的演示can be found here。
答案 1 :(得分:4)
如果你不知道我经常使用的唯一方式header
的高度,如果做得好,需要额外的HTML,你可以做到很难。
通过将标题设为vertical-align: middle
table-cell
html{
height: 100%;
}
body {
display: table;
height: 100%;
margin: 0 auto;
padding: 0;
}
header {
display: table-cell;
vertical-align: middle;
}
请注意,我在html节点上设置了100%的高度,据我所知,它实际上不是正确的css,它应该在主体上,标题应该在封装div中display: table
{{3 }}
答案 2 :(得分:3)
不幸的是,仍然没有优雅的垂直对齐,只有黑客。
答案 3 :(得分:2)
我不知道是否有最好的方法,但有许多不同的方法(取决于你的情况),并且很多都经过深入讨论in this article。
答案 4 :(得分:1)
通常当我需要垂直居中时,我使用一对内联块元素。您有一个元素是容器的整个高度,第二个元素只是要居中的内容的高度。两者都是display:inline-block;vertical-align:middle
。
我喜欢使用b标签,因为它们没有语义意义而且很小:
<style>
.mycontainer {text-align:center;}
b.vcenter {display:inline-block;height:100%;width:1px;vertical-align:middle;}
b.vcenter+b {display:inline-block;vertical-align:middle;}
</style>
<div class="mycontainer">
<b class="vcenter"></b><b>This is my centered content<br>It makes me happy!</b>
</div>
请注意,由于缺少内联块和兄弟选择器(+),这个特定的代码示例在IE7中不起作用,但是使用IE7将处理的更复杂的代码可以完成相同的技术。
答案 5 :(得分:0)
我通常不会垂直居中,但指定一个小的上边距,如20px。我们并不总是对终端用户的设备有足够的了解,无法对他们正在查看该网站的平台的方便或可用做出假设。