如何在div内垂直居中图像

Jos*_*ábl 67 css

我有这样的标记:

<div>
  <img />
</div>
Run Code Online (Sandbox Code Playgroud)

div高于img:

div {
  height: 100px;
}

img {
  height: dynamic-value-smaller-than-100px;
}
Run Code Online (Sandbox Code Playgroud)

我需要将图像放在div的中间(在其上方和下方具有相同的空白区域).

我尝试过这个并不起作用:

div {
  vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)

pix*_*ine 72

如果你的图像纯粹是装饰性的,那么将它用作背景图像可能是一种更具语义性的解决方案.然后,您可以指定背景的位置

background-position: center center;
Run Code Online (Sandbox Code Playgroud)

如果它不是装饰性的并且构成有价值的信息那么img标签是合理的.在这种情况下,您需要做的是使用以下属性设置包含div的样式:

div{
    display: table-cell; vertical-align: middle 
}
Run Code Online (Sandbox Code Playgroud)

了解更多关于这里这个技术.报告不适用于IE6/7(适用于IE8).

  • 请注意,这在IE6和IE7中不起作用(不确定IE8) (4认同)
  • 奇怪,它不适用于我的Chrome 20.0.1132.47 (2认同)

aki*_*sko 53

另一种方法是在容器div中设置行高,并使用vertical-align:middle将图像对齐.

HTML:

<div class="container"><img></div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.container {
  width: 200px; /* or whatever you want */
  height: 200px; /* or whatever you want */
  line-height: 200px; /* or whatever you want, should match height */
  text-align: center;
}

.container > img {
  vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)

这是我的头脑.但我以前用过这个 - 它应该可以解决问题.适用于旧版浏览器.

  • 据我所知,这是最好的解决方案.奇怪的是,这是页面上的第二个解决方案.它更容易实现并适用于所有浏览器.在IE的所有老歌中测试它并且运行良好.谢谢. (2认同)

Dio*_*elo 8

假设您想将图像(40px X 40px)放在div class ="box"的中心(水平和垂直)上.所以你有以下html:

<div class="box"><img /></div>
Run Code Online (Sandbox Code Playgroud)

你要做的是应用CSS:

.box img {
    position: absolute;
    top: 50%;
    margin-top: -20px;
    left: 50%;
    margin-left: -20px;
}
Run Code Online (Sandbox Code Playgroud)

你的div甚至可以改变它的大小,图像将始终位于它的中心.


Sha*_*ard 5

这是我以前用于完成CSS垂直居中的解决方案.这适用于所有现代浏览器.

http://www.jakpsatweb.cz/css/css-vertical-center-solution.html

摘抄:

  <div style="display: table; height: 400px; position: relative; overflow: hidden;">
    <div style="position: absolute; top: 50%;display: table-cell; vertical-align: middle;">
      <div style="position: relative; top: -50%">
        any text<br>
        any height<br>
        any content, for example generated from DB<br>
        everything is vertically centered
      </div>
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

(用于演示目的的内联样式)