【问题标题】:Evenly distribute boxes but with margin between each均匀分布盒子,但每个盒子之间有边距
【发布时间】:2013-11-04 14:36:04
【问题描述】:

这是一个类似问题的小提琴: http://jsfiddle.net/DougCassidy/Gawe7/ 它工作得很好,但是,我希望盒子之间有一些很好的间距。如果右边距被视为盒子之间的最小间距会很好,这样如果间距低于该数量,它会将所有内容向下移动一行。此外,当前连续的最后一个框不应有右边距。

然后,一些底部边距。一个固定的量就可以了,或者等于当前水平间距的量也可以。

$(new Array(9).join('<div class="invisible"></div>\n')).insertBefore('.stretch');

$(window).on('resize', function() {
$('#container').height($('.box').last().position().top +     $('.box').last().outerHeight());

//make it still justify when there's only one row
if ($('.box').first().position().top == $('.box').last().position().top) {
    $('.invisible').hide();
} else {
    $('.invisible').show();
}
}).resize();

【问题讨论】:

  • 出于某种原因它必须以这种方式工作吗?性能很糟糕,我不清楚你的问题为什么你需要 javascript 来实现这一点。
  • 这是一个我想要响应的缩略图库。彩色框将是现实生活中的 img 缩略图。除了盒子之间的间距之外,当前的小提琴已经足够好了。我需要有作为最小边距的边距。

标签: javascript css flexbox


【解决方案1】:

你不需要 JavaScript,只需要负边距:

http://codepen.io/cimmanon/pen/iHGCd

.gallery {
  margin: -5px;
  display: -ms-flexbox;
  display: -webkit-flex;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  -ms-flex-pack: justify;
  -webkit-justify-content: space-between;
  justify-content: space-between;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
}
@supports (flex-wrap: wrap) {
  .gallery {
    display: flex;
  }
}

.gallery img {
  margin: 5px;
}

HTML:

<div class="gallery">
    <img src="http://placehold.it/200x100" />
    <!-- etc -->
</div>

因为边距不会在弹性项目上折叠,所以如果你像这样在所有边上添加边距效果最好。

【讨论】:

  • 适用于 chrome,不适用于 FF25。
  • 这是因为 Firefox 不支持使用 Flexbox 进行包装。即使您不使用 Flexbox,负边距仍然是解决方案:codepen.io/cimmanon/pen/dwbHi
  • 你使用了“flexbox”标签,我假设你明白你在问w3.org/TR/css3-flexbox,Firefox 只是部分实现。
  • 我使用了它,因为我认为可能有一个 js 脚本可以诱使浏览器做正确的事情,wrt flexbox。由于浏览器支持,我没有过多研究它,但我已经学到了足够多的知识,知道如果浏览器支持,弹性框将是答案。我“不明白”的是为什么你给我的代码笔在 ff 中不起作用。我“不明白”为什么这对我有用。
  • 我建议您将有关我的笔在 Firefox 中无法使用的问题提交给 Mozilla 团队,因为问题出在他们身上。如果 Flexbox 答案不是您真正想要的,我建议您从问题中删除 flexbox 标签。