例
/*
名稱: 垂直 水平 置中
用法:
1. [原理] 設定寬度和高度,父節點為 position:relative; CSS是這樣寫的:
position:absolute;left:50%;top:50%;
margin-left:-元素自身寬度的一半;
margin-top:-元素自身高度的一半;
2. [原理] table, 用起來就更簡單了, 只要添加:
text-algin:center;
vertical-align:middle;
3. [方法] 提供模板化的CSS class方法, 規則如下:
代碼如下 |
複製代碼 |
<div class="sl-hvalign" style="width:500px"> <!-- 記得加寬度, 不要寫行內樣式, 這裡只是一個提示 --> <div class="sl-hvalign-cnt"> <div class="sl-hvalign-cnt-inner"> <!-- your code --> </div> </div> </div> <!-- .sl-hvalign --> */ .sl-hvalign{ display:table; overflow:hidden; margin:0 auto; height: 100%; *position:relative; }
.sl-hvalign-cnt{ display:table-cell; vertical-align: middle; *position:absolute; top:50%; } .sl-hvalign-cnt-inner{ *position:relative; *top:-50%; } |
單純的圖片垂直置中,寫三層標籤確實有些費,但是這不得不說是一種折中的方案,當有圖片、有文字時,是一個比較好的選擇。。
代碼如下 |
複製代碼 |
<!doctype html> <html> <head> <meta charset='utf-8' /> <title></title> <style type="text/css"> .out{width:400px;height:300px;margin:20px auto;display:table-cell;text-align:center;vertical-align:middle;background:#ccc;} .out img{width:100px;height:100px;background:#fcc;} </style> </head> <body> <div class='out'> <img src="" alt="" /> </div> </body> </html> |
其他的CSS實現垂直置中的方法
A
在 content 元素外插入一個 div。設定此 div height:50%; margin-bottom:-contentheight;。
content 清除浮動,並顯示在中間。
優點:適用於所有瀏覽器;沒有足夠空間時(例如:視窗縮小) content 不會被截斷,捲軸出現
缺點:唯一我能想到的就是需要額外的空元素了
代碼如下 |
複製代碼 |
#floater{float:left; height:50%; margin-bottom:-120px;} #content{clear:both; height:240px; position:relative;} <div id="floater"></div> <div id="content"> Content here </div> |
B
使用了一個 position:absolute,有固定寬度和高度的 div。這個 div 被設定為 top:0; bottom:0;。但是因為它有固定高度,其實並不能和上下都間距為 0,因此 margin:auto; 會使它置中。使用 margin:auto;使區塊層級元素垂直置中是很簡單的。優點:簡單;缺點:IE(IE8 beta)中無效;無足夠空間時,content 被截斷,但是不會有捲軸出現
代碼如下 |
複製代碼 |
<!doctype html> <html> <head> <title></title> <meta charset='utf-8' /> <style type="text/css"> .outer{height:240px;width:500px;margin:20px auto 0;position:relative;background:#ccf;} .inner{width:300px;height:100px;background:#9f9;position:absolute;top:0;bottom:0;left:0;right:0;margin:auto;text-align: center;} .inner img{height:100px;} </style> </head> <body> <div class="outer"> <div class="inner"> <img src="bokan.png" alt="" /> </div> </div> </body> </html> |
C
使用絕對位置的 div,把它的 top 設定為 50%,top margin 設定為負的 content 高度。這意味著對象必須在 CSS 中指定固定的高度。
因為有固定高度,或許你想給 content 指定 overflow:auto,這樣如果 content 太多的話,就會出現捲軸,以免content 溢出。
優點:適用於所有瀏覽器;不需要嵌套標籤。缺點:沒有足夠空間時,content 會消失(類似div 在 body 內,當使用者縮小瀏覽器視窗,捲軸不出現的情況)
代碼如下 |
複製代碼 |
.content { position:absolute; top:50%; height:240px; margin-top:-120px; /* negative half of the height */ } <div class="content"> Content goes here </div> |