Распределите элементы flex равномерно, когда они обернуты

когда мой контейнер flexbox имеет более определенного количества элементов, я хочу, чтобы он использовал несколько строк. Вот мое текущее решение:

.container {
  display: flex;
  width: 400px;
  background: black;
  padding: 6px;
  margin: 10px;
  flex-wrap: wrap;
}
.box {
  flex: 1 1 0;
  height: 32px;
  flex-grow: 1;
  min-width: 15%;
  border: solid 1px black;
}
.box:nth-child(even) {
  background: blue;
}
.box:nth-child(odd) {
  background: red;
}
<div class="container">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>

<div class="container">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>

<div class="container">
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
  <div class="box"></div>
</div>

http://codepen.io/samkeddy/pen/mOwZBv?editors=1100

проблема в том, что элементы в последней строке растягиваются для заполнения строки.

Я хочу, чтобы он равномерно распределял элементы между строками, чтобы каждый элемент был как можно ближе к тому же размер насколько это возможно.

например, в строке не более 6 элементов. Когда у вас есть 8 элементов, он помещает 6 в первую строку и 2 во вторую. Я хочу поставить по 4 в каждом ряду.

это возможно с flexbox? Возможно ли это каким-либо образом?

2 ответов


Что мне пришлось в конечном итоге сделать, это вычислить количество ящиков на строку (на стороне сервера), а затем использовать это, чтобы получить минимальную ширину для каждого окна и применить его к каждому с помощью встроенного css.


на самом деле есть трюк, чтобы сделать это: Добавьте псевдо-элемент в контейнер и дайте ему flex-grow 50 и так. Это создаст притворный элемент, который заполнит остальную часть пространства. Обратите внимание, что я удалил border правило, поскольку оно подсчитывается по ширине элемента и конфликтует с flex-basis.

вот модифицированный пример:https://codepen.io/walidvb/pen/ZXvLYE