CSS水平垂直居中的方法
原文链接:http://caibaojian.com/370.html
水平垂直居中,特别是使用在列表的时候经常会用到的,以前有需求的时候我也做过类似的代码,是使用display:table-cell,mg12的博客那个相关文章的列表好像就是使用这个代码来的,之前我也是参考他来的。今天重新整理一下,并结合前人的辛劳,总结一下以作备份。
水平居中,如果知道元素的宽度,则可以使用
.cell{width:300px; margin:0 auto; text-align:center;}
如果是内联元素居中,那么直接用text-align:center
如果未知元素宽度,并且非内联元素,那么下面给出的几种方案也适合你。
第一种:相对定位法
原理是父类浮动的同时向左left:50%,而子类则向左浮动的同时left:50%;
<style type="text/css"> .centerlist {position:relative;left:50%;float:left;} .centerlist li {position:relative;right:50%; z-index:2;float:left} </style> <ul class="centerlist"> <li><a href="#">Lorem ipsum dolor.</a></li> <li><a href="#">Lorem ipsum dolor.</a></li> <li><a href="#">Lorem ipsum dolor.</a></li> <li><a href="#">Lorem ipsum dolor.</a></li> <li><a href="#">Lorem ipsum dolor.</a></li> <li><a href="#">Lorem ipsum dolor.</a></li> <li><a href="#">Lorem ipsum dolor.</a></li> <li><a href="#">Lorem ipsum dolor.</a></li> <li><a href="#">Lorem ipsum dolor.</a></li> </ul>
第二种:强制内联
<style type="text/css"> .centerlist_inline{text-align: center;} .centerlist_inline li{display: inline;} </style> <ul class="centerlist_inline"> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> </ul>
局限:块级元素改为内联元素,那么高度、宽度、margin-top,margin-bottom, padding-top,padding-bottom,等都不能用。
第三种: 使用inline-block
如果看过博主之前写的inline-block替换float可能会更清楚这个属性的好处。
<style type="text/css"> .centerlist_inline-block{text-align: center; font-size:0; -letter-spacing:-1px;} .centerlist_inline-block li{display: inline-block; *display: inline; *zoom:1; font-size:12px; letter-spacing:normal; word-spacing:normal;} </style> <ul> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> </ul>
第四种:table-cell
<style type="text/css"> .centerlist_table-cell{display:table; margin:0 auto;} .centerlist_table-cell{display:table-cell;} </style> <ul class="centerlist_table-cell"> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> <li><a href="">lorem1</a></li> </ul>
缺点是不兼容ie6,ie7
推荐使用inline-block这种水平居中的方法,既保留了块级元素特性,而且完美兼容。就是代码有点多。另外你还可以使用表格的方式来水平居中。
说完了水平居中,下面说垂直居中。
如果元素是内联元素,并且只有一行,则我们可以通过line-height来设置与其高度同样大小,则实现了垂直居中了。
如果未知元素高度,那就要用下面方法了!
原文链接:http://caibaojian.com/css-vertical-middle.html
html代码:
<div class="middle-box"> <div class="middle-inner"> <p><span class="suc-tip">前端开发博客,专注前端开发和web教程</span><br/><span class="suc-link">快捷入口:<a href="http://caibaojian.com">http://caibaojian.com</a></span></p> <p style="display:none;"><span class="suc-tip">5年的老博客,一直致力于WEB开发</span></p> </div> </div>
第一种:display:table的方法
.middle-box{display: table; height: 300px;} .middle-inner{display: table-cell; vertical-align:middle; text-align:center;} /* 缺点:不兼容ie6、ie7. */
怎么兼容呢?当然是用另外一种相对定位和绝对定位的方式。
<!--[if lt IE 8]> <style> .middle-inner { position: absolute; top:50%;} .middle-inner p {position: relative; top: -50%} </style> <![endif]-->
可以使用IE的特有的条件语法,不过我习惯用ie hack来写。下面这个的代码实现了水平垂直多行代码(支持一行)居中对齐。目前测试IE、chrome和Firefox均兼容。代码如下:
.middle-box{display: table; height: 300px; border:1px solid #ff0000; width:400px; margin:0 auto; position:relative;} .middle-inner{display: table-cell; vertical-align:middle; *position:absolute; *top:50%; *left:50%; width:100%; text-align:center;} .middle-inner p{position:relative; *top:-50%; *left:-50%;}
遇到居中问题,这三句CSS就够用了。
第二种方法:增加一个空白标签
HTML代码:
<div class="middle-box"> <p><span class="suc-tip">前端开发博客,专注前端开发和web教程</span><br/><span class="suc-link">快捷入口:<a href="http://caibaojian.com">http://caibaojian.com</a></span></p> <i class="visible"></i> <p style="display:none;"><span class="suc-tip">5年的老博客,一直致力于WEB开发</span></p> </div>
CSS代码:
.middle-box{height:300px; border: 1px solid #f00; width: 400px; margin: 0 auto; text-align: center; } .middle-box p{vertical-align: middle; display: inline-block; *display: inline; *zoom: 1;} .visible{height: 100%; vertical-align: middle; width: 0; display: inline-block;}