如何在div中垂直居中放置图像


67

我有这样的标记:

<div>
  <img />
</div>

div高于img:

div {
  height: 100px;
}

img {
  height: dynamic-value-smaller-than-100px;
}

我需要将图像放置在div的中间(在其上下具有相同的空白)。

我试过了,它不起作用:

div {
  vertical-align: middle;
}

以下是将div中的对象居中的两种简单方法:垂直,水平或两者(纯CSS):stackoverflow.com/a/31977476/3597276
Michael Benjamin

Answers:


72

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

background-position: center center;

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

div{
    display: table-cell; vertical-align: middle 
}

在此处阅读有关此技术的更多信息。报告在IE6 / 7上不起作用(在IE8上有效)。


它不是装饰性的。我正在建立实际上用作链接的公司徽标列表,但无论如何还是个好主意。
约瑟夫·萨布(JosefSábl)2010年

太好了!请,只需添加信息,该CSS必须添加到div,而不是img,这让我有些困惑。非常感谢。
JosefSábl2010年

4
记住这在IE6和IE7中不起作用(不确定IE8)
Matteo Riva

53

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

的HTML:

<div class="container"><img></div>

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;
}

它不在我的头上。但是我以前用过-应该可以解决问题。同样适用于较旧的浏览器。


2
据我所知,这是最好的解决方案。很奇怪这是页面上的第二个解决方案。这是一种易于实现并与所有浏览器一起使用的方式。在IE的所有旧版本中进行了测试,效果很好。谢谢。
Warre Buysse 2014年

这个应该是公认的答案。display: table-cell;与该解决方案相比,这将导致更多的痛苦
trushkevich 2014年

8

假设您要将图片(40px X 40px)放在div class =“ box”的中心(水平和垂直)上。因此,您具有以下html:

<div class="box"><img /></div>

您要做的就是应用CSS:

.box img {
    position: absolute;
    top: 50%;
    margin-top: -20px;
    left: 50%;
    margin-left: -20px;
}

您的div甚至可以更改其大小,图像将始终位于其中心。


为什么这不是最佳答案?我很好奇。伟大而简单!;-)
Dr.Kameleon

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>

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



2

由于跨浏览器CSS一直让我失望,因此我想在这里提供JQuery解决方案。这将获取每个图像的父div的高度,将其除以2,然后将其设置为图像和div之间的顶部边缘:

$('div img').each(function() {
 m = Math.floor(($(this).parent('div').height() - $(this).height())/2);
 mp = m+"px";
 $(this).css("margin-top",mp);
});



0

在您的示例中,div的高度是静态的,图像的高度是静态的。给图像赋予margin-top( div_height - image_height ) / 2

如果图片是50px,则

img {
    margin-top: 25px;
}

不,图像的高度是动态的。
约瑟夫·萨布(JosefSábl)2010年


0
<div style="background-color:#006600; width:300px; text-align:center; padding:50px 0px 50px 0px;">
<img src="imges/import.jpg" width="200" height="200"/>
</div>

你能给你一些解释吗?
克里斯蒂亚诺·丰特斯

0

接受的答案对我不起作用。vertical-align需要一个合作伙伴,以便他们可以在中心对齐。因此,我创建了一个空的div,其高度与父div的高度相同,但没有与图像对齐的宽度。inline-block两个对象都必须保持一行。

<div>
    <div class="placeholder"></div>
    <img />
</div>

CSS:

.class {
    height: 100%;
    width: 0%;
    vertical-align: middle;
    display: inline-block
}
img {
    display: inline-block;
    vertical-align: middle;
}


0
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
(function ($) {

$.fn.verticalAlign = function() {
    return this.each(function(i){
    var ah = $(this).height();
    var ph = $(this).parent().height();
    var mh = Math.ceil((ph-ah)/2);
    $(this).css('margin-top', mh);
    });
};
})(jQuery);

$(document).ready(function(e) {


$('.in').verticalAlign();


});

</script>

<style type="text/css">
body { margin:0; padding:0;}
.divWrap { width:100%;}
.out { width:500px; height:500px; background:#000; text-align:center; padding:1px; }
.in { width:100px; height:100px; background:#CCC; margin:0 auto; }
</style>
</head>

<body>
<div class="divWrap">
<div class="out">
<div class="in">
</div>
</div>
</div>

</body>
</html>

0

如果您想让内容成为div中所需的内容,那么这对我来说就是成功的:

<div style="
  display: table-cell;
  vertical-align: middle;
  background-color: blue;
  width: ...px;
  height: ...px;
">
    <div style="
      margin: auto;
      display: block;
      width: fit-content;
    ">
        <!-- CONTENT -->
        <img src="...">
        <p> some text </p>
    </div>
 </div>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.