【发布时间】:2016-02-20 18:10:42
【问题描述】:
在 Google Chrome 中,如何强制嵌套在 flexbox 成员中的元素(“flexbox 成员”是指样式为 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 的第一个孩子div 具有恒定的高度,所以它的高度正好是60px,并且因为第二个孩子div 的flex-grow 是1,所以它得到了其余的可用空间(在这种情况下,视口的 100% 减去 60 像素)。根据 Inspect Element,我可以确认该元素的尺寸刚好足以占据视口的其余空间。
在 Firefox 和 IE11 中,由于 height:100%,最里面的元素 (id="problem-is-here") 采用为其父元素计算的高度。因此,由于它太小而无法显示其内容并且overflow 被设置为auto,它(而不是整个body)会获得一个垂直滚动条。这就是我要的。
然而,在 Chrome 中,最里面的元素以足够的高度呈现以包含其所有内容,该高度大于其父元素。因此,因为它的父级有overflow:hidden,所以不会出现滚动条并且无法访问多余的内容。当父级高度由弹性框而不是 CSS height 属性确定时,如何告诉 Chrome 渲染这个最里面的元素,其高度至多等于其父级的高度?请注意,我不能给最里面的 div 或其父级一个明确的 height 值,因为在我正在处理的应用程序中,其他 flexbox 成员的数量可能会有所不同。
注意:我尝试了其他答案的一些建议,例如将所有元素设置为 min-height:0 而不是 auto,或确保将 flex-basis 设置为 0,但这些都没有奏效。见
http://plnkr.co/edit/UBRcrNmR5iDbn3EXu6FI?p=preview
举个例子来说明问题。 (ID 为 heres-the-problem 的 div 是我希望其高度限制在其父级高度的那个。)
【问题讨论】:
-
这是您要找的吗? plnkr.co/edit/lxCkObgKgpEf0GYZbQtx?p=preview 更少的标记和更少的 CSS。提示:正文的边距重置
标签: html css google-chrome flexbox