CSS居中算是一個比較基礎的問題,在實際運用中,需要考慮到的一般是兩種情況,一種是主要是表現為文字,圖片等行內元素的居中,一種是指 div 等塊級標簽元素的居中。
水平居中
1、行內元素
行內元素(主要是表現為文字,圖片等行內元素),通過在父級元素設置 text-align:center 使子級行內元素居中。
2、定寬塊級元素
為定寬塊級元素設置:
1 margin-left:auto; 2 margin-right:auto;
3、不定寬塊級元素
不定寬塊級元素居中有三種方法:
- 加入 table 標簽
- 設置 display:inline 方法
- 設置 position:relative 和 left:50%
方法一:
將元素用 table 標簽包裹起來,包括 tbody、tr、td,但這種方法為了居中增加了無語義的標簽。
---------------------------------------------------------舉個栗子---------------------------------------------------------
HTML:
1 <div> 2 <table> 3 <tbody> 4 <tr> 5 <td> 6 <ul> 7 <li><a href="#">我是要</a></li> 8 <li><a href="#">居中的</a></li> 9 <li><a href="#">ul標簽</a></li> 10 </ul> 11 </td> 12 </tr> 13 </tbody> 14 </table> 15 </div>
CSS:
1 table{ 2 margin:0 auto; 3 } 4 ul{list-style:none;margin:0;padding:0;} 5 li{float:left;margin-right:8px;}
現代瀏覽器表現正常:


IE7有時候會出現問題:


