带弹性包装的边距

bru*_*odd 7 html css flexbox

我正在尝试使用display: flex和在 div 之间添加一些间距flex-wrap: wrap。

问题是当我申请margin-right第二项时,行会中断。如何在不将它们分成 2 行的情况下在项目之间添加一些间距?

js小提琴

* {
  box-sizing: border-box;
}
// Default
// ----------------------------------------------------
.collage {
  position: relative;
  display: flex;
  justify-content: flex-start;
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: 32px;
}
.collage-item {
  width: 100%;
  height: 25vw;
  background: url("https://www.audi.co.uk/content/dam/audi/production/Models/NewModelsgallery/A5range/A5_Coupe/MY17/1920x1080_A5-Coupe-2016-side.jpg") no-repeat;
  background-size: cover;
  flex: 0 0 50%;
  &: nth-child(1) {
    margin-bottom: 16px;
  }
  &:nth-child(2) {
    margin-right: 16px;
  }
  &:nth-child(4) {
    margin-top: 16px;
  }
  &:nth-child(1),
  &:nth-child(4) {
    flex: 0 0 100%;
    height: 50vw;
  }
}
// Button
// ----------------------------------------------------
 .btn {
  position: absolute;
  border: 2px solid white;
  padding: 10px 18px;
  text-align: center;
  right: 16px;
  bottom: 16px;
  color: white;
  text-decoration: none;
}
Run Code Online (Sandbox Code Playgroud)
<div class="collage">
  <div class="collage-item"></div>
  <div class="collage-item"></div>
  <div class="collage-item"></div>
  <div class="collage-item"></div>
  <div class="btn">View all 11 photos</div>
</div>
Run Code Online (Sandbox Code Playgroud)

Dan*_*niP 7

您正在将基础设置为50%then 当您添加边距时,它会推动下一个元素,因为无法再并排放置。您可能希望让项目增长并避免基础:

.collage-item {
  flex: 1 0 auto;
}
Run Code Online (Sandbox Code Playgroud)

Jsfiddle 演示