用CSS實現層的垂直置中

來源:互聯網
上載者:User
在《曾經讓人迷糊的WEB相容問題回顧》一文中曾經提到一種方法,即“通過使用百分比絕對位置,與外補丁負值的方法,負值的大小為其自身寬度高度的一半”達到讓層垂直置中的效果。

1 div.innerbox {
2     position:absolute;
3     top:50%;
4     left:50%;
5     margin:-100px 0 0 -100px;
6     width:200px;
7     height:200px;
8     border:1px solid red
9 }

這段CSS實現了層垂直置中於瀏覽器,如果要讓innerBox相對於一個父級層實現垂直置中,只需設定父級層的CSS為:

1 div.outbox {
2     width:400px;
3     height:400px;
4     border:1px solid #f00;
5     position:relative
6 }

然而“負值的大小為其自身寬度高度的一半”這個原理卻制約了其實際應用面。innerBox的margin與width、height之間的制約關係,使得動態變化innerBox的內容引起的高度變化沒辦法反應到margin上,除非使用JS動態控制,拋開JS不說,這種原理實現的垂直置中只能用於innerBox的高寬屬性為固定值的情況。如果要實現innerBox的內容動態變化也能保持垂直置中,則要用下面的方法:

1 .outBox2 {display: table; height: 400px; width:600px;  #position: relative; overflow: hidden;background:#FFCCCC; border: 1px solid #d00;}
2 .midBox2 {#position: absolute; #top: 50%;display: table-cell; vertical-align: middle;}
3 .innBox2 {#position: relative; #top: -50%; width:300px; margin:0 auto}

相應的Html結構如下:

 1 <div class="outBox2">
 2     <div class="midBox2">
 3         <div class="innBox2" style="border:1px solid #c00">
 4         垂直置中<br>
 5         匪夷所思的垂直置中<br>
 6         我的部落格我做主的置中
 7         匪夷所思的垂直置中<br>
 8         我的部落格我做主的置中
 9     </div>
10 </div>

就目前我使用的情況來看,兩種方法都不錯,各有用途。兩種方法都相容IE6/IE7/IE8 Beta、Firefox3、Opera9。

好累,雖說是豆腐乾文章,但也要花心思在編輯器排版上,還要測試代碼正確性,哎,寫技術文章真是個體力活。

相關文章

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.