父元素高度确定的文本分为:单行文本和多行文本。
1、如何设置单行文本垂直居中呢?
父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的 height 和 line-height 高度一致来实现的。(height: 该元素的高度,line-height: 顾名思义,行高(行间距),指在文本中,行与行之间的基线间的距离 )。
line-height 与 font-size 的计算值之差,在 CSS 中成为“行间距”。分为两半,分别加到一个文本行内容的顶部和底部。如下图所示:
使用单行文本的缺点:当文字内容的长度大于块的宽时,就有内容脱离了块。
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title></title>
5 <meta charset="utf-8">
6 <style>
7 .wrap h2{
8 margin:0;
9 height:100px;
10 line-height:100px;
11 background:#ccc;
12 }
13 </style>
14 </head>
15 <body>
16 <div class="wrap">
17 <h2>hi,imooc!</h2>
18 </div>
19 </body>
20 </html>
结果如下:
2、如何设置多行文本垂直居中呢?
方法一:使用插入 table (包括tbody、tr、td)标签,同时设置 vertical-align:middle。
css 中有一个用于竖直居中的属性 vertical-align,在父元素设置此样式时,会对inline-block类型的子元素都有用。
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title></title> 5 <meta charset="utf-8"> 6 <style> 7 .wrap{height:300px;background:#ccc} 8 </style> 9 </head> 10 <body> 11 <table><tbody><tr><td class="wrap"> 12 <div> 13 <p>看我是否可以居中。</p> 14 <p>看我是否可以居中。</p> 15 <p>看我是否可以居中。</p> 16 <p>看我是否可以居中。</p> 17 <p>看我是否可以居中。</p> 18 </div> 19 </td></tr></tbody></table> 20 </body> 21 </html>
结果如下:
注: td 标签默认情况下就默认设置了 vertical-align 为 middle,所以我们不需要显式地设置了。
方法二:在 chrome、firefox 及 IE8 以上的浏览器下可以设置块级元素的 display 为 table-cell(设置为表格单元显示),激活 vertical-align属性,但注意 IE6、7 并不支持这个样式, 兼容性比较差。
注:这种方法的好处是不用添加多余的无意义的标签,但缺点也很明显,它的兼容性不是很好,不兼容 IE6、7而且这样修改display的block变成了table-cell,破坏了原有的块状元素的性质。
HTML代码:
<div class="container"> <div> <p>看我是否可以居中。</p> <p>看我是否可以居中。</p> <p>看我是否可以居中。</p> </div> </div>
CSS代码:
<style> .container{ height:300px; background:#ccc; display:table-cell;/*IE8以上及Chrome、Firefox*/ vertical-align:middle;/*IE8以上及Chrome、Firefox*/ } </style>