CSS:水平居中與垂直居中

CSS居中算是一個比較基礎的問題,在實際運用中,須要考慮到的通常是兩種狀況,一種是主要是表現爲文字,圖片等行內元素的居中,一種是指 div 等塊級標籤元素的居中。

水平居中html

一、行內元素
行內元素(主要是表現爲文字,圖片等行內元素),經過在父級元素設置 text-align:center 使子級行內元素居中。
 
二、定寬塊級元素
爲定寬塊級元素設置:
1 margin-left:auto;
2 margin-right:auto;
 
三、不定寬塊級元素
 不定寬塊級元素居中有三種方法:
  1. 加入 table 標籤
  2. 設置 display:inline 方法
  3. 設置 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 高度一致來實現的。
 
二、高度固定的 塊級元素垂直居中
高度固定的 塊級元素垂直居中有三種方法:
  1. 垂直居中元素設置 absolute,利用 absolute 元素居中的方法來居中;
  2. 垂直居中元素設置 absolute,經過 top 和 margin-top 屬性來調整;
  3. 建立浮動元素;
方法一:
其實這個方法是 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+都可以居中:
---------------------------------------------------------吃完栗子---------------------------------------------------------
 
三、父元素高度肯定的 行內元素多行文本、圖片)、塊狀元素
父元素高度肯定的 行內元素多行文本、圖片)、塊狀元素垂直居中有兩種方法
  1. 加入table標籤;
  2. 設置 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瀏覽器

 

 水平有限,錯誤歡迎指正。原創博文,轉載請註明出處。
相關文章
相關標籤/搜索