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

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