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;
}