Flexbox заполняет свободное пространство по вертикали

Теперь в строке flexbox я могу написать

<div layout="row">
  <div>some content</div>
  <div flex></div> <!-- fills/grows available space -->
  <div>another content</div>
</div>

Я хотел бы добиться того же, но вертикально, как на этой картинке enter image description here. В настоящее время проблема в том, что div, который должен был бы расти, не имеет никакой высоты, поэтому два содержимого находятся ниже друг друга. Я хочу, чтобы мой второй контент находился внизу родительского контейнера с фиксированной высотой!

Я знаю, что мог бы решить эту проблему, поместив второй абсолютный и bottom: 0; контент bottom: 0; но могу ли я добиться этого с flexbox?

Ответы

Ответ 1

Поэтому вы можете попробовать следующее:

  1. flex-direction: column для гибкого контейнера.

  2. flex: 1 для элемента, который должен заполнить оставшееся пространство.

См. Демо ниже, где flexbox охватывает высоту видового экрана:

body {
  margin: 0;
}
*{
  box-sizing: border-box;
}
.row {
  display: flex;
  flex-direction: column;
  height: 100vh;
}
.flex {
  flex: 1;
}
.row, .row > * {
  border: 1px solid;
}
<div class="row">
  <div>some content</div>
  <div class="flex">This fills the available space</div>
  <!-- fills/grows available space -->
  <div>another content</div>
</div>

Ответ 2

Вам просто нужно использовать flex-direction: column on parent и flex: 1 на среднем div.

body,
html {
  padding: 0;
  margin: 0;
}
.row {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
.row > div:not(.flex) {
  background: #676EE0;
}
.flex {
  flex: 1;
  background: #67E079;
}
<div class="row">
  <div>some content</div>
  <div class="flex"></div>
  <!-- fills/grows available space -->
  <div>another content</div>
</div>