---------------------------------------------------------吃完栗子---------------------------------------------------------
方法二:
設置為 inline 行內元素后沿用行內元素居中的方法,這種方法改變了元素的 display 樣式。
---------------------------------------------------------舉個栗子---------------------------------------------------------
HTML:
1 <div> 2 <ul> 3 <li><a href="#">我是要</a></li> 4 <li><a href="#">居中的</a></li> 5 <li><a href="#">ul標簽</a></li> 6 </ul> 7 </div>
CSS:
1 div{ 2 text-align:center; 3 } 4 ul{list-style:none;margin:0;padding:0;display:inline;} 5 li{margin-right:8px;display:inline;}
各瀏覽器表現正常居中,IE7也沒有出現什么問題。
---------------------------------------------------------吃完栗子---------------------------------------------------------
方法三:
通過給父元素設置 float/display:inline-block(IE7對塊級元素設置 inline-block 支持性不好,需要 hack,即 *display:inline;*zoom:1;),然后給父元素設置 position:relative 和 left:50%,子元素設置 position:relative 和 left:-50% 來實現水平居中。
---------------------------------------------------------舉個栗子---------------------------------------------------------
HTML:
1 <div> 2 <ul> 3 <li><a href="#">我是要</a></li> 4 <li><a href="#">居中的</a></li> 5 <li><a href="#">ul標簽</a></li> 6 </ul> 7 </div>
CSS:
1 div{ 2 display: inline-block; 3 /*兼容IE6,IE7*/ 4 *display: inline; 5 *zoom:1; 6 position:relative; 7 left:50% 8 } 9 ul{ 10 /*兼容IE6*/ 11 _display: inline; 12 _zoom:1; 13 list-style:none; 14 margin:0; 15 padding:0; 16 position:relative; 17 left:-50%; 18 } 19 li{ 20 float:left; 21 margin-right:8px; 22 }
chrome,Firefox,opera,IE6+都可以表現正常。
注:
1、_display:inline 其實是觸發IE6中塊級元素表現出 inline-block 的效果,_zoom:1 觸發IE6中 hasLayout 效果,這里其他瀏覽器不需要觸發 inline-block 效果,原因不是很清楚;
2、其中display:inline-block 也可以替換為 float ,float的主要作用就是產生 inline-block 的效果,這樣代碼會更加簡潔一些,不用考慮太多的兼容問題:
CSS:
1 div{ 2 float: left; 3 position:relative; 4 left:50% 5 } 6 ul{ 7 /*兼容IE6*/ 8 _float:left; 9 list-style:none; 10 margin:0; 11 padding:0; 12 position:relative; 13 left:-50%; 14 } 15 li{ 16 float:left; 17 margin-right:8px; 18 }
---------------------------------------------------------吃完栗子---------------------------------------------------------
垂直居中
垂直居中主要是行內元素的居中比較麻煩,特別是多行文本的居中。
1、父元素高度確定的行內元素(單行文本),
通過設置父元素的 height 和 line-height 高度一致來實現的。
2、高度固定的
塊級元素垂直居中
高度固定的
塊級元素垂直居中有三種方法:
- 垂直居中元素設置 absolute,利用 absolute 元素居中的方法來居中;
- 垂直居中元素設置 absolute,通過 top 和 margin-top 屬性來調整;
- 創建浮動元素;
方法一:
其實這個方法是 absolute 元素居中的方法,父元素設置 position:relative,垂直居中元素設置 position:absolute,當要垂直居中時,設置 top:0;bottom:0,然后為上下 margin 設置 auto,水平居中也是同理。IE6,IE7不支持此種居中方法。
這種方法適用於原本就設置了 position 為 absolute 的元素。
---------------------------------------------------------舉個栗子---------------------------------------------------------
HTML:
1 <div class="wrap"> 2 <div class="container"> 3 <p>我是想要垂直居中的塊級元素。</p> 4 </div> 5 </div>
CSS:
1 .wrap{ 2 width:200px; 3 height: 200px; 4 background:#ccc; 5 position: relative; 6 } 7 .container{ 8 width: 100px; 9 height:100px; 10 background: #00ff00; 11 position:absolute; 12 right: 0; 13 left:0; 14 top:0; 15 bottom:0; 16 margin:auto; 17 }
chrome,Firefox,opera,IE8+表現如下,水平垂直居中:


---------------------------------------------------------吃完栗子---------------------------------------------------------
方法二:
父元素設置 position:relative,需要垂直居中的元素設置:
1 position:absolute; 2 top:50%; 3 height:2Hpx; 4 margin-top:-Hpx;
這里 top改為 bottom,margin-top 改為 margin-bottom 效果一樣,這種方法適用於原本設置了 position 為 absolute 的元素。
---------------------------------------------------------舉個栗子---------------------------------------------------------
HTML:
1 <div class="wrap"> 2 <div class="container"> 3 <p>我是想要垂直居中的塊級元素。</p> 4 </div> 5 </div>
CSS:
1 .wrap{ 2 width:100px; 3 height: 200px; 4 background:#ccc; 5 position: relative; 6 } 7 .container{ 8 position:absolute; 9 top:50%; 10 height:100px; 11 margin-top:-50px; /* 高度的一半 */ 12 background: #00ff00; 13 }
chrome,Firefox,opera,IE6+都能夠居中:


IE6 由於 3px bug表現稍微不同,不過由於這里主要討論垂直居中,所以就不對其作過多留意。
---------------------------------------------------------吃完栗子---------------------------------------------------------
方法三:
在需要垂直居中的元素前創建浮動元素,浮動元素設置 margin-bottom 為垂直居中元素高度的一半,高度為父元素高度的一半,為了兼容IE6、IE7,還需要象征性地設置一下 width。垂直居中元素 清除浮動。但是這個方法創建了無語義的標簽,還要做一些兼容性的處理。
---------------------------------------------------------舉個栗子---------------------------------------------------------
HTML:
1 <div class="wrap"> 2 <div class="floatdiv"></div> 3 <div class="container"> 4 <p>我是想要垂直居中的塊級元素。</p> 5 </div> 6 </div>
CSS:
1 .wrap{ 2 width: 100px; 3 height: 200px; 4 background: #ccc; 5 } 6 .floatdiv { 7 *width: 1px;/*兼容IE6、IE7*/ 8 float:left; 9 height:50%; 10 margin-bottom:-50px; 11 } 12 .container { 13 clear:both; 14 height:100px; 15 position:relative; 16 background: #00ff00; 17 }
chrome,Firefox,opera,IE6+都能夠居中:


---------------------------------------------------------吃完栗子---------------------------------------------------------
3、父元素高度確定的
行內元素(
多行文本、圖片)、塊狀元素
父元素高度確定的
行內元素(
多行文本、圖片)、塊狀元素垂直居中有兩種方法
:
- 加入table標簽;
- 設置 display 為 table-cell,激活 vertical-align 屬性。
方法一:
使用插入 table (包括tbody、tr、td)標簽,同時設置 vertical-align:middle。
---------------------------------------------------------舉個栗子---------------------------------------------------------
HTML:
1 <table> 2 <tbody> 3 <tr> 4 <td class="wrap"> 5 <div> 6 <p>我是想要垂直居中的一段文字。</p> 7 </div> 8 </td> 9 </tr> 10 </tbody> 11 </table>
CSS:
1 .wrap{ 2 width:100px; 3 height:200px; 4 background:#ccc 5 }
chrome,Firefox,opera,IE6+表現如下:


注:
1、因為 td 標簽默認情況下就默認設置了 vertical-align 為 middle,所以我們不需要顯式地設置了;
2、將 div 換為 img 效果一致。
---------------------------------------------------------吃完栗子---------------------------------------------------------
方法二:
在 chrome、Firefox 、opera、IE8 及以上的瀏覽器下可以設置塊級元素的 display 為 table-cell,激活 vertical-align 屬性,但注意 IE6、7 並不支持這個樣式。
---------------------------------------------------------舉個栗子---------------------------------------------------------
HTML:
1 <div> 2 <p>我是想要垂直居中的一段文字。</p> 3 </div>
CSS:
1 div{ 2 width:100px; 3 height:200px; 4 background:#ccc; 5 display:table-cell; 6 vertical-align:middle; 7 }
chrome、Firefox 、opera、IE8 及以上的瀏覽器表現正常,IE6 和 IE7 則無法居中。
---------------------------------------------------------吃完栗子---------------------------------------------------------
垂直居中的方法比較多,至於用哪種方法還是要具體看情況,而且我相信還有更多的方法,歡迎大家補充。
本文來源:JuFoFu
本文地址:http://www.cnblogs.com/JuFoFu/p/5140302.html
水平有限,錯誤歡迎指正。原創博文,轉載請注明出處。