【问题标题】:Bootstrap 4: Why isn't this aligned to the bottom?Bootstrap 4:为什么这不与底部对齐?
【发布时间】:2019-04-18 21:27:02
【问题描述】:

我有一张卡片,里面是一张图片,然后是一个标题。然后,我想在卡片底部有一个段落并一直链接。我在 CSS 中定义了一个 min-height 来腾出空间。但是,下面的代码只是从上到下流动,底部有空格而不是内容。

            <div class="col-lg-4">
                <div class="card shadow">
                    <img class="card-img-top" src="https://source.unsplash.com/random/1600x900?house" alt="Card image cap">
                    <div class="card-body">
                        <h5 class="card-title text-center">47 Dream Homes You'll Wish You Could Afford</h5>
                        <div class="text-center d-block align-items-end">
                            <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos odio possimus labore ratione!.</p>
                            <a href="#" class="btn btn-primary">Go somewhere</a>
                        </div>
                    </div>
                </div>
            </div>

这是它的样子,我希望 lorem ipsum 和按钮正对底部,标题在顶部。

【问题讨论】:

    标签: css twitter-bootstrap bootstrap-4


    【解决方案1】:

    让我提出一个替代解决方案;一种不需要额外的 CSS 而是依赖于 Bootstrap 现有框架的方法。 .card-footer 类是 Card 组件的一部分,可以很好地与您想要的结果集成。

    要达到相同的高度,您可以依赖.card-deck 或简单地将.h100 类应用于.card 包装器。由于不清楚如何将此设计应用于多张卡片,以下示例依赖于.h100

    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
    
    <div class="container-fluid">
      <div class="row">
      
        <div class="col-sm-6 col-lg-4">
          <div class="card h-100 shadow">
            <img class="card-img-top" src="https://source.unsplash.com/random/1600x900?house" alt="Card image cap">
            <div class="card-body">
              <h5 class="card-title text-center">47 Dream Homes You'll Wish You Could Afford</h5>
            </div>
    
            <div class="card-footer bg-white border-top-0 text-center">
              <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos odio possimus labore ratione!.</p>
              <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
          </div>
        </div>
    
        <div class="col-sm-6 col-lg-4">
          <div class="card h-100 shadow">
            <img class="card-img-top" src="https://source.unsplash.com/random/1600x900?house" alt="Card image cap">
            <div class="card-body">
              <h5 class="card-title text-center">47 Dream Homes You'll Wish You Could Afford</h5>
            </div>
    
            <div class="card-footer bg-white border-top-0 text-center">
              <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos odio possimus labore ratione! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos odio possimus labore ratione! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos odio possimus labore ratione!</p>
              <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
          </div>
        </div>
           
        <div class="col-sm-6 col-lg-4">
          <div class="card h-100 shadow">
            <img class="card-img-top" src="https://source.unsplash.com/random/1600x900?house" alt="Card image cap">
            <div class="card-body">
              <h5 class="card-title text-center">47 Dream Homes You'll Wish You Could Afford</h5>
            </div>
    
            <div class="card-footer bg-white border-top-0 text-center">
              <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos odio possimus labore ratione! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos odio possimus labore ratione!</p>
              <a href="#" class="btn btn-primary">Go somewhere</a>
            </div>
          </div>
        </div>
    
      </div>
    </div>

    现在默认情况下.card-footer 应用顶部边框以及稍暗的背景。我们可以通过应用.bg-white 修改背景颜色和.border-top-0 删除顶部边框来覆盖这些样式。没有理由将其声明为块元素,并且将文本居中就像应用 .text-center 一样简单。

    不涉及min-height CSS。

    有关卡片组件如何分组的更多信息,请查看Bootstrap's 4.x documentation on Card layou

    【讨论】:

      【解决方案2】:

      您必须将 card-body 设为 flex-column,然后使用 Bootstrap 实用程序类将元素推到底部进行对齐。

      Bootstrap Flex Utilities

      因此,我们将.d-flex.flex-column 应用于.card-body div,并将.mt-auto 应用于包含您的段落和按钮的div。

      .card {
        height: 600px;
        /* artificial height */
      }
      <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
      <div class="container">
        <div class="row">
          <div class="col-lg-4">
            <div class="card shadow">
              <img class="card-img-top" src="https://source.unsplash.com/random/1600x900?house" alt="Card image cap">
              <div class="card-body d-flex flex-column">
                <h5 class="card-title text-center">47 Dream Homes You'll Wish You Could Afford</h5>
                <div class="text-center d-block mt-auto">
                  <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eos odio possimus labore ratione!.</p>
                  <a href="#" class="btn btn-primary">Go somewhere</a>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>

      【讨论】: