bootstrap 网格不均匀列

bootstrap grid uneven columns

我正在使用 bootstrap 4 网格。我有 3 列。我希望第一列和第三列为 col-8,第二列为 col-4。基本上第二列是一个侧边栏,我想在小屏幕上放在第一列和第三列之间。不幸的是,我的第二列具有动态高度并且很长,因此第一列被分配了第二列的高度,第三列从第二列的底部开始,第一列和第三列之间有很多 space 。我希望第 3 栏位于第一栏的正文下方。

我希望这是有道理的。

这是我正在尝试做的事情的图像:

<div class="container">
    <div class="row ">
      <div class="col-sm-8 ">
        <div>One of three columns</div>
        <div>One of three columns</div>
      </div>
      <div class="col-sm-4 ">
        <div>Two of three columns</div>
        <div>Two of three columns</div>
        <div>Two of three columns</div>
        <div>Two of three columns</div>
        <div>Two of three columns</div>
        <div>Two of three columns</div>
      </div>
      <div class="col-sm-8">
        <div>three of three columns</div>
        <div>three of three columns</div>
        <div>three of three columns</div>
      </div>
    </div>
  </div>

我唯一能做到这一点的方法是删除行 class 并在下面的每个示例中添加浮点数

<div class="container">
            <div class=" ">
                <div class="col-md-8 grey  float-left">
                            <div>main content</div>
                            <div>main content</div>
                        </div>
                    </div>
                    <div class="col-md-4  blue float-right ">
                                <div>side content</div>
                                <div>side content</div>
                                <div>side content</div>
                                <div>side content</div>
                                <div>side content</div>
                        </div>

                    <div class="col-md-8 pink float-left">
                            <div>main2 content</div>
                            <div>main2 content</div>
                            <div>main2 content</div>
                    </div>
            </div>
        </div>

如果您不介意复制边栏,可以将边栏副本放在第 1 列和第 3 列之间,并在小屏幕上显示它,同时在右侧隐藏另一个。在大屏幕上,您可以执行相反的操作以在右侧显示边栏,同时隐藏第 1 列和第 3 列之间的副本。

HTML

<div class="container">
  <div class="row">
    <div class="col-sm-8">
        <section class="mb-3">
            column 1
        </section>
        <section class="mb-3 d-sm-none">
            copy of column 2
        </section>
        <section class="mb-3">
            column 3
        </section>
    </div>
    <div class="col-sm-4">
        <section class="mb-3 d-none d-sm-block">
            column 2
        </section>
    </div>
  </div>
</div>

结果

在小屏幕上:

在更大的屏幕上:

fiddle: http://jsfiddle.net/aq9Laaew/243819/

Bootstrap 5(2021 年更新)

Bootstrap 5 还对网格使用 flexbox rows/columns。因此响应式地使用 d-block 仍然有效,但是 float-left 已被替换为 float-start

Bootstrap 4(原答案)

基本上这个已经.

Bootstrap 4 是 flexbox,因此所有列的高度都与最高列相同。通常,您可以通过嵌套列来解决此问题,但这样您将无法获得所需的列顺序。解决方法是像这样使用浮点数:

<div class="container">
    <div class="row d-sm-block">
      <div class="col-sm-8 float-left">
        <div>One of three columns</div>
        <div>One of three columns</div>
      </div>
      <div class="col-sm-4 float-right">
        <div>Two of three columns</div>
        <div>Two of three columns</div>
        <div>Two of three columns</div>
        <div>Two of three columns</div>
        <div>Two of three columns</div>
        <div>Two of three columns</div>
      </div>
      <div class="col-sm-8 float-left">
        <div>three of three columns</div>
        <div>three of three columns</div>
        <div>three of three columns</div>
      </div>
    </div>
</div>

演示:https://codeply.com/go/0bUA8clMdI(为可视化添加了边框)

这可以使用 row 中的 d-sm-block 使行 display:block 而不是 display:flex sm 及以上。这允许 float-* 在列上工作并且第二列被拉到右边。

您可以在列中写入行列

试试这个

<div class="container border border-primary">
<div class="row border border-primary">
    <div class="border border-primary col-lg-8 col-md-12 col-sm-12" style="height:200px">
        <div class="row border border-secondary">
            <div class="border border-secondary col-lg-12 col-md-12 col-sm-12" style="height:100px">
                <!--content for 1-->
            </div>
            <div class="border border-secondary col-lg-12 col-md-12 col-sm-12" style="height:100px">
                <!--content for 2-->
            </div>
        </div>
    </div>
    <div class="border border-primary col-lg-4 col-md-6 col-sm-6" style="height:200px">
        <!-content for 3-->
    </div>
</div>