首页 文章

当flexbox项目以列模式换行时,容器不会增加其宽度

提问于
浏览
109

我正在研究嵌套的flexbox布局,它应该如下工作:

最外层( ul#main )是一个水平列表,当添加更多项目时,它必须向右扩展 . 如果它变得太大,应该有一个水平滚动条 .

#main {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    overflow-x: auto;
    /* ...and more... */
}

此列表中的每个项目( ul#main > li )都有一个 Headers ( ul#main > li > h2 )和一个内部列表( ul#main > li > ul.tasks ) . 此内部列表是垂直的,应在需要时包装到列中 . 当包装到更多列时,其宽度应该增加,以便为更多项目腾出空间 . 此宽度增加也应适用于外部列表的包含项 .

.tasks {
    flex-direction: column;
    flex-wrap: wrap;
    /* ...and more... */
}

我的问题是当窗口的高度太小时内部列表不会换行 . 我已经尝试了很多篡改所有的flex属性,试图在CSS-Tricks精心遵循指南,但没有运气 .

这个JSFiddle显示了我到目前为止的情况 .

Expected result (我想要的):

My desired output

Actual result (我得到的):

My current output

Older result (我在2015年得到的):

My older output

更新

经过一番调查,这开始看起来像一个更大的问题 . All major browsers behave the same way ,它与我的嵌套Flexbox设计无关 . 更简单的flexbox列布局拒绝在项目换行时增加列表的宽度 .

other JSFiddle清楚地证明了这个问题 . 在当前版本的Chrome,Firefox和IE11中,所有项目都正确包装;列表的高度在 row 模式下增加,但在 column 模式下其宽度不会增加 . 此外,在更改 column 模式的高度时,根本没有立即回流元素,但是在 row 模式中 .

但是,official specs (look specifically at example 5)似乎表明我想做的事情应该是可能的 .

有人可以提出解决这个问题的方法吗?

更新2

经过大量的实验尝试使用JavaScript来更新调整大小事件期间各种元素的高度和宽度,我得出结论,尝试以这种方式解决它太复杂和太麻烦 . 此外,添加JavaScript肯定会破坏flexbox模型,该模型应尽可能保持干净 .

现在,我回到 overflow-y: auto 而不是 flex-wrap: wrap ,以便内部容器在需要时垂直滚动 . 它不漂亮,但它是一种前进的方式,至少不会过多地破坏可用性 .

4 回答

相关问题