我个人会自己构建一个 flexbox,而不是使用 Bootstrap 的 Grid 系统,因为这样我可以在项目上添加自己的填充并计算它们之间的统一间距。
<section class="items">
<a href="#" class="item">
<figure />
</a>
<a href="#" class="item">
<figure />
</a>
...
</section>
首先,您要制作.items
为 flexbox,显示为可折叠的行:
@import "../node_modules/bootstrap/scss/functions";
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
.items {
display: flex;
flex-flow: row wrap;
}
我在这里使用 SASS,但您可以在演示中看到生成的 CSS。
我还看到你在每一列都有.col-6
, .col-sm-4
, etc 类。您可以通过设置.item
每个断点的宽度来复制它:
@import "../node_modules/bootstrap/scss/functions";
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
.items {
display: flex;
flex-flow: row wrap;
.item {
width: calc(100%/2); // 2 per row
@include media-breakpoint-up(sm) {
width: calc(100%/3); // 3 per row
}
@include media-breakpoint-up(md) {
width: calc(100%/4); // 4 per row
}
@include media-breakpoint-up(lg) {
width: calc(100%/6); // 6 per row
}
}
}
现在是计算两个.item
s 之间的间距的时候了。事实上,如果你在 each 上添加填充,.item
它们中的 2 个之间的间距将加倍。但是您可以通过在其父 flexbox 上添加一半的装订线/间距来轻松适应这种情况,.items
.
如果您使用 SASS 会更容易,因为您可以为所需的装订线间距声明一个变量,并且可以基于此进行计算:
@import "../node_modules/bootstrap/scss/functions";
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
$items-gutter: 2rem;
.items {
display: flex;
flex-flow: row wrap;
padding: $items-gutter/2;
.item {
padding: $items-gutter/2;
width: calc(100%/2); // 2 per row
@include media-breakpoint-up(sm) {
width: calc(100%/3); // 3 per row
}
@include media-breakpoint-up(md) {
width: calc(100%/4); // 4 per row
}
@include media-breakpoint-up(lg) {
width: calc(100%/6); // 6 per row
}
}
}
这将在 flexbox 上添加 1rem 填充.items
,并在每个上添加 1rem 填充.item
。这将构成每个项目周围的总共 2rem 填充。

演示: https ://jsfiddle.net/davidliang2008/rv0knh8b/15/