【发布时间】:2019-08-20 21:00:40
【问题描述】:
我有一个包含 3 个部分的 flexbox 容器。这个想法是每个部分都会像手风琴一样展开,但是随着其中任何一个展开,我需要部分内容垂直溢出,前提是它将整个容器推到超过父级的 100% 高度,同时保持在 100 flexbox 容器的容器高度的 %。
这是我尝试过的百分比高度的 sn-p。
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>
我想要的是能够得到类似以下 sn-p 的东西,但没有指定父元素或弹性项目的显式高度。
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 节推断的 flex-basis 剩余的松弛部分。我希望第 2 节增长到 100%,然后溢出。这甚至可以通过 flexbox 实现吗?
我被类似的问题淹没了,我认为最接近的问题是:
Make a div fill the height of the remaining screen space - 这非常相似,但我的问题添加了“如果溢出 100% 则需要滚动”。
Child with max-height: 100% overflows parent - 我认为这是问题的根源。如果没有设置父高度,它就无法计算溢出的高度。
How to make a flexbox container to scroll? - 再次需要像素单位的弹性基础。 :(。
我可以使用display: tables 或其他解决方案。输入此内容后,我认为需要一个 javascript 解决方案。
【问题讨论】: