我正在制作一个嵌套的flexbox布局,其工作原理如下:

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

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

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

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

我的问题是,当窗口的高度变得太小时,内部列表不会换行.我try 过很多次篡改flex的所有属性,试图在CSS-Tricks秒时一丝不苟地遵循指导原则,但没有成功.

JSFiddle个显示了我到目前为止所拥有的.

Expected result (what I want):

我想要的输出

Actual result (what I get):

我的当前输出

Older result (what I got in 2015):

我的旧输出

使现代化

经过一些调查,这似乎开始成为一个更大的问题.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

在try 了大量使用JavaScript在调整大小事件期间更新各种元素的高度和宽度之后,我得出的结论是,try 以这种方式解决问题太复杂、太麻烦了.此外,添加JavaScript肯定会 destruct Flexbox模型,该模型应该尽可能保持干净.

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

推荐答案

问题

这似乎是flex布局的一个根本缺陷.

列方向的flex容器不会扩展以容纳其他列.(这在flex-direction: row人中不是问题.)

这个问题已经被问了很多次(见下面的列表),CSS中没有清晰的答案.

很难将其确定为bug,因为该问题在所有主要浏览器中都会出现.但它确实提出了一个问题:

怎么可能所有的主流浏览器都将flex容器 是否在行方向上展开换行,而不是在列方向上展开?

你会认为他们中至少有一个会做对.我只能推测原因.也许这是一个技术上困难的实现,并被搁置在本次迭代中.

UPDATE:该问题似乎已在Edge v16中得到解决.


问题的说明

OP制作了一个有用的演示来说明这个问题.我在这里复制:http://jsfiddle.net/nwccdwLw/1/


解决方案选项

来自Stack Overflow社区的黑客解决方案:


更多分析

  • 一百

  • 一百


其他描述同样问题的帖子

Html相关问答推荐

如何计算由箭头组成的六边形中的AtlanteX

当ul为Flex时,使ul元素在指定高度内可垂直滚动

从网络抓取中提取文本

为所有必填字段添加所需的占位符文本(Angular Material)

R-markdown中的非顺序列表

子元素的单一背景

从网页中提取URL

错误时交换表单,成功时使用HTMX重定向

有没有办法移动占位符?

页面文件夹内的 HTML 页面未加载主目录的 style.css

用由文本制成的边框包围内容

如何在 flex 项目中忽略子元素的宽度

如何使用CSS Select 表亲元素

防止HTML输入中出现负数但接受小数

如何从另一个 ng-template 获取输入值

Tailwind CSS 复选框样式不起作用

防止 HTML 表格在 Quarto 中使用全页宽度

flex-box 中的图像在 Chrome 和 Firefox 中看起来不同 - 如何使它们在 Firefox 中看起来像?

无法使用 HTML 中的 Bootstrap 自上而下居中

focusout() Select 器不适用于搜索框