【发布时间】:2015-04-02 04:22:56
【问题描述】:
我正在尝试使用 CSS Flexbox (display: flex) 来占据窗口的剩余高度。我也希望滚动可用...也许我一直在解决这个问题,但一直在寻找很长时间,以至于我没有找到其他选择。
这个想法是有一个固定的容器。在该固定容器内是一个占据 100% 高度的 flexbox。我将项目添加到堆叠在列中的弹性框中。我添加的最后一项(容器包装器)内部有动态内容,它将通过 AJAX 调用替换 HTML(否则我只需将操作栏移到包装器之外并完成它)。这个内容包装器也是一个 flex 容器(以及一个 flex 项),并设置为随着窗口的高度而增长和收缩。这个 flex 容器的最后一项应该允许在窗口缩小时滚动。
<!-- The fixed container -->
<div class="fixed">
<!-- The first flex container - direction: column -->
<div class="outer">
<div class="some-flex-item"></div>
<div class="some-flex-item"></div>
<!-- Grow and shrink with 100% of height -->
<div class="container-wrapper">
<!-- inner HTML is dynamic -->
<!-- flex: 0 0 auto -->
<div class="action-bar"></div>
<!-- Want this div to take up remaining height of window
and have overflow-y scrolling -->
<div class="container">
...
</div>
</div>
</div>
</div>
似乎可以在 IE 10+、Chrome 中使用,但 Firefox 不添加滚动条,因为容器包装器的高度会由于内部内容而无限增长。我应该提一下,旧版本的 Firefox 显示正确(我认为 ~33),但更新版本不能。
我找到了一种解决方法,我将内部容器位置设置为:相对,然后将其内部内容包装在一个 div 中,将上、左、下、右的绝对定位设置为 0。 Example here。我不喜欢这样,因为它似乎违背了 flexbox 布局的目的。有什么方法可以让这个概念在浏览器中很好地发挥作用,而无需进行标记黑客攻击?
【问题讨论】: