Bootstrap卡片标题 - 所有卡片高度相同

4

我在两个网页上使用Bootstrap卡片。在一个页面上,标题文本是固定的,因此我可以使用min-height来匹配它们的card-header高度。在第二个页面上,这些卡片将会被生成,因此我不知道文本长度和单词。我希望一排中所有卡头的高度都相同。

有没有办法根据一行中最大的card-header计算min-height?

我已经使用了card-deck。据我所知,这是为整个卡片的高度而设计的,我的问题在于card-header。通常情况下,所有卡片的高度都相同。

enter image description here

例子:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <title>Bootstrap Example</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    </head>
    <body>
     
    <div class="container">
            <div class="card-deck my-3 text-center">
                <div class="card mb-4 box-shadow">
                    <div class="card-header align-items-center d-flex
                justify-content-center card-header-height">
                        <h4 class="my-0 font-weight-normal">Lorem Ipsum Lorem Ipsum Lorem Ipsum Ipsum</h4>
                    </div>
                    <div class="card-image">
                        <img class="img-fluid" src="img_avatar1.png">
                    </div>
                    <div class="card-body">
                        <ul class="list-unstyled mt-3 mb-4">
                        </ul>
                    </div>
                </div>
                <div class="card mb-4 box-shadow">
                    <div class="card-header align-items-center d-flex
                justify-content-center card-header-height">
                        <h4 class="my-0 font-weight-normal">Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum </h4>
                    </div>
                    <div class="card-image">
                        <img class="img-fluid" src="img_avatar1.png">
                    </div>
                    <div class="card-body">
                        <ul class="list-unstyled mt-3 mb-4">
                        </ul>
                    </div>
                </div>
                <div class="card mb-4 box-shadow">
                    <div class="card-header align-items-center d-flex
                justify-content-center card-header-height">
                        <h4 class="my-0 font-weight-normal">Lorem Ipsum Lorem Ipsum </h4>
                    </div>
                    <div class="card-image">
                        <img class="img-fluid" src="img_avatar1.png">
                    </div>
                    <div class="card-body">
                        <ul class="list-unstyled mt-3 mb-4">
                        </ul>
                    </div>
                </div>
            </div>
    </div>
    </body>
    </html>

更新 在将列表(ul)和列表项(li)添加到卡片正文后,我遇到了同样的问题。花了我几个小时才弄清楚为什么卡片头部的高度不再起作用了。确保您的li文本长度相似。我的一个li太长了,所以它变成了两行,这又破坏了卡片头部的整体外观。

1个回答

6
你快要完成了。你只需要在 card-header 中使用 h-100 类,确保高度为 100%,同时添加 d-flex 类即可。 演示地址:

<!DOCTYPE html>
<html lang="en">

<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</head>

<body>

  <div class="container">
    <div class="card-deck my-3 text-center">
      <div class="card mb-4 box-shadow">
        <div class="card-header d-flex align-items-center justify-content-center h-100">
          <h4 class="my-0 font-weight-normal">Lorem Ipsum Lorem Ipsum Lorem Ipsum Ipsum</h4>
        </div>
        <div class="card-image">
          <img class="img-fluid" src="https://via.placeholder.com/150">
        </div>
        <div class="card-body">
          <ul class="list-unstyled mt-3 mb-4">
          </ul>
        </div>
      </div>
      <div class="card mb-4 box-shadow">
        <div class="card-header d-flex align-items-center justify-content-center h-100">
          <h4 class="my-0 font-weight-normal">Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum </h4>
        </div>
        <div class="card-image">
          <img class="img-fluid" src="https://via.placeholder.com/150">
        </div>
        <div class="card-body">
          <ul class="list-unstyled mt-3 mb-4">
          </ul>
        </div>
      </div>
      <div class="card mb-4 box-shadow">
        <div class="card-header d-flex align-items-center justify-content-center h-100">
          <h4 class="my-0 font-weight-normal">Lorem Ipsum Lorem Ipsum </h4>
        </div>
        <div class="card-image">
          <img class="img-fluid" src="https://via.placeholder.com/150">
        </div>
        <div class="card-body">
          <ul class="list-unstyled mt-3 mb-4">
          </ul>
        </div>
      </div>
    </div>
  </div>
</body>

</html>


1
@Yaerox 这应该可以 - 但是你可以使用 iPad 的媒体查询来确保高度保持为 100%。你想让我添加 iPad 的媒体查询吗? - Always Helping
通过使用h-100,我可以删除所有修改我的卡片的媒体查询。尽管你的代码片段没有问题,但我在我的代码中仍然遇到了同样的问题。我找不到任何媒体查询会因为设备宽度的改变而被激活。你有什么提示吗?--更新:好的,我认为问题出现在当我向card-body中添加<li>元素时。现在要检查这个问题。 - Yaerox
1
@Yaerox 我非常怀疑在这种结构下可能实现不了,因为行和col-md-4在这里阻止了我们 :( - Always Helping
所以我找到了一种对我有效的方法。我试图将其复制到JSFiddle中以分享我的解决方案,但在JSFiddle中它的工作方式与在我的开发环境中不同... https://jsfiddle.net/1dyor4pu/ 基本上我再次添加了card-deck并在col-md-4上使用了d-flex。不确定这是否有助于某人 :) - Yaerox
只要我在<div class="card-header"></div>内部放置一个<div class="row"></div>,它就停止工作了。不使用<row>是一个难以实现的建议。还有其他建议吗? - Vishal
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接