我可以在没有位置的卡片底部放置一个按钮:absolute;? (vue-bootstrap)

Posted

技术标签:

【中文标题】我可以在没有位置的卡片底部放置一个按钮:absolute;? (vue-bootstrap)【英文标题】:Can I position a button at the bottom of a card without position: absolute;? (vue-bootstrap) 【发布时间】:2022-01-19 00:52:35 【问题描述】:

所以我试图创建一个只有背景图像和按钮的简单卡片,按钮链接被拉伸到整个卡片上。虽然按钮看起来很糟糕,但不是在底部,但如果我使用绝对位置,它会删除拉伸的链接。

<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-
        >
            <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-
        >
            <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-
        >
            <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>

附带说明一下,有没有一种简单的方法可以让卡片的边距拉伸以填充空间,所以一行中的第一张卡片与页面和导航栏标题左对齐,而最后一张卡片是与注销按钮右对齐,所以边距填充了中间的空间,所以它都适合(在这种情况下,中间图片的左右边距,虽然需要响应,但不能硬编码)?我在每张卡片和一个 div 容器上尝试了 mx-auto 类,但都没有工作。

【问题讨论】:

你能提供你的css吗? hometbn、stretched-link 和 sCardHome 类的当前内容是什么? css 在底部的样式标签中,但 stetched-link 是一个引导类 哦,对不起,我太笨了,不能滚动 xD 哈哈,不用担心 【参考方案1】:

使用 flexbox 可以很容易地做到这一点。

Bootstrap 提供了一些实用程序类。这包括 display utilities 之类的 d-flex,它将 display: flex 应用于元素。 我们将通过&lt;b-card&gt; 上的body-class 属性将此卡应用到卡体。

然后要获得按钮位置,我们可以使用自动边距。幸运的是,Bootstrap 为此提供了spacing utilities。所以在这里我们可以申请mt-auto (margin-top: auto) 将按钮推到底部。如果我们想让按钮水平居中,我们也应用mx-auto (margin-left: auto; margin-right: auto) 类。

还有其他使用 flex 定位元素的方法,如果您想查看一些替代方法,可以查看引导文档上的 flex utility 页面。

示例:

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- 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>

【讨论】:

解决了!效果很好,谢谢!【参考方案2】:

您可以使用 flexbox 来完成这项工作。我不完全确定这是否适用于拉伸链接。但也许你可以试试。只需添加“显示:弹性;”到您的 sCardHome-Class。给 homebtn-class 一个静态高度,一般将 margin 设置为 auto,margin-bottom 设置为静态值。这样,按钮将始终位于卡片底部并居中。

.sCardHome 
    width: 100%;
    max-width: 20rem;
    float:left;
    text-align: center;
    background-color: aqua;
    display: flex;

.homebtn 
    margin: auto;
    margin-bottom: 10px;

【讨论】:

感谢您的帮助,我试过了,您的建议也有一些变化,但不幸的是它不起作用。没有什么可以按下按钮,它保持在顶部。是否需要为卡片和按钮设置静态高度? 抱歉,卡片高度是用于测试的。我删除了它。我测试了按钮高度。真的没必要。

以上是关于我可以在没有位置的卡片底部放置一个按钮:absolute;? (vue-bootstrap)的主要内容,如果未能解决你的问题,请参考以下文章

将锚标记对齐到 2 个 div 的底部,没有绝对位置 [重复]

无论vuetify中的文本如何,如何在卡片中底部对齐按钮?

如何在 ScrollView 内的 LinearLayout 底部放置按钮

带有表单 POST 按钮的 Bootstrap 4 卡片 - 无法与卡片底部对齐

Flutter:如何让卡片可点击?

如何在 Swiftui 的主视图底部的滚动视图中放置一个非粘性按钮? Spacer 在滚动视图中似乎没有效果