目前,我正在试验柔性盒布局,当我嵌套多个柔性盒时,overflow
不会被应用,这有一个问题。
只要我只使用一个级别的flex框(参见示例1),一切都正常:一旦其内容超过给定的空间,滚动条就会应用到红色框(#top
)上。
但是,如果我介绍另一层柔性盒(参见示例2),蓝色框(#right
)上没有滚动条。相反,滚动条出现在主体元素上,完全忽略了蓝色框上的overflow: auto
设置。
因此,我的问题是:当使用嵌套的柔性盒时,如何让overflow
工作?
备注:我用Chrome45、Firefox40和IE11进行了测试。这种行为在所有方面都是一致的。
下面是代码以及两种情况下的小提琴链接。
(1)只有一个柔性盒,没有嵌套的
<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;
}
发布于 2015-06-18 07:20:31
最新的浏览器将新的auto
实现为min-height
的初始值。
这迫使#top
至少和其内容一样高。
所以你需要撤销它:
#top {
min-height: 0;
}
然后#top
可以短于其内容。#right
将被拉伸到与#top
一样高,#top
的内容可能会溢出。
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;
min-height: 0;
}
#right {
white-space: pre;
overflow: auto;
background-color: blue;
width: 5em;
}
#left {
flex-grow: 1;
background-color: orange;
}
#bottom {
background-color: green;
height: 4em;
}
<div id="container">
<div id="top">
<div id="left">
</div>
<div id="right">
1
1
1
1
1
1
1
1
1
1
1
11
1
1
1
1
1
1
1
1
1
1
1
1
1
1
</div>
</div>
<div id="bottom">
blub
</div>
</div>
发布于 2015-11-22 12:21:32
flex:1
替代答案:只需在#top.上指定而不是 flex-grow:0
,或者指定flex-basis:0
。flex:1
隐式地设置flex: 1 1 0
,即第三个0表示flex-basis:0
。
这很重要,因为flex-basis
的缺省初始值不是0,而是auto
,这实际上意味着content
-sized,因此需要求助于min-height
。和OP一样,我发现min-height
有些出类拔萃,有些令人困惑,而flex
表示法则不那么令人困惑。
更新片段:
http://codepen.io/yaaang/pen/gayqPE
flex
中的第三个组件设置了flex基长,并指定了flex基:在根据flex因子分配空闲空间之前,flex项的初始主尺寸。它接受与width属性相同的值(除非auto被不同的对待)和一个附加的content关键字。如果从flex速记中省略,其指定值为0%。 如果指定的flex-basis是auto,则使用的flex基是flex项的main size属性的计算值。如果该值本身是自动的,那么使用的flex将根据其内容(即内容大小)自动确定。
https://stackoverflow.com/questions/30918777
复制相似问题