html - tooltips bootstrap
Bootstrap: alinee el botón con la parte inferior de la tarjeta (5)
Estaba mirando uno de los ejemplos de Bootstrap que usan el
card-deck
y las clases de
card
(
ejemplo de precios
).
Me preguntaba cómo se puede arreglar la alineación de los botones si una de las listas tiene menos elementos que las demás.
Me gustaría que todos los botones estén alineados verticalmente (en la parte inferior de cada tarjeta) pero no pude encontrar una manera de hacerlo.
Intenté configurar la clase
.align-bottom
, así como
<div class="align-text-bottom">
el botón en
<div class="align-text-bottom">
.
También probé varias sugerencias de
esta pregunta sobre agregar espacio,
pero aún así no tuvo éxito (también el espacio debe ser variable de modo que llene el espacio restante de la lista).
El ajuste en
<div class="card-footer bg-white">
tampoco produjo el resultado deseado, ya que no alinea el botón en la parte inferior de la tarjeta y crea algún tipo de borde a su alrededor.
¿Alguien tiene alguna idea?
Editar: Aquí hay un jsfiddle que se parece al problema.
Flex es tu amigo
Algo como esto funcionará la magia:
.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>
Establezca el div
.card-body
para
display:flex
y
flex-direction:column
.
Luego dale al botón
margin-top:auto
.
Me imagino que hay clases de ayuda Bootstrap para esto.
.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>
Tienes que agregar:
<div class="card-footer">
<button type="button" class="btn btn-primary btn-sm btn-block" onclick="location.href = '''';">BUY NOW </button>
</div>
Una pregunta similar ha sido respondida aquí .
Simplemente agregue la clase
align-self-end
al elemento para alinear en la parte inferior.
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>
Por defecto, la
card
es display: flex, pero el
card-body
la
card-body
no lo es.
Debido a esto, debe agregar
d-flex flex-column
al
card-body
la
card-body
.
Esto hará que las clases de alineación de flexbox funcionen.
Otra opción es usar
mt-auto
(margen superior automático) en el botón que lo empujará hacia la parte inferior de la Tarjeta.
actualizado basado en la adición del enlace jsfiddle
Puede usar las siguientes clases de modificador Bootstrap 4:
-
Agregue
d-flex
al.card-body
-
Agregue
flex-column
a.card-body
-
Agregue
mt-auto
a.btn
anidado en.card-body
Consulte esta página para obtener una lista completa de las clases de modificación de flexbox para Bootstrap 4.