CSS中的各種置中方法總結

來源:互聯網
上載者:User

標籤:

CSS中的置中可分為水平置中垂直置中。水平置中分為行內元素置中塊狀元素置中兩種情況,而塊狀元素又分為定寬塊狀元素置中不定寬塊狀元素置中。下面詳細介紹這幾種情況。

 

一、水平置中

1、行內元素置中

 顧名思義,行內元素置中是只針對行內元素的,比如文本(text)、圖片(img)、按鈕等行內元素,可通過給父元素設定 text-align:center 來實現。另外,如果塊狀元素屬性display 被設定為inline時,也是可以使用這種方法。但有個首要條件是子項目必須沒有被float影響,否則一切都是無用功。

.div1{        text-align:center;    }<div class="div1">Hello world</div>

 

2、塊狀元素置中

(1)、定寬塊狀元素置中

 滿足定寬(塊狀元素的寬度width為固定值)和塊狀兩個條件的元素可以通過設定“左右margin”值為“auto”來實現置中。

.div1{
     width:200px;
     border:1px solid red; margin:0 auto; }<div class="div1">Hello world</div>

 

(2)、不定寬塊狀元素置中

在實際工作中我們會遇到需要為“不定寬度的塊狀元素”設定置中,比如網頁上的分頁導航,因為分頁的數量是不確定的,所以我們不能通過設定寬度來限制它的彈性。(不定寬塊狀元素:塊狀元素的寬度width不固定。)

有三種方法可以對不定寬塊狀元素進行置中:

方法1:

將要顯示的元素加入到 table 標籤當中,然後為 table 標籤設定“左右margin”值為“auto”來實現置中; 或使用 display : table;然後設該元素“左右margin”值為“auto”來實現置中。後面的display:table; 方法會更簡潔。

為什麼加入table標籤? 是利用table標籤的長度自適應性---即不定義其長度也不預設父元素body的長度(table其長度根據其內文本長度決定),因此可以看做一個定寬度塊元素,然後再利用定寬度塊狀置中的margin的方法,使其水平置中。

如下例子:

table{    margin:0 auto;}<div><table>  <tbody>    <tr><td>    <ul>        <li>Hello world</li>        <li>Hello world</li>    </ul>    </td></tr>  </tbody></table></div>
.wrap{    background:#ccc;    display:table;    margin:0 auto;}<div class="wrap">  Hello world  </div>

方法2:

改變區塊層級元素的 display 為 inline 類型(設定為 行內元素 顯示),然後使用 text-align:center 來實現置中效果。

這種方法相比第一種方法的優勢是不用增加無語義標籤,但也存在著一些問題:它將塊狀元素的 display 類型改為 inline,變成了行內元素,所以少了一些功能,比如設定長度值(變成inline-block就可以設定寬高)。

.container{    text-align:center; }.container ul{    list-style:none;    margin:0;    padding:0;    display:inline;  //怎麼這一句用不用都是一樣效果的? }<div class="container">    <ul>        <li>Hello world</li>        <li>Hello world</li>    </ul></div>

方法3:

 通過給父元素設定 float,然後給父元素設定 position:relative 和 left:50%,子項目設定 position:relative 和 left: -50% 來實現水平置中。

.wrap{    float:left;    position:relative;    left:50%;    clear:both;}.wrap-center{    background:#ccc;    position:relative;    left:-50%;}<div class="wrap">    <div class="wrap-center">Hello world</div></div>

 先設定父元素wrap清除浮動,然後左浮動。定位讓wrap向右位移50%。然後定義子項目相對於父元素向左位移50%。脫離父元素。加個邊框就可以明白一些了。另外用絕對位置也是可以的。

 

二、垂直置中

 垂直置中可分為父元素高度確定的單行文本,以及父元素高度確定的多行文本。

1、父元素高度確定的單行文本的豎直置中的方法是通過設定父元素的 height 和 line-height 高度一致來實現的。(height: 該元素的高度,line-height: 顧名思義,行高,指在文本中,行與行之間的 基準間的距離 )。

.wrap h2{    margin:0;    height:100px;    line-height:100px;    background:#ccc;}<div class="wrap">    <h2>Hello world</h2></div>

2、父元素高度確定的多行文本

有兩種方法:

方法1:

使用插入 table  (包括tbody、tr、td)標籤,同時設定 vertical-align:middle。

.wrap{    height:300px;    background:#ccc;    vertical-align:middle;   /* td 標籤預設情況下就預設設定了 vertical-align 為 middle,可以不需要顯式地設定 */}<table>    <tbody>        <tr>            <td class="wrap">                <div>                    <p>Hello world</p>                    <p>Hello world</p>                    <p>Hello world</p>                </div>            </td>        </tr>    </tbody></table>
.wrap{    background:#ccc;    display:table;    vertical-align:middle;}<div class="wrap">    <p>Hello world</p>    <p>Hello world</p>    <p>Hello world</p></div>

方法2:

設定區塊層級元素的 display 為 table-cell(設定為表格單元顯示),啟用 vertical-align 屬性。但這種方法相容性比較差, IE6、7 並不支援這個樣式。

.wrap{    height:300px;    background:#ccc;        display:table-cell;/*IE8以上及Chrome、Firefox*/    vertical-align:middle;/*IE8以上及Chrome、Firefox*/}<div class="wrap">    <p>Hello world</p>    <p>Hello world</p>    <p>Hello world</p></div>

 註:主要參考慕課網教程

CSS中的各種置中方法總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.