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中有默認高度的空文本節點*/
}
