在div中垂直居中图像

时间:2014-06-27 13:32:38

标签: javascript jquery html css

每张图片都有一个div父母,这些父母'宽度和高度是成比例的,问题是,我不能将每个图像水平放在其父级内。它似乎只需要第一个元素的高度并将其应用于其余元素。 ![似乎它只需要第一个元素高度并将其应用于所有其余元素] [1]

function centerImages(image) {
  var parent_height = $('.thumb img').parent().height();  
  var image_height = $('.thumb img').height();  
  var top_margin = (parent_height - image_height) / 2;  
  $('.thumb img').css( 'margin-top' , top_margin);
}

$(".thumb img").each(function() {
        centerImages(this);
});

演示:http://codepen.io/waveiron/pen/ExpLd

3 个答案:

答案 0 :(得分:2)

你再次指向同一张图片。只需更改为:

     function centerImages(image) {
    var parent_height = $(image).parent().height();  
    var image_height = $(image).height();  
    var top_margin = (parent_height - image_height) / 2;  
    $(image).css( 'margin-top' , top_margin);
}
$(".thumb img").each(function() {
    centerImages(this);
});

另外添加“px”也是如此。

答案 1 :(得分:0)

您错过了添加px

$('.thumb img').css( 'margin-top' , top_margin + "px");

(我还建议尽可能缓存jQuery对象:

var $image = $(image);
var parent_height = $image.parent().height();
var image_height = $image.height();

答案 2 :(得分:0)

一种方法是在两个元素上使用高度为100%且垂直对齐:中间的内联块助手。

或者,如果您不想在现代浏览器中使用额外元素并且不介意使用IE表达式,则可以使用伪元素并使用方便的表达式将其添加到IE,每个元素只运行一次,因此不会出现任何性能问题

如果我正确地解答你的问题......