如何在使用 flexbox、flex-wrap 和 last-of-type 时从一行中的最后一项删除右边距

4nd*_*ndy 7 css flexbox

当我使用 flexbox 时,如果我想要一个边距来为每个元素添加间距,我通常会这样做:

.flexbox-item {
  flex: 1 0 auto;
  margin-right:10px;
}
.flexbox-item:last-of-type {
  margin-right: 0px;
}
Run Code Online (Sandbox Code Playgroud)

如果我不使用 flex-wrap,这会起作用,因为它们的最后一项将始终是该行中的实际最后一项。

但是,当我使用 flex-wrap 时,该行的最后一项会根据窗口宽度而变化(并且会自动添加更多行),这意味着有时我会从一行中的第一项中删除右边距。

有人知道这个问题的解决方案吗?

编辑:我不相信这是重复的

这是关于保持行水平相等,而不是垂直。

无论如何,我的解决方案是使用负边距,通过挖掘它可以在该线程上找到它,但这不是最流行的解决方案。这是我的解决方案:

似乎这个问题的答案是给父 flexbox 容器添加一个负边距。

.flexbox-container {
  margin-right:-10px;
}
.flexbox-item {
  flex: 1 0 auto;
  margin-right:10px;
}
Run Code Online (Sandbox Code Playgroud)

然后当您的 flexbox 项目更改为 100% 时,只需从项目中删除右边距:

@media (max-width: 767px) {
    .flexbox-item {
      margin-right:0px;
    }
    .flexbox-container {
      margin-right: 0px;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有更好的解决方案,我会全力以赴。

Shr*_* KL 0

我不完全确定你的用例。但为什么不justify-content: space-between使用margin. 那么您不需要删除行中最后一个元素的边距。 https://jsfiddle.net/n2vqwg79/

  • 如果我们有多行,并且最后一行的项目少于其他行,那么最后一行的对齐方式会看起来很奇怪。 (5认同)