【发布时间】:2015-11-23 04:21:32
【问题描述】:
我目前正在尝试使用 flexbox 布局,但遇到一个问题,当我嵌套多个 flexbox 时,overflow 不会被应用。
只要我只使用一级弹性框(参见示例 1),一切正常:只要其内容超过给定空间,滚动条就会应用于红色框 (#top)。
但是,如果我引入另一层弹性框(参见示例二),则蓝色框上没有滚动条(#right)。相反,滚动条出现在 body 元素上,完全忽略了蓝色框上的 overflow: auto 设置。
所以我的问题是:在使用嵌套弹性框时如何让overflow 工作?
备注:我在 Chrome45、Firefox 40 和 IE11 上对此进行了测试。行为是一致的。
以下是这两种情况的代码和小提琴链接。
(1) 只有一个 flexbox,没有嵌套
<div id="container">
<div id="top">
...
</div>
<div id="bottom">
blub
</div>
</div>
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
#container{
background-color: yellow;
flex-direction: column;
display: flex;
height: 100%;
}
#top {
background-color: red;
flex-grow: 1;
display: flex;
flex-direction: row;
overflow: auto;
white-space:pre;
}
#bottom {
background-color: green;
height: 4em;
}
(2) 嵌套的弹性盒
<div id="container">
<div id="top">
<div id="left">
</div>
<div id="right">
...
</div>
</div>
<div id="bottom">
blub
</div>
</div>
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
#container{
background-color: yellow;
flex-direction: column;
display: flex;
height: 100%;
}
#top {
background-color: red;
flex-grow: 1;
display: flex;
flex-direction: row;
}
#right {
white-space: pre;
overflow: auto;
background-color: blue;
width: 5em;
}
#left {
flex-grow: 1;
background-color: orange;
}
#bottom {
background-color: green;
height: 4em;
}
【问题讨论】: