CSS居中算是一個比較基礎的問題,在實際運用中,須要考慮到的通常是兩種狀況,一種是主要是表現爲文字,圖片等行內元素的居中,一種是指 div 等塊級標籤元素的居中。
水平居中html
一、行內元素
行內元素(主要是表現爲文字,圖片等行內元素),經過在父級元素設置 text-align:center 使子級行內元素居中。
二、定寬塊級元素
爲定寬塊級元素設置:
1 margin-left:auto;
2 margin-right:auto;
三、不定寬塊級元素
不定寬塊級元素居中有三種方法:
- 加入 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+均可以表現正常。
注:
一、_display:inline 實際上是觸發IE6中塊級元素表現出 inline-block 的效果,_zoom:1 觸發IE6中 hasLayout 效果,這裏其餘瀏覽器不須要觸發 inline-block 效果,緣由不是很清楚;
二、其中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 }
---------------------------------------------------------吃完栗子---------------------------------------------------------
垂直居中
垂直居中主要是行內元素的居中比較麻煩,特別是多行文本的居中。
一、父元素高度肯定的行內元素(單行文本),
經過設置父元素的 height 和 line-height 高度一致來實現的。
二、高度固定的
塊級元素垂直居中
高度固定的
塊級元素垂直居中有三種方法:
- 垂直居中元素設置 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 爲垂直居中元素高度的一半,高度爲父元素高度的一半,爲了兼容IE六、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;/*兼容IE六、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+都可以居中:
---------------------------------------------------------吃完栗子---------------------------------------------------------
三、父元素高度肯定的
行內元素(
多行文本、圖片)、塊狀元素
父元素高度肯定的
行內元素(
多行文本、圖片)、塊狀元素垂直居中有兩種方法
:
- 加入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+表現以下:
注:
一、由於 td 標籤默認狀況下就默認設置了 vertical-align 爲 middle,因此咱們不須要顯式地設置了;
二、將 div 換爲 img 效果一致。
---------------------------------------------------------吃完栗子---------------------------------------------------------
方法二:
在 chrome、Firefox 、opera、IE8 及以上的瀏覽器下能夠設置塊級元素的 display 爲 table-cell,激活 vertical-align 屬性,但注意 IE六、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 則沒法居中。
---------------------------------------------------------吃完栗子---------------------------------------------------------
垂直居中的方法比較多,至於用哪一種方法仍是要具體看狀況,並且我相信還有更多的方法,歡迎你們補充。
本文來源:JuFoFuchrome
本文地址:http://www.cnblogs.com/JuFoFu/p/5140302.html瀏覽器
水平有限,錯誤歡迎指正。原創博文,轉載請註明出處。