如何使用 jQuery 垂直对齐多个不同高度的图像?

发布于 2024-12-10 02:09:52 字数 556 浏览 1 评论 0 原文

我创建了一个滑动图像的脚本。每个图像都包含在一个“幻灯片”div 中。我想要做的是使用 jquery 垂直对齐每个单独的图像。目前我正在使用:

$('.slide img').each(function() {
    var image_height = $(this).height();
    var height_margin = (image_height/2)*-1;
    $('.slide img').css('margin-top', height_margin);
    $('.slide img').css('top', 50%);    
    $('.slide img').css('height', image_height);    

});

我注意到它将第一张图像的第一个高度和边距应用于所有

标签。另外:
的高度恒定为 600px。

并非每张图像都是相同的,我希望它是动态的......有什么想法吗?

I have created a script that slides images. Each image is contained in a "slide" div. What I want to do is vertically align each individual image using jquery. Currently am I using:

$('.slide img').each(function() {
    var image_height = $(this).height();
    var height_margin = (image_height/2)*-1;
    $('.slide img').css('margin-top', height_margin);
    $('.slide img').css('top', 50%);    
    $('.slide img').css('height', image_height);    

});

What I've noticed is that it applies the first height and margin from the first image to ALL of the <div class"slide"></div> tags. Also: <div class"slide"></div> has the constant height of 600px.

Not every image is the same and I want it to be dynamic... Any thoughts?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

初见终念 2024-12-17 02:09:52

您不应在 .each 循环内使用 $('.slide img'),因为此选择器将更改所有样式。目前,您正在将最后一个图像的设置应用于所有图像。代码中的另一个错误:您忘记引用 50%

$('.slide img').each(function() {
    var $this = $(this);
    var image_height = $this.height();
    var height_margin = (image_height/2)*-1;
    $this.css('margin-top', height_margin);
    $this.css('top', '50%');    
    $this.css('height', image_height);    
});

您的代码可以进一步优化:

$('.slide img').each(function() {
    var $this = $(this);
    var image_height = $this.height();
    var height_margin = -image_height / 2
    $this.css({'margin-top', height_margin,
               'top', '50%',  
               'height', image_height
              });    
});

You shouldn't use $('.slide img') inside the .each loop, because this selector will change all styles. Currently, you're applying the settings of the last image to all images. Another error in your code: You have forgotten to quote 50%.

$('.slide img').each(function() {
    var $this = $(this);
    var image_height = $this.height();
    var height_margin = (image_height/2)*-1;
    $this.css('margin-top', height_margin);
    $this.css('top', '50%');    
    $this.css('height', image_height);    
});

Your code can be optimized even more:

$('.slide img').each(function() {
    var $this = $(this);
    var image_height = $this.height();
    var height_margin = -image_height / 2
    $this.css({'margin-top', height_margin,
               'top', '50%',  
               'height', image_height
              });    
});
坚持沉默 2024-12-17 02:09:52

如果 .slide 容器具有恒定的高度,您可以将 display:blockmargin:auto 0; 应用于 .slide img< /code> 在 CSS 中实现相同的效果...不需要 JS 计算。

If the .slide container has a constant height you could apply display:block and margin:auto 0; to .slide img in CSS to achieve the same effect...no JS calculations required.

永言不败 2024-12-17 02:09:52

好的,我有一个解决方案,首先使包含 DIV 的 line-height 与最高图像的高度匹配,然后在您应用的类中使用 vertical-align:middle所有图像,请确保图像设置为 display:inline 否则它将无法工作。

div.container {line-height:300px;} /*or whatever that may be, then*/
img.slides {vertical-align:middle;}

OK I have a solution, first make the containing DIV's line-height matches the height of your tallest image, then use vertical-align:middle in a class which you apply to all images, make sure the images are set to display:inline though or it wont work.

div.container {line-height:300px;} /*or whatever that may be, then*/
img.slides {vertical-align:middle;}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文