CSS之垂直居中

這些天忙完了一些項目后,終于有時間來總結一下了。自己就把做項目過程中的體會和理解到的一些東西和大家分享一下。有錯請指正!!


在css中,元素居中顯示,是基礎也是一個小難點。我們經(jīng)常不知為何總是不能把元素放在我們想放的地方?,F(xiàn)在咱們就來總結一下一些常見的居中。至少能讓我們解決平時開發(fā)的問題。

居中分為三種:

  • 水平居中
  • 垂直居中
  • 水平垂直同時居中

我們一個一個來看,一個一個理解,解決。

1.水平居中

先來一段html代碼:

<div class="parent">
    <div class="child">
        <p>測試文本 </p>    
    </div>
</div>   

然后css文件中有兩種處理方法

.parent
{
    text-align: center;
}

或者

.child
{
    width: 100px;
    margin: 0 auto;
}

這兩種方法都可以讓元素水平居中顯示。但是請注意,一個是設置的parent一個是設置的child。那他們的區(qū)別或者說優(yōu)劣如何呢?
我的理解是:

  • 第一種會讓該元素內部的子元素都居中顯示,有時這并不是我們想要的結果。
  • 第二種是必須要設置寬度,有的同學沒有設置寬度會發(fā)現(xiàn)margin 0 auto 不起作用。其實并非這樣。只是他的默認寬度往往是繼承父元素的寬度。所以看不到效果。

2.垂直居中

html代碼

   <div class="parent">
    <div class="child">
        <p>測試文本  </p>     
    </div>
   </div>   

css文件處理方法:

.parent
{
    line-height:200px;
}

或者

. parent
{
    display: table;
    height: 200px;
}
. child
{
    display: table-cell;
    vertical-align: middle;
}

我們依舊可以看到,第一種只設置了parent元素,第二種設置了parent和child
我們可以這樣理解這兩種方法:

  • 第一種可以看做就是把這個div設置成一行。由于在每一行中。內部的元素都是默認垂直居中,所以這樣就直接達到了效果。
  • 第二種把parent元素display設置成塊級別的表格(table),然后再把要居中的子元素display設為表格中的一塊(table-cell)。這樣再設置這個table-cell的vertical-align: middle;假設你直接設置一個高度,再設置vertical-align: middle;這是沒有效果的。原因是什么呢?首先我們來簡單認識下vertical-align這個略神奇的元素。這個就是所謂的果凍型依賴元素。inline,inline-block,block依次可以看做,液體,果凍,固體。而vertical-align必須用在果凍級別的元素才能生效,而table-cell就是inline-block級別(果凍級別),所以Child元素display設置為table-cell可以產(chǎn)生效果,如果有不了解這三種類型的,可以去看一下這三者的區(qū)別和聯(lián)系,再了解一下塊級和行級元素。這里就不細說了。

ps:vertical-align還有很多用法,這里不再細講,比較多。但是要注意的是,很多用法會出現(xiàn)瀏覽器不兼容的問題bug較多。所以注意多瀏覽器測試。筆者上面的方法經(jīng)過測試。是兼容的。

3.水平垂直同時居中

html代碼:

<div class="parent">
    <div class="child">
        <p>測試文本</p>     
    </div>
</div> 

css文件內的處理方法

.parent
{
    text-align: center;
    line-height: 200px;
}

或者

.parent
{
    text-align: center;
    display: table;
    height: 200px;
    width: 500px;
}
.child
{
    width: 100px;
    display: table-cell;
    vertical-align: middle;
}

再或者

.parent
{
    line-height: 200px;
}
.child
{
    width: 100px;
    margin: 0 auto;
}

三種各有優(yōu)劣勢。需要大家理解塊級元素,行級元素,然后根據(jù)業(yè)務需要進行選擇。其實只要理解底層基本的東西。還有不少的奇淫技巧可以達到效果。
下面是這三種方法的說明:

  • 第一種其實就算是之前兩種居中的組合。line-heig必須得設置一個高度
  • 第二種也是前兩種的組合,只是高度寬度可以不用設置也會居中,只是這里不設置的話子元素默認的和父元素的寬高一樣,就看不到效果了
  • 第三種照例之前的組合,沒什么可說。

咦,兩兩組合不應該四種嗎。這里為何只有三種。是因為將parent元素設置為table和margin的那個組合不能達到效果。因為table-cell是inline-block級別的元素,margin無法操作種級別的。margin的喜好是block級。

其他類型

正如之前所說,還有很多方法可以干這些事。比如很多人喜歡的postion,它其實是一個定位的神器。只是對于居中這些我用position不多。這里就只舉一個例子吧
對于上面的html代碼
css里面我們可以這樣

.parent
{
    width: 400px;
    height: 400px;
}
.child
{
    position: relative;
    top: 50%;
    left: 50%;
}

position的relative是子元素相對于父元素的位置。這里設置的top: 50%;left: 50%;準確位置是子元素左上角和父元素的左上角。50%是相對于父元素的寬高。其實并沒完全居中,有一定的誤差。


三種居中都已經(jīng)介紹完了,總的來說都是水平垂直各自兩種,然后組成三種形成水平垂直居中。方法雖不多,夠用就好?。。?/h5>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容