引导程序-将按钮对准卡的底部


81

我正在偷看一个使用card-deckandcard类的Bootstrap示例(Pricing示例)。我想知道,如果其中一个列表的项目少于其他列表,如何解决按钮对齐问题。

对齐问题

我希望所有按钮都垂直对齐(在每张卡的底部),但我想不出一种方法。我尝试设置.align-bottom类以及将按钮包装在中<div class="align-text-bottom">。我还尝试了有关添加空间的问题的一些建议,但是仍然没有成功(间隔也应该是可变的,以便它可以填充列表中的剩余空间)。

包裹<div class="card-footer bg-white">没有产生期望的结果,因为它没有对齐卡片底部的按钮,并且在卡片周围产生了某种边框。

有人有主意吗?

编辑:这是一个类似于问题的jsfiddle


2
您始终可以将其定位为absolute, bottom:0, margin:0 auto,并将其父对象设置为position: relative
Ferran Buireu

@Paulie_D我尝试设置,style="margin-top: auto;"但是不会改变情况。该按钮正好位于之前的位置。看到这个小提琴
a_guest

Answers:


162

您可以使用以下Bootstrap 4修饰符类:

  1. 添加d-flex.card-body
  2. 添加flex-column.card-body
  3. 添加mt-auto.btn嵌套.card-body

小提琴

请参阅此页面以获取Bootstrap 4的flexbox修改类的完整列表。


2
我确实也必须在.card-body上将“ h-100”设置为100%的高度才能工作,但也许是我的错?感谢您的答复!
Rustyjim

20

这里回答了类似的问题。

只需将align-self-end类添加到项目以在底部对齐。

https://www.codeply.com/go/Fiorqv1Iz6

     <div class="card-body d-flex flex-column">
            <h1 class="card-title pricing-card-title">$15 <small class="text-muted">/ mo</small></h1>
            <ul class="list-unstyled mt-3 mb-4">
              <li>20 users included</li>
              <li>10 GB of storage</li>
            </ul>
            <button type="button" class="align-self-end btn btn-lg btn-block btn-primary" style="margin-top: auto;">Get started</button>
     </div>

默认情况下,card显示为display:flex,但card-body不是。因此,您需要添加d-flex flex-column到中card-body。这将使flexbox对齐类起作用。

另一种选择是mt-auto在按钮上使用(自动上边距),将其推到卡的底部。


在4.4.1中似乎该卡不是可弯曲的,我需要在.card中添加.d-flex才能使其正常工作
Pablo Pazos

6

.card-bodydiv设置为display:flexflex-direction:column

然后给出按钮margin-top:auto

我想这里有Bootstrap帮助类。

.card-body {
  display: flex;
  flex-direction: column;
}

button.btn {
  margin-top: auto;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-beta.2/css/bootstrap.css" rel="stylesheet" />
<div class="container">
  <div class="card-deck mb-3 text-center">
    <div class="card mb-4 box-shadow">
      <div class="card-header">
        <h4 class="my-0 font-weight-normal">Free</h4>
      </div>
      <div class="card-body">
        <h1 class="card-title pricing-card-title">$0 <small class="text-muted">/ mo</small></h1>
        <ul class="list-unstyled mt-3 mb-4">
          <li>10 users included</li>
          <li>2 GB of storage</li>
          <li>Email support</li>
          <li>Help center access</li>
          <li>10 users included</li>
          <li>2 GB of storage</li>
          <li>Email support</li>
          <li>Help center access</li>
        </ul>
        <button type="button" class="btn btn-lg btn-block btn-outline-primary">Sign up for free</button>
      </div>
    </div>

    <div class="card mb-4 box-shadow">
      <div class="card-header">
        <h4 class="my-0 font-weight-normal">Enterprise</h4>
      </div>
      <div class="card-body">
        <h1 class="card-title pricing-card-title">$29 <small class="text-muted">/ mo</small></h1>
        <ul class="list-unstyled mt-3 mb-4">
          <li>30 users included</li>
          <li>15 GB of storage</li>
          <li>Phone and email support</li>
          <li>Help center access</li>
        </ul>
        <button type="button" class="btn btn-lg btn-block btn-primary">Contact us</button>
      </div>
    </div>
  </div>


3

您必须添加:

<div class="card-footer">
<button type="button" class="btn btn-primary btn-sm btn-block" onclick="location.href = '';">BUY NOW </button>
</div>

2

使用页脚,它已经为您完成了所有设置。

<div class="card-deck">
<div class="card">
   <div class="card-body">
      <h4 class="card-title">Title goes here</h4>
      <p class="card-text">Ut leo enim, fermentum fermentum tempor sit amet, vehicula in felis. Pellentesque a arcu augue. Nam eu malesuada lorem. Curabitur et molestie lacus.</p>
   </div>
   <div class="card-footer text-muted mx-auto">
      <button type="button" class="btn btn-sm btn-outline-secondary">Click me!</button>
   </div>
</div>

然后,您可以选择设置card-footer元素的样式。

.card-footer {
  background: transparent;
  border-top: 0px;
}

演示:https : //jsfiddle.net/rustynox/203zwyq6/


0

Flex是您的朋友

像这样的东西会起作用:

.flex-wrap {
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-align-items: inherit;
  -ms-flex-align: inherit;
  align-items: inherit;
}

.flex-container {
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
  -webkit-justify-content: space-between;
  -ms-flex-pack: justify;
  justify-content: space-between;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  background: #eee;
  border: 1px solid #ccc;
  margin: 10px;
  padding: 10px;
}


.flex-item {
  -webkit-flex: 0 1 auto;
  -ms-flex: 0 1 auto;
  flex: 0 1 auto;
}


.fill{
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

.btn{
  background:#069;
  padding:10px;
  color:#fff;
}
<div class="flex-wrap">

  <div class="flex-container">
    <div class="flex-item">FREE</div>
    <div class="flex-item fill">
      <h2>$0</h2>
      <p>Some text ... ashd iaush diuhasd uhasd aiusdh iaush d haisduhaiusdh iaush d haisduh aisuhd ias u</p>
    </div>
    <div class="flex-item">
      <a href="#" class="btn">SIGN UP</a>
    </div>
  </div>

  <div class="flex-container">
    <div class="flex-item">PRO</div>
    <div class="flex-item fill">
      <h2>$10</h2>
      <p>Some text ... ashd iaush uhasd aiusdh iaush d haisduhdiuhasd aiusdh iuhasd aiusdh iaush d haisduhaush d haisduh aisuhd ias u</p>
    </div>
    <div class="flex-item">
      <a href="#" class="btn">GET STARTED</a>
    </div>
  </div>

  <div class="flex-container">
    <div class="flex-item">ENTERPRISE</div>
    <div class="flex-item fill">
      <h2>$20</h2>
      <p>Some text ... ashd iaush diuhasd aiusdh iaush d haisduh aisuhd ias u</p>
    </div>
    <div class="flex-item">
      <a href="#" class="btn">CONTACT</a>
    </div>
  </div>
  
</div>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.