这是一个流行的 Bootstrap 问题,所以我更新并扩展了 Bootstrap 3、Bootstrap 4 和 Bootstrap 5 的答案......
引导程序 5(2021 年更新)
Bootstrap 列仍然使用 flexbox,但之前用于创建类似 Masonry 布局的卡片列已被删除。对于 Bootstrap 5,推荐的方法是使用 Masonry JS 插件:
Bootstrap 5 Masonry Example
引导程序 4(2018 年更新)
Bootstrap 4中所有列的高度都相同,因为它默认使用 flexbox,因此“高度问题”不是问题。此外,Bootstrap 4 包括这种类型的多列解决方案:
Bootstrap 4 Masonry cards Demo。
Bootstrap 3(原始答案——预弹性盒)
Bootstrap 3 “高度问题”发生是因为列使用float:left
. 当一列“浮动”时,它会脱离文档的正常流程。它向左或向右移动,直到触及其包含框的边缘。因此,当柱高不均匀时,正确的做法是将它们堆叠到最近的一侧。
注意:以下选项适用于单个列中包含超过 12 个列单位的列换行方案。对于不理解为什么会有超过 12 个列连续的读者,或者认为解决方案是“使用单独的行”的读者应该先阅读这篇文章.row
有几种方法可以解决这个问题..(2018 年更新)
1 - 像这样的“clearfix”方法(由 Bootstrap 推荐)(需要每X列迭代一次)。这将强制每X列换行...
<div class="row">
<div class="col-md-4">Content</div>
<div class="col-md-4">Content</div>
<div class="col-md-4">Content</div>
<div class="clearfix"></div>
<div class="col-md-4">Content</div>
<div class="col-md-4">Content</div>
<div class="col-md-4">Content</div>
<div class="clearfix"></div>
<div class="col-md-4">Content</div>
<div class="col-md-4">Content</div>
<div class="col-md-4">Content</div>
</div>
Clearfix 演示(单层)
Clearfix 演示(响应层) - 例如。col-sm-6 col-md-4 col-lg-3
还有一个CSS-only 变体'clearfix'
CSS-only clearfix with tables
**2 - 使列的高度相同(使用 flexbox):**
由于问题是由高度差异引起的,您可以使每行的列高度相等。Flexbox 是做到这一点的最佳方式,并且在 Bootstrap 4 中原生支持...
.row.display-flex {
display: flex;
flex-wrap: wrap;
}
.row.display-flex > [class*='col-'] {
display: flex;
flex-direction: column;
}
Flexbox 等高演示
**3 - 使用 inline-block 来取消浮动列..**
同样,高度问题只是因为列是浮动的而发生的。另一种选择是将列设置为display:inline-block
和float:none
。这也为垂直对齐提供了更大的灵活性。但是,使用此解决方案,列之间必须没有 HTML 空白,否则inline-block 元素会有额外的空间并且会过早换行。
内联块修复演示
4 - CSS3 列方法(砌体/Pinterest 类似的解决方案)..
这不是 Bootstrap 3 原生的,而是另一种使用CSS 多列的方法。这种方法的一个缺点是列顺序是从上到下而不是从左到右。Bootstrap 4 包括这种类型的解决方案:
Bootstrap 4 Masonry cards Demo。
Bootstrap 3 多列演示
5 - 砌体 JavaScript/jQuery 方法
最后,您可能需要使用 Isotope/Masonry 等插件:
Bootstrap砌体演示
砌体演示2
更多关于 Bootstrap 可变高度列