CSS圖片垂直居中問題,困擾了我許久,今天終於可以總結下來了:
方法一:利用定位
HTML結構如:
<div class="box"> <a class="pic-wrap" href="#" target="_blank"> <img src="http://img01.taobaocdn.com/tps/i1/T1LeeNXodaXXXXXXXX-130-150.png"> </a> </div>
CSS代碼如:
body { margin: 0; padding: 0; font: 12px/1.5 tahoma,arial; } .box { width: 220px; height: 220px; border: 1px solid #F30; margin: 100px auto 0; display: table; } .pic-wrap { display: table-cell; text-align: center; vertical-align: middle; } /*主要針對IE6、7的hack*/ .box { *position: relative; } .pic-wrap { *width: 100%; *position: absolute; *top: 50%; *left: 0; /*繼承自body的字體會影響到ie6,設置默認的windows系統字體*/ _font-family: sans-serif; } .pic-wrap img { *position: relative; *top: -50%; *left: 0; /*在ie中空文本節點有默認高度*/ vertical-align: middle\9; /*在ie中,a標簽中的img標簽默認有藍色邊框*/ border: none\9; }
方法二:
HTML結構同上,
CSS代碼如:
.box { width: 220px; height: 220px; border: 1px solid #F30; margin: 100px auto 0; } .pic-wrap { display: table-cell; vertical-align: middle; width: 220px; height: 220px; text-align: center; /*ie6、7不支持display:table-cell*/ *display: block; *font-size: 192px; /*字體大小為height*0.783或者height/1.14,這里約為192px*/ _font-family: sans-serif; /*設置字體,否則在ie6下會有一個像素的偏差*/ } .pic-wrap img { border: none; vertical-align: middle; /*由於ie下空文本節點有默認高度,所以設置*/ }
【注意,當在css中設置了body元素字體的話,那么方法二在ie7下會失效的】
最佳方法:
CSS代碼如:
body { margin: 0; padding: 0; font: 12px/1.5 tahoma,arial; } .box { width: 220px; height: 220px; border: 1px solid #F30; margin: 100px auto 0; } .pic-wrap { display: table-cell; vertical-align: middle; width: 220px; height: 220px; text-align: center; /*ie6、7不支持display:table-cell*/ *display: block; _font-size: 192px; +line-height: 220px; /*設置ie7中空文本節點行高為220px*/ _font-family: sans-serif; } .pic-wrap img { border: none; vertical-align: middle\9;/*由於ie中有默認高度的空文本節點*/ }