【发布时间】:2017-03-29 12:03:09
【问题描述】:
使用具有固定高度的 flex 容器,我可以通过设置 overflow: auto 使 flex 项可滚动,如下所示:
page {
display: flex;
flex-flow: row wrap;
height: 200px;
}
left-panel {
flex: 1;
display: block;
background: lightblue;
}
//main {flex: 5; display: block;}
header {
background: turquoise;
display: block
}
//main-content-wrapper {flex: 4; display:flex; flex-direction: column}
right-panel {
flex: 1;
overflow: auto;
}
content-panel {
background: pink;
display: block;
}
content {
height: 1000px;
display: block;
}
<page>
<left-panel>left-panel
<br/>(static)</left-panel>
<right-panel>
<header>
header
<br/>(static)
</header>
<content-panel>
<content>
content
<br/>(scrolls)
</content>
</content-panel>
</right-panel>
</page>
但我想让弹性项目的子项滚动。
我认为在 flex 项目上设置 height: 100% 并在我要滚动的子元素上设置 overflow: auto 会起作用,但它不起作用:
page {
display: flex;
flex-flow: row wrap;
height: 200px;
}
left-panel {
flex: 1;
display: block;
background: lightblue;
}
//main {flex: 5; display: block;}
header {
background: turquoise;
display: block
}
//main-content-wrapper {flex: 4; display:flex; flex-direction: column}
right-panel {
flex: 1;
height: 100%;
}
content-panel {
background: pink;
display: block;
overflow: auto;
}
content {
height: 1000px;
display: block;
}
<page>
<left-panel>left-panel
<br/>(static)</left-panel>
<right-panel>
<header>
header
<br/>(static)
</header>
<content-panel>
<content>content
<br/>(scrolls)</content>
</content-panel>
</right-panel>
</page>
我怎样才能做到这一点?
为什么第二把小提琴不起作用?
添加了 OP cmets:
我可以看到有几个相关的问题,但我发现的问题要么不直接适用,要么提到可能已经修复的错误的解决方法。
我想避免使用显式高度计算来减少组件的耦合。
我可以使用
flex-direction: column将右侧面板转换为嵌套的弹性框,但我希望避免这种情况。如果没有明确的高度计算就无法实现扁平结构(如第二把小提琴),最好解释一下原因。会不会被认为是 flexbox 的错误,还是我误解了 CSS 的一些基本原理?
【问题讨论】: