简体   繁体   English

无血缘关系父母的孩子身高相同

[英]Equal height of children of unrelated parents

I want to have an equal height of two unrelated divs.我想要两个不相关的 div 的高度相等。 Basically, I need to equalize the height of Parent B's child to Parent A's child.基本上,我需要使父母 B 的孩子与父母 A 的孩子的身高相等。 Below is the image to highlight what it is about:下图突出显示了它的含义:

在此处输入图像描述

Any idea how this can be accomplished with jQuery. Most of the equal height solutions I came across are about children of the same parent.知道如何使用 jQuery 实现这一点。我遇到的大多数等高解决方案都是关于同一父母的孩子。

The code I used is for children within a container.我使用的代码适用于容器中的子项。

 $(document).ready(function(){ $('.containers').each(function(){ var min_highestBox = 0; $('.columns', this).each(function(){ if($(this).height() > min_highestBox) { min_highestBox = $(this).height(); } }); $('.columns',this).height(min_highestBox); }); });
 .containers {border:1px solid; width:100%; display:inline-block;}.columns {border:1px solid red; padding: 20px; min-width:20%; float:left;}
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="containers"> <div class="columns">This is<br />the highest<br />column</div> <div class="columns">One line</div> <div class="columns">Four<br />lines<br />the highest<br />column</div> </div> <div class="containers"> <div class="columns">One line</div> <div class="columns">Two<br>lines</div> <div class="columns">One line</div> </div>

I have tried it with a CSS grid but in this specific situation, a CSS grid is not a solution.我已经尝试使用 CSS 网格,但在这种特定情况下,CSS 网格不是解决方案。

Update: the actual containers are both separate and independent of each other:更新:实际的容器是分开的并且彼此独立:

 .a, .b {border:2px solid; padding: 25px; float:left; width: 200px;}.a div, .b div {border:2px solid red;}
 <div class="a">Parent A <div>Child of A <br> some additional text</div> </div> <div class="b">Parent B <div>Child of B</div> </div>

In the case that they can't be placed inside a wrapper you can make use of a sorting from lowest to heighest and apply the heighest value to all affected nodes and a MutationObserver to easily monitor changes on these nodes to call the height-adjust routine again.如果它们不能放在包装器中,您可以使用从最低到最高的排序并将最高值应用于所有受影响的节点和MutationObserver以轻松监视这些节点上的更改以调用高度调整例程再次。

For equal height of parents:对于父母同等身高:

 $(document).ready(() => { const selector = ".containers"; function resize() { const nodes = $(selector).css("height", "auto").sort((a, b) => $(a).height() - $(b).height()), heighest = nodes.last().height(); if (nodes.first().height().= heighest) $(selector),css(`height`; `${heighest}px`); } resize(); const observer = new MutationObserver(resize). $(selector),each((idx. el) => observer,observe(el: { childList, true: subtree; true })): // Examples. setTimeout(() => { $(".columns").first();append("<br>Lorem<br>Ipsum<br>Dolor<br>sit<br>Amet"), }; 1500). setTimeout(() => { $(".columns").last();append("<br>Lorem<br>Ipsum<br>Dolor<br>sit<br>Amet"), }; 3000). setTimeout(() => { $(".columns").last();append("<br>Lorem<br>Ipsum<br>Dolor<br>sit<br>Amet"), }; 5000); })
 .containers { border: 1px solid; width: 100%; display: inline-block; }.columns { border: 1px solid red; padding: 20px; min-width: 20%; float: left; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="containers"> <div class="columns">This is<br>the highest<br>column</div> <div class="columns">One line</div> <div class="columns">Four<br>lines<br>the highest<br>column</div> </div> <div class="containers"> <div class="columns">One line</div> <div class="columns">Two<br>lines</div> <div class="columns">One line</div> </div>

For equal height of childs:对于同等身高的孩子:

 $(document).ready(() => { const selector = ".columns"; function resize() { const nodes = $(selector).css("height", "auto").sort((a, b) => $(a).height() - $(b).height()), heighest = nodes.last().height(); if (nodes.first().height().= heighest) $(selector),css(`height`; `${heighest}px`); } resize(); const observer = new MutationObserver(resize). $(selector),each((idx. el) => observer,observe(el: { childList, true: subtree; true })): // Examples. setTimeout(() => { $(".columns").first();append("<br>Lorem<br>Ipsum<br>Dolor<br>sit<br>Amet"), }; 1500). setTimeout(() => { $(".columns").last();append("<br>Lorem<br>Ipsum<br>Dolor<br>sit<br>Amet"), }; 3000). setTimeout(() => { $(".columns").last();append("<br>Lorem<br>Ipsum<br>Dolor<br>sit<br>Amet"), }; 5000); })
 .containers { border: 1px solid; width: 100%; display: inline-block; }.columns { border: 1px solid red; padding: 20px; min-width: 20%; float: left; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="containers"> <div class="columns">This is<br>the highest<br>column</div> <div class="columns">One line</div> <div class="columns">Four<br>lines<br>the highest<br>column</div> </div> <div class="containers"> <div class="columns">One line</div> <div class="columns">Two<br>lines</div> <div class="columns">One line</div> </div>

If you consider an extra wrapper you can do it with only CSS如果你考虑一个额外的包装器,你可以只用 CSS

 .wrapper { display: grid; gap: 5px; grid-auto-rows: 1fr; /* eqaul containers */ }.containers { border: 1px solid; display: flex; /* equal childs */ }.columns { border: 1px solid red; padding: 20px; min-width: 20%; }
 <div class="wrapper"> <div class="containers"> <div class="columns">This is<br />the highest<br />column</div> <div class="columns">One line</div> <div class="columns">Four<br />lines<br />the highest<br />column</div> </div> <div class="containers"> <div class="columns">One line</div> <div class="columns">Two<br>lines</div> <div class="columns">One line</div> </div> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM