提问者:小点点

设置flexbox项目之间距离的更好方法


要设置flexbox项目之间的最小距离,我使用.item上的margy:0 5px和Container上的margy:0-5px。对我来说,这似乎是一个黑客,但我找不到任何更好的方法来做到这一点。

示例

null

#box {
  display: flex;
  width: 100px;
  margin: 0 -5px;
}
.item {
  background: gray;
  width: 50px;
  height: 50px;
  margin: 0 5px;
}
<div id='box'>
  <div class='item'></div>
  <div class='item'></div>
  <div class='item'></div>
  <div class='item'></div>
</div>

null


共1个答案

匿名用户

  • FlexBox没有折叠边距。
  • FlexBox对于表没有类似于边框间距的任何内容(CSS属性gap除外,该属性在Safari、caniuse中不支持)

因此,要达到你所要求的目标是比较困难的。

根据我的经验,不使用:first-child/:last-child并且不对flex-wrap:wrap进行任何修改的“最干净”的方法是在容器上设置padding:5px并在子级上设置margy:5px。这将在每个子级之间以及每个子级与其父级之间产生10px间隙。

演示

null

.upper
{
  margin:30px;
  display:flex;
  flex-direction:row;
  width:300px;
  height:80px;
  border:1px red solid;

  padding:5px; /* this */
}

.upper > div
{
  flex:1 1 auto;
  border:1px red solid;
  text-align:center;

  margin:5px;  /* and that, will result in a 10px gap */
}

.upper.mc /* multicol test */
{flex-direction:column;flex-wrap:wrap;width:200px;height:200px;}
<div class="upper">
  <div>aaa<br/>aaa</div>
  <div>aaa</div>
  <div>aaa<br/>aaa</div>
  <div>aaa<br/>aaa<br/>aaa</div>
  <div>aaa</div>
  <div>aaa</div>
</div>

<div class="upper mc">
  <div>aaa<br/>aaa</div>
  <div>aaa</div>
  <div>aaa<br/>aaa</div>
  <div>aaa<br/>aaa<br/>aaa</div>
  <div>aaa</div>
  <div>aaa</div>
</div>