У меня есть контейнер flexbox с 3 секциями. Идея состоит в том, что каждый раздел будет похож на аккордеон и расширяется, но при любом расширении мне нужно, чтобы содержимое разделов переполнялось по вертикали только в том случае, если оно переместит весь контейнер выше 100% высоты родителя, сохраняя при этом 100 % от высоты контейнера контейнера flexbox.
Вот фрагмент того, что я пробовал с процентной высотой.
html, body {
height: 100%;
margin: 0;
}
#container {
width: 100%;
height: 100%;
background-color: gray;
display: flex;
flex-direction: column;
}
#a {
flex: 0 1 auto;
}
#b {
flex: 2 1 auto;
}
#c {
flex: 0 1 auto;
}
#s2 {
max-height: 100%;
overflow: auto;
background-color: lightblue;
}
<div id="container">
<div id="a"><div>Section 1</div></div>
<div id="b">
<div>Section 2</div>
<div id="s2">
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
</div>
</div>
<div id="c"><div>Section 3</div></div>
</div>
Мне бы хотелось получить что-то вроде следующего фрагмента, но без указания явной высоты родительского элемента или элементов flex.
html, body {
height: 100%;
margin: 0;
}
#container {
width: 100%;
height: 100%;
background-color: gray;
display: flex;
flex-direction: column;
}
#a {
flex: 0 1 auto;
}
#b {
flex: 2 1 auto;
}
#c {
flex: 0 1 auto;
}
#s2 {
max-height: 300px;
overflow: auto;
background-color: lightblue;
}
<div id="container">
<div id="a"><div>Section 1</div></div>
<div id="b">
<div>Section 2</div>
<div id="s2">
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
<div>Item</div>
</div>
</div>
<div id="c"><div>Section 3</div></div>
</div>
Обратите внимание, что Раздел 3 устраняет слабину, оставшуюся от предполагаемой гибкой основы Раздела 2. Я хочу, чтобы Раздел 2 вырос до 100%, а затем переполнился. Это возможно даже с flexbox?
Я был ошеломлен похожими вопросами, самые близкие из которых я считаю:
Сделать div заполнить высоту оставшегося пространства экрана - Это очень похоже, но мой вопрос добавляет "необходимо прокрутить, если он переполняется на 100%".
Ребенок с максимальной высотой: родитель переполняется на 100% - Я думаю, что это корень проблемы. Не имея установленной родительской высоты, он не может рассчитать высоту для переполнения.
Как сделать контейнер flexbox для прокрутки? - Опять-таки, необходима гибкая база пикселей. :. (
Я могу использовать display: tables
или другие решения. После этого я думаю, что потребуется решение javascript.