Flexbox:每行 4 个项目

新手上路,请多包涵

我正在使用弹性框来显示 8 个项目,这些项目将随我的页面动态调整大小。我如何强制它将项目分成两行? (每行 4 个)?

这是一个相关的片段:

(或者,如果您更喜欢 jsfiddle - http://jsfiddle.net/vivmaha/oq6prk1p/2/

 .parent-wrapper {
  height: 100%;
  width: 100%;
  border: 1px solid black;
}
.parent {
  display: flex;
  font-size: 0;
  flex-wrap: wrap;
  margin: -10px 0 0 -10px;
}
.child {
  display: inline-block;
  background: blue;
  margin: 10px 0 0 10px;
  flex-grow: 1;
  height: 100px;
}
 <body>
  <div class="parent-wrapper">
    <div class="parent">
      <div class="child"></div>
      <div class="child"></div>
      <div class="child"></div>
      <div class="child"></div>
      <div class="child"></div>
      <div class="child"></div>
      <div class="child"></div>
      <div class="child"></div>
    </div>
  </div>
</body>

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

阅读 794
2 个回答

你有 flex-wrap: wrap 在容器上。这很好,因为它覆盖了默认值,即 nowrap来源)。这就是 某些情况下 项目不环绕形成网格的原因。

在这种情况下,主要问题是弹性项目上的 flex-grow: 1

flex-grow 属性实际上并没有调整弹性项目的大小。它的任务是分配容器中的可用空间 ( source )。因此无论屏幕尺寸多小,每个项目都会按比例获得一部分可用空间就行了。

更具体地说,您的容器中有八个弹性项目。使用 flex-grow: 1 ,每个人都获得该行可用空间的 1/8。由于您的项目中没有内容,它们可以缩小到零宽度并且永远不会换行。

解决方案是在项目上定义宽度。尝试这个:

 .parent {
  display: flex;
  flex-wrap: wrap;
}

.child {
  flex: 1 0 21%; /* explanation below */
  margin: 5px;
  height: 100px;
  background-color: blue;
}
 <div class="parent">
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
  <div class="child"></div>
</div>

使用 flex-grow: 1flex 速记中定义,不需要 flex-basis 为 25%,这实际上会导致每行三个边距。

由于 flex-grow 将占用行上的可用空间, flex-basis 只需要足够大以强制换行。在这种情况下,对于 flex-basis: 21% ,边距有足够的空间,但永远没有足够的空间容纳第五项。

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

.child 元素添加宽度。我个人会在 margin-left 上使用百分比,如果你想让它总是每行 4 个。

演示

.child {
    display: inline-block;
    background: blue;
    margin: 10px 0 0 2%;
    flex-grow: 1;
    height: 100px;
    width: calc(100% * (1/4) - 10px - 1px);
}

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

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