如何根据文本内容使所有div的高度相同?

问题描述 投票:0回答:3

我仍然被一个长期存在的问题所困扰。为了简洁起见,我的网站在无序列表中有 3 个列表项。在我的演示中,列表是绿色框。每个列表项包含一个图像和 3 个 div(标题框、位置框、价格框)。我在这里只关心标题框。我的演示网站是这里:

您可以看到每个标题框具有不同长度的文本,从而降低了位置/价格。我将标题框设置为灰色,以便您可以看到它们。我希望 所有标题框高度都与最大标题框的高度相匹配。我已附上我想要的屏幕截图。

这是 CodePen 中的演示链接——你能帮忙调整一下吗? http://codepen.io/anon/pen/azJKYM

主要无序列表项(包含所有 3 个绿色框)具有 CSS:

                .list
                    {
                        width: 100%;
                        overflow: hidden;
                        display: -webkit-flex;
                        display: -ms-flexbox;
                        display: flex;
                        -webkit-flex-wrap: wrap;
                        -ms-flex-wrap: wrap;
                        flex-wrap: wrap;
                    }

单个列表项(绿色框)有 css:

                .list__item
                    {
                       width: 32%;
                       float: left; /* 10 */
                       display: -webkit-flex;
                       display: -ms-flexbox;
                       display: flex;
                       padding-top: 0.625em;
                       padding-bottom: 0.825em;
                       margin-left:1%;
                       margin-right:0%;
                       position:relative;
                       line-height:40px;
                    }

标题框有CSS:

.titlebox{
    width: 80%;
    height: 10%;
    display: inline-block;
    font-size: 4.2vh;
    font-family: Garamond;
    color: #002000;
    text-align: center;
    line-height: 35px;
    font-weight:bold;
    margin-top: 5%;
    margin-right: 10%;
    margin-bottom: 5%;
    margin-left: 10%;
    background-color:grey;

}

感谢您的帮助!所需结果的屏幕截图如下。

Desired Result

html css list height
3个回答
6
投票

据我所知,这不能用 CSS 来完成,因为这些元素不是兄弟元素。如果结构不同,您可以将它们设置为

display: table-cell
,它们会相互调整。我相信这在当前标记中起作用的唯一方法是使用一点 JavaScript。

您可以简单地循环浏览页面上的每个高度,看看该高度是否大于前一个高度,最后将它们全部设置为最高的高度:

var largest = 0; //start with 0

$(".titlebox").each(function(){ //loop through each section
   var findHeight = $(this).height(); //find the height
   if(findHeight > largest){ //see if this height is greater than "largest" height
      largest = findHeight; //if it is greater, set largest height to this one 
   }  
});

$(".titlebox").css({"height":largest+"px"});

密码笔

更新

要找到一组三个中最高的一个,您可以首先查看

each
父级 .titlebox
ul
,然后运行脚本的其余部分:

$("ul").each(function(){ //loop through each first

  var largest = 0;

  $(this).find(".titlebox").each(function(){ //find each .titlebox within its parent (rest is the same)
     var findHeight = $(this).height();
     if(findHeight > largest){
        largest = findHeight;
     }  
  });

  $(this).find(".titlebox").css({"height":largest+"px"}); //update all .titlebox inside of this ul

});

密码笔2


2
投票

如果您正在寻找纯 HTML/CSS 解决方案

如果我正确理解了你想要完成的任务,那么你分配 div 的方式就会给你带来问题。我会尝试将标题和位置放在同一个 div 中,并将价格保留在其外部,如下所示:

div {
  position: relative;
  width: 200px;
  height: 200px;
  background: yellow;
  text-align: center;
}

p {
  position: absolute;
  left: 75px;
  top: 135px;
}

h3 {
  text-align center;
}
<section>
  <div>
    <h2>this title won't affect the location position</h2>
    <p>location</p>
  </div>
  <h3>outside the div</h3>
</section>

这样,无论您在页眉内放置什么,div 侧都将保持不变,位置位置也将保持不变。


0
投票

您只需将此脚本添加到

$(document).ready(function()                
  {
      var maxHeight = Math.max.apply(null, $("div.titlebox").map(function ()
      {
          return $(this).height();
      }).get());
     
      $("div.titlebox").css('height',maxHeight );
  }
)

更新代码:http://codepen.io/anon/pen/OPpEKj

© www.soinside.com 2019 - 2024. All rights reserved.