CSS文本和div垂直居中方法總結(jié)

在樣式布局中,我們經(jīng)常碰到需要將元素居中。通過css實現(xiàn)元素的水平居中較為簡單:對文本,只需要對其父級元素設(shè)置text-align: center;,而對div等塊級元素,只需要設(shè)置其left和right的margin值為auto。要實現(xiàn)元素的垂直居中,有人會想到css中的vertical-align屬性,但是它只對擁有valign特性的元素才生效,例如表格元素中的<td>、<th>、<caption>等,而像<div>、<span>這樣的元素是沒有valign特性的,因此使用vertical-align對它們不起作用。因此我們需要通過別的方法去實現(xiàn)元素的垂直居中,下面我總結(jié)了幾種了常用垂直居中方法。
單行文本垂直居中
對于單行文本,我們只需要將文本行高(line-height)和所在區(qū)域高度(height)設(shè)為一致即可:
- <!--html代碼-->
- <div id="div1">
- 這是單行文本垂直居中
- </div>
- /*css代碼*/
- #div1{
- width: 300px;
- height: 100px;
- margin: 50px auto;
- border: 1px solid red;
- line-height: 100px; /*設(shè)置line-height與父級元素的height相等*/
- text-align: center; /*設(shè)置文本水平居中*/
- overflow: hidden; /*防止內(nèi)容超出容器或者產(chǎn)生自動換行*/
- }
多行文本垂直居中
多行文本垂直居中分為兩種情況,一個是父級元素高度不固定,隨著內(nèi)容變化;另一個是父級元素高度固定。
父級元素高度不固定
父級高度不固定的時,高度只能通過內(nèi)部文本來撐開。這樣,我們可以通過設(shè)置內(nèi)填充(padding)的值來使文本看起來垂直居中,只需設(shè)置padding-top和padding-bottom的值相等:
- <!--html代碼-->
- <div id="div1">
- 這是多行文本垂直居中,
- 這是多行文本垂直居中,
- 這是多行文本垂直居中,
- 這是多行文本垂直居中。
- </div>
- /*css代碼*/
- #div1{
- width: 300px;
- margin: 50px auto;
- border: 1px solid red;
- text-align: center; /*設(shè)置文本水平居中*/
- padding: 50px 20px;
- }
父級元素高度固定
本文一開始就提到css中的vertical-align屬性,但是它只對擁有valign特性的元素才生效,結(jié)合display: table;,可以使得div模擬table屬性。因此我們可以設(shè)置父級div的display屬性:display: table;;然后再添加一個div包含文本內(nèi)容,設(shè)置其display:table-cell;和vertical-align:middle;。具體代碼如下:
- <!--html代碼-->
- <div id="outer">
- <div id="middle">
- 這是固定高度多行文本垂直居中,
- 這是固定高度多行文本垂直居中,
- 這是固定高度多行文本垂直居中,
- 這是固定高度多行文本垂直居中。
- </div>
- </div>
- /*css代碼*/
- #outer{
- width: 400px;
- height: 200px;
- margin: 50px auto;
- border: 1px solid red;
- display: table;
- }
- #middle{
- display:table-cell;
- vertical-align:middle;
- text-align: center; /*設(shè)置文本水平居中*/
- width:100%;
- }
但是,在IE7中顯示效果如下:
這是因為IE7及以下的版本并不能很好的支持display:table和display:table-cell屬性,當(dāng)然,如果你不考慮IE7以下的版本的瀏覽器,上述方法是可以實現(xiàn)垂直居中。如果把IE7及以下版本考慮進(jìn)去,我們可以通過用到CSS hack的知識來設(shè)置針對不同瀏覽器的屬性。
- <!--html代碼-->
- <div id="outer">
- <div id="middle">
- <div id="content">
- 這是固定高度多行文本垂直居中(兼容IE7),
- 這是固定高度多行文本垂直居中(兼容IE7),
- 這是固定高度多行文本垂直居中(兼容IE7),
- 這是固定高度多行文本垂直居中(兼容IE7)。
- </div>
- </div>
- </div>
- /*css代碼*/
- #outer{
- width: 400px;
- height: 200px;
- margin: 50px auto;
- border: 1px solid red;
- display: table;
- *position:relative; //兼容IE7及以下版本
- }
- #middle{
- display:table-cell;
- vertical-align:middle;
- text-align: center; /*設(shè)置文本水平居中*/
- width:100%;
- *position:absolute; //兼容IE7及以下版本
- *top:50%;
- }
- #content {
- *position:relative; //兼容IE7及以下版本
- *top:-50%;
- }
子div垂直居中
1、根據(jù)子div具體大小設(shè)置偏移
如果子div固定大小,設(shè)定水平和垂直偏移父元素的50%,再根據(jù)實際長度將子元素向上和向左挪回一半大小
- <!--html代碼-->
- <div id="outer">
- <div id="middle">
- 子div(固定大小)垂直居中
- </div>
- </div>
- /*css代碼*/
- #outer{
- background-color: #13CDF4;
- width: 300px;
- height: 200px;
- position: relative;
- }
- #middle{
- background-color: #E41627;
- width: 100px;
- height: 100px;
- margin: auto;
- position: absolute;
- left: 50%;
- top: 50%;
- margin-left: -50px;
- margin-top: -50px;
- }
該方法兼容IE7、IE6,但是只針對子div大小的固定的情況下才有效。大部分時候,子div的大小是不固定的,下面介紹子div大小不固定時的方法。由于顯示效果與這個效果基本一樣,效果圖就不一一貼出來,讀者可以自行復(fù)制代碼驗證。
2、利用translate
針對第一種方法中水平和垂直偏移父元素的50%后,不設(shè)置margin值,而是利用除css3中的transform屬性設(shè)置translate的值,css代碼部分改成如下:
- #middle{
- background-color: #E41627;
- width: 100px;
- height: 100px;
- margin: auto;
- position: absolute;
- left: 50%;
- top: 50%;
- transform: translateX(-50%) translateY(-50%);
- -webkit-transform: translateX(-50%) translateY(-50%);
- }
這種方法需要注意transform是css3中的屬性,使用時注意瀏覽器的兼容性,IE9之前的版本不支持。
3、利用絕對布局absolute
- <!--html代碼-->
- <div id="outer">
- <div id="middle">
- 利用絕對定位實現(xiàn)子div大小不固定垂直居中
- </div>
- </div>
- /*css代碼*/
- #outer{
- background-color: #13CDF4;
- width: 300px;
- height: 200px;
- position: relative;
- }
- #middle{
- background-color: #E41627;
- width: 100px; //子div大小可隨意設(shè)置
- height: 100px;
- margin: auto;
- position: absolute;
- top: 0;left: 0;right: 0;bottom: 0;
- }
該方法不兼容IE7、IE6
4、利用vertical-align
- <!--html代碼-->
- <div id="outer">
- <div id="middle">
- 利用vertical-align屬性實現(xiàn)子div大小不固定垂直居中
- </div>
- </div>
- /*css代碼*/
- #outer{
- background-color: #13CDF4;
- width: 300px;
- height: 200px;
- display: table-cell;
- vertical-align: middle;
- }
- #middle{
- background-color: #E41627;
- width: 100px;
- height: 100px;
- margin: 0 auto;
- }
這種方法是將div轉(zhuǎn)變成table-cell顯示,然后通過vertical-align: middle;再設(shè)置其子元素垂直居中,這種方法和上面設(shè)置父級元素高度固定時多行文本居中的方法一樣,所以這種方法也不能兼容IE7、IE6。如果需要兼容IE7、IE6,可以參照上面的代碼,上面設(shè)置父級元素高度固定時多行文本居中的方法其實就是將最里面的div垂直居中。這里我就不重述了。
5、利用display: flex
- <!--html代碼-->
- <div id="outer">
- <div id="middle">
- 利用display: flex實現(xiàn)子div大小不固定垂直居中
- </div>
- </div>
- /*css代碼*/
- #outer{
- background-color: #13CDF4;
- width: 300px;
- height: 200px;
- display: flex;
- justify-content: center;/*實現(xiàn)水平居中*/
- align-items:center; /*實現(xiàn)垂直居中*/
- }
- #middle{
- background-color: #E41627;
- width: 100px;
- height: 100px;
- }
這種方法只需要在父級div中加上這三句話就行,但是在IE中兼容性不好,IE9及以下IE瀏覽器版本都不支持。
以上是我總結(jié)的一些常用到的垂直居中的設(shè)計方法,大家可以根據(jù)自己的需要選擇合適的設(shè)計方式。
原文鏈接:http://blog.csdn.net/u014607184/article/details/51820508
相關(guān)文章
- 這篇文章主要介紹了CSS水平垂直居中的幾種方法總結(jié),垂直居中是布局中十分常見的效果之一,本文介紹了幾種方法,有興趣的可以了解一下。2016-12-19
- 這篇文章主要為大家詳細(xì)介紹了css讓容器水平垂直居中的7種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-17
利用CSS3的flexbox實現(xiàn)水平垂直居中與三列等高布局
這篇文章給大家介紹了三個小節(jié)的內(nèi)容,其中包括關(guān)于css3中flexbox需要掌握的概念、flexbox實現(xiàn)水平垂直居中對齊和三列等高自適應(yīng)頁腳區(qū)域黏附底部的布局,有需要的可以參考2016-09-12- 這篇文章給大家演示了在不知道高度的情況下圖片如何垂直居中對齊,文中給出了實例代碼,有需要的朋友們可以參考借鑒。下面來一起看看吧。2016-09-12
深入理解CSS行高line-height與文本垂直居中的原理
本文詳細(xì)介紹了CSS行高屬性line-height與文本垂直居中的原理,通過本文的介紹相信對大家以后使用line-height和設(shè)置文本垂直居中會更加熟練,有需要的可以參考借鑒。下面一2016-08-12Flexbox制作CSS布局實現(xiàn)水平垂直居中的簡單實例
下面小編就為大家?guī)硪黄狥lexbox制作CSS布局實現(xiàn)水平垂直居中的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-07-27CSS設(shè)置DIV垂直居中的N種方法 兼容IE瀏覽器
這篇文章主要為大家詳細(xì)介紹了兼容IE瀏覽器CSS設(shè)置DIV垂直居中的N種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-05- 下面小編就為大家?guī)硪黄狢SS 實現(xiàn)垂直居中的幾種方法(必看)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-14
CSS在固定寬高的div內(nèi)實現(xiàn)垂直居中的實例詳解
這篇文章主要介紹了CSS在固定寬高的div內(nèi)實現(xiàn)垂直居中的實例詳解,即在div內(nèi)部元素相對于div垂直居中的方法,需要的朋友可以參考下2016-06-03- 在前端布局過程中,我們實現(xiàn)水平居中比較簡單,一般通過margin:0 auto;和父元素 text-align: center;就能實現(xiàn)。今天小編給大家?guī)砹薈SS實現(xiàn)垂直居中的幾種方法小結(jié),感興2019-05-14