33

我正在尝试创建一个水平的卡片列表,其中一次显示 3 张卡片,其他卡片可以水平滚动,如下所示:

可水平滚动的卡片列表

这可以很容易地用 CSS 完成,但我想用 Bootstrap 来完成。Bootstrap 4 附带了随着材料设计而流行的卡片,它们与 Bootstrap 中的其他任何东西一样易于使用。对于这个例子,它也可以是常规div的,而不是卡片。

我正在努力解决的问题是创建一个可滚动的 X 卡片(或 div)容器,其中一次显示 3 个,其他的溢出到右侧并且是可滚动的。我不确定如何使用 Bootstrap 给卡片(或 div)一个宽度,以便一次显示 3 个,而其他的则位于右侧。

4

5 回答 5

23

现在 Bootstrap 4 Alpha 6 使用了 flexbox,这种水平滚动布局就容易多了。您可以简单地使用flex-rowand flex-nowrap

<div class="container-fluid">
    <div class="row flex-row flex-nowrap">
        <div class="col-3">
            <div class="card card-block">Card</div>
        </div>
        <div class="col-3">
            <div class="card card-block">Card</div>
        </div>
        <div class="col-3">
            <div class="card card-block">Card</div>
        </div>
        <div class="col-3">
            <div class="card card-block">Card</div>
        </div>
        ...
    </div>
</div>

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

更新 2019 引导程序 4.3+

上述方法仍然有效,或者您可以使用卡片容器中的 flexbox utils:https ://www.codeply.com/go/PF4APyGj7F

于 2017-02-08T15:54:34.437 回答
9

最有效的解决方案如下所示。除此之外,flex-nowrap您还需要设置overflow属性以防止整个页面扩展。

overflow属性:

 <!-- CSS only -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

 <h6>Bootstrap 4 horizontally scrollable card groups</h6>
 <div class="d-flex flex-row flex-nowrap overflow-auto">
      <div class="card card-block mx-2" style="min-width: 300px;">Card</div>
      <div class="card card-block mx-2" style="min-width: 300px;">Card</div>
      <div class="card card-block mx-2" style="min-width: 300px;">Card</div>            
</div>

overflow属性:

     <!-- CSS only -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">

     <h6>Bootstrap 4 horizontally scrollable card groups</h6>
     <div class="d-flex flex-row flex-nowrap">
          <div class="card card-block mx-2" style="min-width: 300px;">Card</div>
          <div class="card card-block mx-2" style="min-width: 300px;">Card</div>
          <div class="card card-block mx-2" style="min-width: 300px;">Card</div>            
    </div>

于 2020-05-16T17:54:02.203 回答
4

您可以使用引导水平

安装

在 bootstrap.css 之后包含 bootstrap-horizo​​n.css

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href="/bower_components/bootstrap-horizon/bootstrap-horizon.css">

.row-horizon类添加到.rows需要水平滚动的类。为了改进 UX,bootstrap-horizo​​n 覆盖 bootstrap 的.col-*-*类,使基线宽度为 90% 而不是 100%,这允许显示最后一列的一小部分。

<div class="row row-horizon">
  <div class="col-xs-6 col-sm-4 col-md-3 col-lg-2">
    ...
  </div>
</div>

例子

在此处输入图像描述

于 2016-03-14T20:40:22.647 回答
1

Bootstap 4.3
Scss 文件

.card-deck-scrollable{
  @extend .card-deck;
  flex-direction: row;

  & > .card{
    @extend .mx-3;
    flex: 0 0 40% !important;/*Change to any size you want*/
    max-width: 40%;
  }
}

.html 文件

<div class="card-deck-scrollable flex-nowrap overflow-auto">
  <div class="card">
    <div class="card-body">
      <div class="card-title">Name</div>
    </div>
  </div>
</div>

由于您正在实施水平滚动,我确信所有卡片的所有卡片都必须相同,因此@extend .card-deck;这将确保所有卡片的高度相同。

于 2019-10-06T06:56:05.043 回答
0

要添加到@ikonuk 的答案,如果您有一个使用列的布局,并且希望在每张卡片具有最小长度的列中添加一个水平滚动的卡片列表,您可能会发现“容器”列脱离了网格通过拖动调整浏览器窗口大小时的系统,当您使用

style: min-width: 300px // (or any other value in pixels)

设置卡片的最小宽度。

为了不让列中断,只需使用百分比值作为每张卡片的最小宽度,或者使用引导程序的w-xx类来设置每张卡片的百分比。

(这也可能适用于引导程序 5,但尚未对其进行测试,因为目前在使用引导程序 4 的项目中偶然发现了这一点)

于 2021-10-10T08:04:54.510 回答