如何对齐轮播中的卡片 - Bootstrap 5?

How to align cards in carousel - Bootstrap 5?

我在轮播中有简单的 Bootstrap 5 张卡片。卡片文字少时卡片高度变小,轮播边滑边跳

如何在不使用固定值的情况下将卡片拉伸到与最高卡片相同的高度?

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<div id="demo" class="carousel slide" data-bs-ride="carousel" style="background-color:powderblue;">
  
  <!-- The slideshow/carousel -->
  <div class="carousel-inner">
    <div class="carousel-item active">
      <div class="container mt-3">
        <h2>Basic Card 1</h2>
        <div class="card">
          <div class="card-body">Basic card</div>
          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed facilisis ac justo 
         eget congue. Quisque commodo dignissim commodo. Vivamus feugiat quam id urna 
         tempor, a rhoncus libero sollicitudin. Vivamus scelerisque tortor ac elit fringilla 
         cursus. Suspendisse vitae dui sapien. Suspendisse at metus sed lacus faucibus 
         dictum. Nam mollis, ex id viverra fermentum, mauris lectus sodales erat, vitae 
         fringilla risus leo nec magna. Mauris luctus iaculis pretium. Nullam elit mi, 
         laoreet a felis ut, ullamcorper maximus nibh. Donec non dolor eu lectus condimentum 
         consectetur. Vivamus venenatis hendrerit nulla quis vestibulum.</p>
       </div>
     </div>
    </div>
   <div class="carousel-item">
     <div class="container mt-3">
     <h2>Basic Card 2</h2>
     <div class="card">
     <div class="card-body">Basic card</div>
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed facilisis ac justo eget 
     congue. Quisque commodo dignissim commodo. Vivamus feugiat quam id urna tempor, a 
     rhoncus libero sollicitudin. Vivamus scelerisque tortor ac elit fringilla cursus. 
     Suspendisse vitae dui sapien. Suspendisse at metus sed lacus faucibus dictum. Nam 
     mollis, ex id viverra fermentum, mauris lectus sodales erat, vitae fringilla risus leo 
     nec magna. Mauris luctus iaculis pretium. Nullam elit mi, laoreet a felis ut, 
     ullamcorper maximus nibh. Donec non dolor eu lectus condimentum consectetur. Vivamus 
     venenatis hendrerit nulla quis vestibulum. In rhoncus purus sit amet urna luctus 
     finibus. Nulla varius imperdiet sem, vel lacinia purus elementum id.</p>
  </div>
 </div>
    </div>
    <div class="carousel-item">
      <div class="container mt-3">
  <h2>Basic Card 3</h2>
  <div class="card">
    <div class="card-body">Basic card</div>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed facilisis ac justo eget congue. Quisque commodo dignissim commodo. Vivamus feugiat quam id urna tempor, a rhoncus libero sollicitudin. .</p>
  </div>
      </div>
    </div>
 </div>
  
  <button class="carousel-control-prev" type="button" data-bs-target="#demo" data-bs-slide="prev">
    <span class="carousel-control-prev-icon"></span>
  </button>
  <button class="carousel-control-next" type="button" data-bs-target="#demo" data-bs-slide="next">
    <span class="carousel-control-next-icon"></span>
  </button>
</div>

```

我已经创建了一些 CSS 来调整 BS5 滑块,使其适用于具有不同高度的幻灯片。

此外,我已经根据 to BS5 docs:

更新了卡片的结构
  • card-title
  • card-text

我知道这只是示例,但无论如何,我这样做只是为了更好看。

查看我添加到 CSS 部分的评论以了解更多详细信息。

/* updated carousel element to add gaps around cards */
.carousel {
  background-color: powderblue;
  padding-top: 1rem;
  padding-bottom: 1rem;
}

/* make inner block flex to stretch slides */
.carousel-inner {
  display: flex;
}

/* make flex item to stretch parent container to max child height */
.carousel-item {
  display: flex !important;
  /* animate carousel item opacity property */
  opacity: 0;
  transition: transform .6s ease-in-out, opacity .3s ease-in-out !important;
}

/* animate carousel item opacity property */
.carousel-item.active {
  opacity: 1;
  z-index: 1;
}
.carousel-item-start,
.carousel-item-next {
  opacity: 1;
}
/* end of animating of opacity */

/* added for example purpose (make arrows darker) */
.carousel-control-prev-icon,
.carousel-control-next-icon {
  filter: brightness(0);
}

/* adjusting (stretching) slide's card to max height */
.carousel-item .container {
  display: flex;
  flex-direction: column;
}
.carousel-item .card {
  flex-grow: 1;
}
/* end of adjusting */


/* play around this classes to animate it like you want */
/*
.carousel-item-end
.carousel-item-next
.carousel-item-prev
.carousel-item-start
*/
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>

<div id="demo" class="carousel slide" data-bs-ride="carousel">
  <!-- The slideshow/carousel -->
  <div class="carousel-inner">
    <div class="carousel-item active">
      <div class="container mt-3">
        <h2>Basic Card 1</h2>
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">Basic card</h5>
            <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed facilisis ac justo eget congue. Quisque commodo dignissim commodo. Vivamus feugiat quam id urna tempor, a rhoncus libero sollicitudin. Vivamus scelerisque tortor ac elit fringilla
              cursus. Suspendisse vitae dui sapien. Suspendisse at metus sed lacus faucibus dictum. Nam mollis, ex id viverra fermentum, mauris lectus sodales erat, vitae fringilla risus leo nec magna. Mauris luctus iaculis pretium. Nullam elit mi, laoreet
              a felis ut, ullamcorper maximus nibh. Donec non dolor eu lectus condimentum consectetur. Vivamus venenatis hendrerit nulla quis vestibulum.</p>
          </div>
        </div>
      </div>
    </div>
    <div class="carousel-item">
      <div class="container mt-3">
        <h2>Basic Card 2</h2>
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">Basic card</h5>
            <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed facilisis ac justo eget congue. Quisque commodo dignissim commodo. Vivamus feugiat quam id urna tempor, a rhoncus libero sollicitudin. Vivamus scelerisque tortor ac elit fringilla
              cursus. Suspendisse vitae dui sapien. Suspendisse at metus sed lacus faucibus dictum. Nam mollis, ex id viverra fermentum, mauris lectus sodales erat, vitae fringilla risus leo nec magna. Mauris luctus iaculis pretium. Nullam elit mi, laoreet
              a felis ut, ullamcorper maximus nibh. Donec non dolor eu lectus condimentum consectetur. Vivamus venenatis hendrerit nulla quis vestibulum. In rhoncus purus sit amet urna luctus finibus. Nulla varius imperdiet sem, vel lacinia purus elementum
              id.
            </p>
          </div>
        </div>
      </div>
    </div>
    <div class="carousel-item">
      <div class="container mt-3">
        <h2>Basic Card 3</h2>
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">Basic card</h5>
            <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed facilisis ac justo eget congue. Quisque commodo dignissim commodo. Vivamus feugiat quam id urna tempor, a rhoncus libero sollicitudin. .</p>
          </div>
        </div>
      </div>
    </div>
  </div>

  <button class="carousel-control-prev" type="button" data-bs-target="#demo" data-bs-slide="prev">
    <span class="carousel-control-prev-icon"></span>
  </button>
  <button class="carousel-control-next" type="button" data-bs-target="#demo" data-bs-slide="next">
    <span class="carousel-control-next-icon"></span>
  </button>
</div>