当前位置: 首页 > 面试题库 >

使用jQuery为div设置相等的高度

杨志强
2023-03-14
问题内容

我想为jQuery的div设置相等的高度。所有div可能具有不同的内容量和不同的默认高度。这是我的html布局的示例:

<div class="container">
    <div class="column">This is<br />the highest<br />column</div>
    <div class="column">One line</div>
    <div class="column">Two<br />lines</div>
</div>
<div class="container">
    <div class="column">One line</div>
    <div class="column">Two<br>lines</div>
    <div class="column">One line</div>
</div>

我使用下一个jQuery函数设置高度:

$(document).ready(function(){

    var highestBox = 0;
        $('.container .column').each(function(){  
                if($(this).height() > highestBox){  
                highestBox = $(this).height();  
        }
    });    
    $('.container .column').height(highestBox);

});

这很好用,但对我而言不是,因为我希望所有“列”仅在一个“容器”内相等。这意味着在第一个容器中,所有框必须与第一格一样高,但在第二个容器中,它们必须等于第二列。

所以问题是-我应该如何修改jQuery以达到此目的?

谢谢!


问题答案:

回答您的特定问题

您的代码正在检查任何容器中的所有列,您需要做的是:

  • 遍历每个容器
    • 获取该容器中每一列的高度
    • 找到最高的
    • 在继续进行下一列之前,将该高度应用于该容器中的每一列。

注意:尝试为您的问题提供示例jsfiddle,它使我们能够更轻松地帮助您并理解问题,您可以立即查看有效的解决方案,并鼓励更快地做出响应。

快速(粗略)示例

$(document).ready(function(){



    // Select and loop the container element of the elements you want to equalise

    $('.container').each(function(){



      // Cache the highest

      var highestBox = 0;



      // Select and loop the elements you want to equalise

      $('.column', this).each(function(){



        // If this box is higher than the cached highest then store it

        if($(this).height() > highestBox) {

          highestBox = $(this).height();

        }



      });



      // Set the height of all those children to whichever was highest

      $('.column',this).height(highestBox);



    });



});


.container { border 1px solid red; }

.column { border: 1px solid blue; float:left; width: 30%; text-align:center; }


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>



<div class="container">

    <div class="column">This is<br />the highest<br />column</div>

    <div class="column">One line</div>

    <div class="column">Two<br />lines</div>

</div>

<div class="container">

    <div class="column">One line</div>

    <div class="column">Two<br>lines</div>

    <div class="column">One line</div>

</div>

图书馆!

我发现这是一个图书馆,如果您需要一些更聪明的均衡控件,这看起来很有希望

http://brm.io/jquery-match-height-demo/

解决@Mem的问题

问题$(document).ready()如果您有需要加载的图像而这些图像又会改变容器的高度,则可以使用吗?

加载图像后均衡高度

如果要加载图像,您会发现此解决方案并不总是有效。这是因为它document.ready是在最早的时间触发的,这意味着它不等待外部资源(例如图像)被加载。

当图像最终加载时,运行均衡脚本后,它们可能会扭曲其容器的高度,从而导致其看起来也不太正常。

用图像求解高度均衡

  1. 绑定到图像加载事件

这是最好的解决方案(在撰写本文时),并且涉及到绑定img.load事件。所有你需要做的是了解有多少IMG公司有一个数$('img').length,然后每个load-1从数,直到你打零,那么火的均衡度。

load如果图像在缓存中,则可能无法在所有浏览器中触发此处的警告。环顾google /
github,那里应该有一个解决方案脚本。在撰写本文时,我发现了AlexanderDickson的waitForImages(未经测试,这不是背书)。

  1. window.load事件是另一个更可靠的解决方案。通常这应该总是有效的。但是,如果您将文档签出,则会注意到在加载所有外部资源后触发此事件。这意味着,如果您的图片已加载,但是有一些javascript等待下载,则在完成之前不会触发。

如果您异步加载大多数外部设备,并且巧妙地最小化,压缩和分散负载,则此方法可能不会出现任何问题,但是CDN突然变慢(一直发生)可能会引起问题。

在这两种情况下,您都可以采取愚蠢的方法并应用备用计时器。让均衡脚本在设置的几秒钟后自动运行,以防万一该事件不触发或某些事情变得缓慢而无法控制。这不是万无一失的方法,但实际上,如果您正确调整计时器,您将通过这种后备方式满足99%的访问者的需求。



 类似资料:
  • 问题内容: 我在容器中有两个div。一个在左边,一个在右边,并排放置。即使内容不同,我如何能够使每个人的身高相等。 例如,右div有很多内容,并且是左div高度的两倍,如何使左div延伸到右div的相同高度? 是否有一些JavaScript(jQuery)代码可以完成此任务? 问题答案: 您 可以 使用jQuery,但是有更好的方法可以做到这一点。 这类问题很多,通常有3个答案… 1.使用CSS

  • 问题内容: 我正在尝试将表格列分为两列。我希望最右边的列停靠在页面的右边,并且此列应具有不同的背景色。右侧的内容几乎总是小于左侧的内容。我希望右侧的div始终足够高,以到达其下一行的分隔符。如何使背景色填充该空间? 编辑:我同意这个示例非常类似于表,并且实际表将是一个不错的选择。但是我的“真实”页面最终将变得不像表格一样,我只想首先掌握此任务! 另外,由于某种原因,当我在IE7中创建/编辑帖子时,

  • 问题内容: 在Web应用程序中,我的页面包含一个DIV,该DIV的自动宽度取决于浏览器窗口的宽度。 我需要该对象的自动高度。DIV从顶部屏幕开始约300像素,其高度应使其延伸到浏览器屏幕的底部。我有一个容器DIV的最大高度,所以div的最小高度必须是最小。我相信我可以将其限制在CSS中,并使用Javascript处理DIV的大小。 我的JavaScript不够理想。我可以编写一个简单的脚本来为我做

  • 问题内容: 是否可以使包装器填充窗口高度(不滚动),并且可以使div滚动中心而不弄乱像素和javascript? 基本上,我希望页眉在顶部可见,而页脚在底部始终可见,并且在中心具有可滚动的内容,占据剩余的高度。 页眉,页脚和中心div的高度都是未知的(未设置px或%,即可变的字体大小或填充)。纯CSS可能吗? 问题答案: html, body {

  • 我已经通过interfacebuilder向我的tableViewCell添加了一个text View。但是我想将大小设置为与text View中的内容相等。这似乎不起作用。到目前为止,我已经完成了下面的操作,这不会改变text View的框架。

  • 问题内容: 我有三分之二的div。所包含的div之一向左浮动,另一个向右浮动。我希望2个同级div始终处于相同的高度,但是对此存在问题。到目前为止,我只在Firefox中查看该页面,并认为在至少一个浏览器中运行它后,我会担心任何跨浏览器的问题。 这是标记: 这是CSS: 如果中的内容长于,则不会扩展为匹配。在我尝试了一个例子,说的Firefox的计算式的高度是,的计算式的高度是和的计算的风格高度为