Así que estoy tratando de crear una tarjeta simple con solo una imagen de fondo y un botón, con el enlace de los botones extendido por toda la tarjeta. Sin embargo, el botón no se ve horrible en la parte inferior, pero si uso una posición absoluta, elimina el enlace estirado.
<template> <div> <h2>College Management Home</h2> <b-card class="sCardHome m-3" header="Courses" overlay img-src="https://picsum.photos/325/200/?image=26" img-alt="Card Image" > <b-button class="stretched-link homebtn" :to="{ name: 'viewCourses'}" variant="primary">View Courses</b-button> </b-card> <b-card class="sCardHome m-3" header="Lecturers" overlay img-src="https://picsum.photos/325/200/?image=27" img-alt="Card Image" > <b-button class="homebtn stretched-link" :to="{ name: 'viewLecturers'}" variant="primary">View Lecturers</b-button> </b-card> <b-card class="sCardHome m-3" header="Enrolments" overlay img-src="https://picsum.photos/325/200/?image=30" img-alt="Card Image" > <b-button class="homebtn stretched-link" :to="{ name: 'viewEnrolments'}" variant="primary">View Enrolments</b-button> </b-card> </div> </template> <script> export default { name: 'home', components: {} } </script> <style> .sCardHome { width: 100%; max-width: 20rem; float:left; text-align: center; } .homebtn { /* position: absolute; */ bottom: 15px; } </style>En una nota al margen, ¿hay alguna forma sencilla de que los márgenes de las tarjetas se estiren para llenar el espacio, de modo que la primera tarjeta de una fila esté alineada a la izquierda con el título de la página y la barra de navegación, y la última tarjeta de una fila esté alineada a la derecha con el botón de cierre de sesión, para que los márgenes llenen el espacio en el medio para que todo encaje (en este caso, un margen izquierdo y derecho para la imagen del medio, no se puede codificar de forma rígida, ya que debe responder)? Probé la clase mx-auto, en cada tarjeta y un contenedor div, pero ninguno funcionó en absoluto.
Puede hacer esto con bastante facilidad utilizando flexbox.
Bootstrap proporciona algunas clases de utilidad. Esto incluye utilidades de visualización como d-flex que aplica display: flex a un elemento. Aplicaremos esta tarjeta al cuerpo de la tarjeta a través de la prop body-class en <b-card> .
Luego, para obtener la posición del botón, podemos usar un margen automático. Afortunadamente para nosotros, Bootstrap proporciona utilidades de espaciado para esto. Así que aquí podemos aplicar mt-auto ( margin-top: auto ) para empujar el botón hacia abajo. Si queremos centrar el botón horizontalmente, aplicamos la clase mx-auto ( margin-left: auto; margin-right: auto ) también.
Hay otras formas de colocar elementos con flex, si desea ver algunas alternativas, puede consultar la página de la utilidad flex en los documentos de arranque.
new Vue({ el: "#app" }); <link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap@4.5.3/dist/css/bootstrap.min.css" /> <script src="//unpkg.com/vue@2.6.12/dist/vue.min.js"></script> <script src="//unpkg.com/bootstrap-vue@2.21.2/dist/bootstrap-vue.min.js"></script> <div id="app" class="p-4"> <b-card-group> <b-card v-for="i in 2" class="m-3" header="Courses" overlay img-src="https://picsum.photos/325/200/?image=26" img-alt="Card Image" header-class="text-center" body-class="d-flex"> <b-button class="stretched-link mt-auto mx-auto" variant="primary"> View Courses </b-button> </b-card> </b-card-group> </div>Podrías usar flexbox para hacer que esto funcione. No estoy completamente seguro de si eso funciona con el enlace extendido. Pero tal vez podrías intentarlo. Simplemente agregue "display: flex;" a su sCardHome-Class. Asigne a la clase homebtn una altura estática y establezca el margen en general en automático y el margen inferior en un valor estático. De esta forma el Botón siempre estará en la parte inferior de la tarjeta y centrado.
.sCardHome { width: 100%; max-width: 20rem; float:left; text-align: center; background-color: aqua; display: flex; } .homebtn { margin: auto; margin-bottom: 10px; }