display:flex
样式的元素的子元素)将其大小限制为嵌套在其下的flexbox成员的大小?例如,假设我有以下内容:<div style="display:flex; flex-direction:column; height:100vh;">
<div style="height:60px;">Static header</div>
<div style="flex: 1 1 0; overflow:hidden;">
<div style="overflow:auto; height:100%;" id="problem-is-here">
Lots and lots of content, way too much to fit in the viewport
</div>
</div>
</div>
由于最外层的
div
的第一个子元素具有固定的高度,因此它的高度恰好为 60 像素。而第二个子元素的 flex-grow
属性值为 1,则它得到了剩余空间(在这种情况下,是视口的 100% 减去 60px),根据“检查元素”功能,可以确认该元素的尺寸正好足够占据剩余的视口空间。在 Firefox 和 IE11 中,由于设置了
height:100%
,内部元素 (id="problem-is-here"
)继承其父元素计算出的高度。因此,由于内容太小而无法显示,并且设置了 overflow:auto
,所以它(而不是整个 body
)会出现垂直滚动条。 这正是我想要的。但是,在 Chrome 中,内部元素渲染时高度足以容纳其所有内容,这比其父元素更高。因此,由于其父元素设置了
overflow:hidden
,因此没有滚动条出现,多余内容也无法访问。那么如何在父元素的高度是通过 flexbox 而不是 CSS height
属性确定的情况下,告诉 Chrome 将这个内部元素的高度呈现为最多等于其父元素的高度?请注意,由于我正在处理的应用程序中 flexbox 成员的数量可能会变化,因此我无法为内部 div
或其父元素指定明确的 height
值。注:我尝试了其他答案中提出的一些建议,例如将所有元素都设置为具有
min-height:0
而不是 auto
,或确保将 flex-basis
设置为 0
,但这些方法都没有奏效。请参见以下示例以说明该问题。(id="heres-the-problem"
的 div
是我要限制其高度与父元素相同的元素):http://plnkr.co/edit/UBRcrNmR5iDbn3EXu6FI?p=preview。