我有一个包含3个部分的Flexbox容器。想法是每个部分都像手风琴一样展开,但如果其中任何一个部分展开,我需要该部分内容在垂直方向上溢出,只有当它将整个容器推到父容器的100%高度时,才会保持在Flexbox容器的容器的100%高度内。
这是我尝试使用百分比高度的片段。
我希望能够获得类似以下代码片段的内容,但是不需要指定父元素或Flex子项的显式高度。
请注意,第3节填补了第2节推断的flex-basis留下的空缺。我希望第2节能够增长到100%,然后溢出。使用 flexbox 是否可能实现这一点?
我被类似的问题压倒了,其中最接近的是: 如何使div填充剩余屏幕空间的高度 - 这非常相似,但我的问题添加了“如果溢出100%则需要滚动”。 具有max-height:100%的子元素溢出父元素 - 我认为这是问题的根源。如果没有设置父高度,它无法计算要从哪里溢出的高度。 如何使flexbox容器滚动? - 再次需要像素单位的flex-basis。 :(。
我可以使用
这是我尝试使用百分比高度的片段。
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>
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>
我被类似的问题压倒了,其中最接近的是: 如何使div填充剩余屏幕空间的高度 - 这非常相似,但我的问题添加了“如果溢出100%则需要滚动”。 具有max-height:100%的子元素溢出父元素 - 我认为这是问题的根源。如果没有设置父高度,它无法计算要从哪里溢出的高度。 如何使flexbox容器滚动? - 再次需要像素单位的flex-basis。 :(。
我可以使用
display:tables
或其他解决方案。在输入完毕后,我认为需要一个javascript解决方案。