垂直居中(Vertical-Align)
垂直居中包括单行文本居中、单元格(td)内容居中、块级元素居中。由于单元格的display属性为table-cell,且浏览器默认vertical-align:middle,所以就是默认垂直居中,不做考虑。要注意的就是vertical-align属性的含义是设置内联元素在行框(一行)内的垂直对齐方式,对于display:table-cell的元素也适用,但是IE8+才支持display:table-cell设置,于是就有了各种跨浏览器垂直对齐的方法。
单行文本
此种情况最简单,使用line-height来控制元素的高度即可,兼容IE6+及其他现代浏览器。
HTML:
<div>
<div class="child">Text here</div>
</div>
CSS:
.child {
line-height:50px;
}
而此种方法对于display为inline或inline-block的元素也适用,只不过元素要加上vertical-align:middle,而且不兼容IE6。
HTML:
<div>
<div class="child">
<img src="images/1024.jpg" alt="" />
</div>
</div>
CSS:
.child {
line-height:300px;
}
img {
width:200px;
vertical-align:middle;
}
块级元素
块级元素的垂直对齐方法有很多种,但有些方法必须要求知道和统一块级元素的高度,有些不需要但是跨浏览器支持不好,最后还得需要针对个别浏览器(IE6、7)单独设置。
元素高度预知:
(两种方法兼容IE6+,Chrome,Firefox,Safari,Opera)
设置相等的内边距或外边距
HTML:
<div class="parent">
<div class="child">Div here</div>
</div>
CSS:
.parent {
padding:5% 0;
}
.child {
height:50px;
}
绝对定位和负外边距
HTML:
<div class="parent">
<div class="child">Div here</div>
</div>
CSS:
.parent {
position:relative;
height:100px;
}
.child {
position:absolute;
top:50%;
height:50px;
margin-top:-25px;
}
元素高度不可预知:
table-cell方法
(不兼容IE6-7)
HTML:
<div>
<div class="child">Div here</div>
</div>
CSS:
.parent {
display: table;
}
.child {
display: table-cell;
height: 200px;
vertical-align:middle;
}
兼容所有现在浏览器的方法
DEMO: multi-lined text vertical align
HTML:
<div>
<div>
<p>To look best, text should really be centered inside this bubble both vertically and horizontally.</p>
</div>
</div>
CSS:
.area {
display: table;
width: 200px;
height: 150px;
background: #eee;
}
.bubble {
display: table-cell;
vertical-align: middle;
}
.bubble p {
border: 1px solid red;
}
兼容IE6-7,利用条件注释单独设置,而且要添加一个多余的div标签,下面针对IE6-7的代码对于其他现代浏览器并不适用。
HTML:
<div>
<div>
<div>
<p>To look best, text should really be centered inside this bubble both vertically and horizontally.</p>
</div>
</div>
</div>
<!--[if lt IE 8]>
<style type="text/css">
.bubble {
position:relative;
}
.bubble div {
position:absolute;
top: 50%;
width:100%;
background:#aaa;
}
.bubble div p {
position:relative;
top:-50%;
}
</style>
<![endif]-->