Flexbox - Дети расширяются, чтобы заполнить высоту

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

#snippet-container {
  height: 300px;
  width: 200px;
}

#page {
  display: flex;
  flex-flow: column;
  height: 100%;
}

#content {
  flex: 1 1 auto;
  background: blue;
}

#content .test {
  width: 100%;
  height: 100%;
  background: yellow;
  border: 2px solid red;
}

#footer {
  flex: 0 1 10vh;
  background: black;
}
<div id="snippet-container">
  <div id="page">
    <div id="content">
      <div class="test"></div>
    </div>
    <div id="footer"></div>
  </div>
</div>

Ответ 1

Проблема:

Проблема заключается в том, что ваш контейнер #page flex не достигает элемента .test, поскольку .test не является дочерним, это потомок элемента flex.

Содержимое контейнера flex состоит из нуля или более элементов гибкости: каждый дочерний элемент гибкого контейнера становится гибким элементом.

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


РЕШЕНИЕ:

Вам нужно добавить display: flex к вашему #content.


JSFiddle


CODE SNIPPET:

#snippet-container {
  height: 300px;
  width: 200px;
}
#page {
  display: flex;
  flex-flow: column;
  height: 100%;
}
#content {
  display: flex;
  height: 100%;
  background: blue;
}
#content .test {
  width: 100%;
  background: yellow;
  border: 2px solid red;
}
#footer {
  flex: 0 1 10vh;
  background: black;
}
<div id="snippet-container">
  <div id="page">
    <div id="content">
      <div class="test"></div>
    </div>
    <div id="footer"></div>
  </div>
</div>

Ответ 2

Это для вас:

https://jsfiddle.net/wjr0wwht/2/

Чтобы сделать "test" div до полной высоты, вам нужно сделать контент также display: flex следующим образом:

#content {
  flex: 1 1 auto;
  background: blue;
  display: flex;
  flex-direction: column; 

}

а затем произведите сам тест:

#content .test {
  background: yellow;
  border: 2px solid red;
  flex-grow: 1;
}