带弹性包装的边距

新手上路,请多包涵

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

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

jsFiddle

 * {
  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;
}
 <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>

原文由 brunodd 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 195
2 个回答

您将基础设置为 50% 然后当您添加边距时,它会推动下一个元素,因为不能再并排放置。您可能想让项目 增长 并避免基础:

 .collage-item {
  flex: 1 0 auto;
}

Jsfiddle演示

原文由 DaniP 发布,翻译遵循 CC BY-SA 3.0 许可协议

no need really to set a width (eventually a min-width and a min-height ), just tell the element to spray evenly via the short : flex:1; 而且, calc() 将不是必需 的。

我添加了最后一行 3 来显示行为: https ://jsfiddle.net/ja6820vu/10/

 * {
  box-sizing: border-box;
}

.collage {
  position: relative;
  display: flex;
  justify-content: flex-start;
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: 32px;
}

.collage-item {
  min-height: 17.5vw;
  min-width: 30%;
  margin: 1em 1em 0 0;
  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: 1;
}
.collage-item:nth-child(1) {
  margin: 0;
  margin-bottom: 16px;
}
.collage-item:nth-child(2), .collage-item:nth-child(3) {
  margin: 0;
  height: 25vw;
}
.collage-item:nth-child(2) {
  margin: 0;
  margin-right: 16px;
}
.collage-item:nth-child(4) {
  margin: 0;
  margin-top: 16px;
}
.collage-item:nth-child(1), .collage-item:nth-child(4) {
  flex: 0 0 100%;
  height: 50vw;
}
.collage-item:nth-last-child(2) {
  margin: 1em 0 0 0;
  background:url(http://www.comedywildlifephoto.com/images/gallery/0/00000150_t.jpg);
  background-size: cover;
}

.btn {
  position: absolute;
  border: 2px solid white;
  padding: 10px 18px;
  text-align: center;
  right: 16px;
  bottom: 16px;
  color: white;
  text-decoration: none;
}
 <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="collage-item"></div>
  <div class="collage-item"></div>
  <div class="collage-item"></div>
  <div class="btn">View all 11 photos</div>
</div>

原文由 G-Cyrillus 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题