我个人会自己构建一个 flexbox,而不是使用 Bootstrap 的 Grid 系统,因为这样我可以在项目上添加自己的填充并计算它们之间的统一间距。
<section class="items">
<a href="#" class="item">
<figure />
</a>
<a href="#" class="item">
<figure />
</a>
...
</section>
首先,您要将.items 设置为弹性框,显示为可折叠的行:
@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 等类。您可以通过在每个断点上设置 .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
}
}
}
现在是时候计算两个.items 之间的间距了。实际上,如果您在每个 .item 上添加填充,它们之间的间距将加倍。但是您可以通过在其父 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 .items 上添加 1rem 填充,并在每个 .item 上添加 1rem 填充。这将构成每个项目周围总共 2rem 填充。
演示: https://jsfiddle.net/davidliang2008/rv0knh8b/15/