请考虑以下示例:(live demo here)
HTML:
<a><img src="http://img.brothersoft.com/icon/softimage/s/smiley.s_challenge-131939.jpeg" /></a>
CSS:
a {
display: block;
background: #000;
line-height: 40px;
}
img {
vertical-align: middle;
}
输出结果为:
为什么图像不是垂直居中的?
我如何解决这个问题,以便它可以在所有主流浏览器中使用?
请不要假设任何图像尺寸(在本例中为32x32),因为在实际情况下图像尺寸未知。
答案 0 :(得分:3)
您可以使用position:absolute;
。
例如:
a {
display: block;
background: #000;
line-height: 40px;
height:80px;
position:relative;
}
img {
position:absolute;
top:50%;
margin-top:-16px;
}
注意:这会使margin-top
一半的图像尺寸。
答案 1 :(得分:1)
你应该display: table-cell
我认为,这只适用于表格..我使用line-height
等于元素的高度,它也适用。
答案 2 :(得分:1)
我无法告诉你具体原因(我很好奇)。但这对我有用:
a {
display: block;
background: #000;
line-height: 40px;
}
img {
vertical-align: middle;
margin-top:-4px; /* this work for me with any given line-height or img height */
}
答案 3 :(得分:1)
我遇到了同样的问题。这对我有用:
<style type="text/css">
div.parent {
position: relative;
}
/*vertical middle and horizontal center align*/
img.child {
bottom: 0;
left: 0;
margin: auto;
position: absolute;
right: 0;
top: 0;
}
</style>
<div class="parent">
<img class="child">
</div>
答案 4 :(得分:0)
如果你知道元素的垂直尺寸和线高,那么你可以使用vertical-align: top
加上边距来垂直居中。
为了说明,我创建了:http://jsfiddle.net/feklee/cXUnT/30/
答案 5 :(得分:0)
只需将img标签放在div标签中即可 display:table-cell vertical-align:div的中间位置。父标签应显示:table
示例:
的CSS
<a>
<div>
<img src="http://img.brothersoft.com/icon/softimage/s/smiley.s_challenge- 131939.jpeg" />
</div>
</a>
HTML
{{1}}
答案 6 :(得分:0)
不确定原因是什么。
删除 line-height
和添加 margins
到图片就可以了。
a {
display: block;
background: #f00;
}
img {
margin: .3em auto;
vertical-align: middle;
}
&#13;
<a>
<img src="https://placeimg.com/30/30/any">
</a>
&#13;
答案 7 :(得分:-1)
尝试在<a>
上使用背景图片:
<a href="#"></a>
a {display:block;background:#000;line-height:40px;background:#000 url(http://img.brothersoft.com/icon/softimage/s/smiley.s_challenge-131939.jpeg) no-repeat left center;text-indent:-999px}