首先要做的事情......解释为什么你会得到你得到的结果。这很简单。设置position: relative;
(或绝对值),然后设置top: 50%;
将图像的最顶部对齐到 50%。如果将图像的高度设置为 1px,则可以看到 1px 居中。不幸的是,CSS 没有办法告诉它对齐图像的中心而不是顶部边缘。
现在......一个可能的解决方案......
假设这个.inner
div 内没有其他内容,您是否考虑过允许图像通过边距确定内部 div 的高度?
以这个JSFiddle 为例。
您可以将图像“居中”在 .inner div 中,方法是将左右边距设置为自动,并将顶部和底部边距设置为某个 px 值……在我的示例中为 60px。
如果您想获得 600px 的总 div 高度,并且您的图像始终是 400px 高,那么 100px 的顶部和底部边距使总高度为 600px。(400+100+100=600)。
HTML:
<div class="outer">
<div class="inner">
<img src="http://farm9.staticflickr.com/8311/8023199579_f52f648727_m.jpg">
</div>
</div>
CSS:
.outer {
height:520px;
width:520px;
overflow:hidden;
background-color:yellow;
border: 2px solid purple;
}
.outer .inner {
width: 340px;
display:block;
background-color:blue;
border: 1px solid red;
padding: 10px;
margin: 0 auto;
}
.outer .inner img {
width:280px;
height:auto;
margin: 60px auto;
border:0px;
display:block;
border: 1px solid orange;
}
第二种可能的解决方案...
假设<img>
标签不必保留<img>
标签,那么一个非常简单的方法是将图像本身移动到 CSS 中,作为background-image
.
有关此解决方案的演示,请参阅此JSFiddle。
HTML:
<div class="inner">
</div>
CSS:
.inner {
width: 540px;
height: 340px;
display:block;
background-color:blue;
border: 1px solid red;
margin: 0 auto;
background: blue url('http://farm9.staticflickr.com/8311/8023199579_f52f648727_m.jpg') no-repeat 50% 50%;
}