Элементы с равной шириной гибки даже после их обертывания

Можно ли сделать такое чистое решение CSS следующим образом:

  • Элементы имеют несколько min-width.
  • Они должны динамически расти, чтобы заполнить всю ширину контейнера, а затем переносить на новые строки.
  • Все элементы в списке должны иметь равную ширину.

Вот как это выглядит сейчас:

введите описание изображения здесь

И так я бы хотел, чтобы это тоже выглядело (я управлял шириной этих нижних элементов вручную, чтобы показать ожидаемый результат):

введите описание изображения здесь

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

.item {
  background: yellow;
  min-width: 100px;
  height: 20px;
  text-align: center;
  border: 1px solid red;
  flex-grow: 1;
}
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
  <div class="item">10</div>
</div>

Ответ 1

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

Здесь больше информации и различных решений, которые люди использовали для решения этой проблемы:

Однако выравнивание последней строки не является проблемой с другой технологией CSS3, Макет сетки. На самом деле, это очень просто с этим методом (и не требует никаких изменений в HTML):

.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
  grid-auto-rows: 20px;
  grid-gap: 5px;
}

.item {
  background: yellow;
  text-align: center;
  border: 1px solid red;
}
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
  <div class="item">10</div>
</div>

Ответ 2

Правильно нет, нет чистого решения CSS. Flexbox всегда пытается заполнить всю ширину контейнера с помощью готовых изделий. Таким образом, вам нужно будет вставить некоторые скрытые элементы, которые заполнят пустое пространство, будучи невидимым для пользователя.

Попробуйте следующее:

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

.item {
  background: yellow;
  min-width: 100px;
  height: 20px;
  text-align: center;
  border: 1px solid red;
  flex-grow: 1;
}

.item-hidden {
  min-width: 100px;
  flex-grow: 1;
  border: 1px solid transparent;
}
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
  <div class="item">10</div>
  <div class="item-hidden"></div>
  <div class="item-hidden"></div>
  <div class="item-hidden"></div>
  <div class="item-hidden"></div>
</div>