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

2023-12-02

我正在研究一个嵌套的弹性盒布局,它应该按如下方式工作:

最外层(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... */
}

我的问题是,当窗口的高度太小时,内部列表不会换行。我尝试了很多篡改所有 Flex 属性的方法,尝试遵循以下指南CSS 技巧很仔细,但没有运气。

This JSFiddle显示我到目前为止所拥有的。

预期结果 (我想要的是):

My desired output

实际结果 (我得到什么):

My current output

较旧的结果 (我在2015年得到的):

My older output

UPDATE

经过一番调查后,这开始看起来像是一个更大的问题。所有主流浏览器的行为方式都相同,这与我的弹性盒设计嵌套无关。即使更简单的 Flexbox 列布局也不会在项目换行时增加列表的宽度。

This 其他 JSFiddle清楚地表明了问题。在当前版本的 Chrome、Firefox 和 IE11 中,所有项目都能正确换行;列表的高度增加row模式,但其宽度不会增加column模式。此外,当改变元素的高度时,根本不会立即回流元素。column模式,但有row mode.

但是,那官方规格(具体看例子5)似乎表明我想做的事情应该是可能的。

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

UPDATE 2

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

现在,我又回到了overflow-y: auto代替flex-wrap: wrap以便内部容器在需要时垂直滚动。它并不漂亮,但它是一种至少不会过多破坏可用性的方法。


问题

这看起来像是弹性布局的一个根本缺陷。

列方向的弹性容器不会扩展以容纳额外的列。 (这不是问题flex-direction: row.)

这个问题已经被问过很多次了(见下面的列表),CSS 中没有明确的答案。

很难将其确定为错误,因为所有主要浏览器都会出现该问题。但这确实提出了一个问题:

怎么可能所有主流浏览器都支持flex容器呢? 在行方向上展开换行但不在列方向上展开?

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

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


问题说明

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


解决方法选项

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

  • “看来这个问题不能只用 CSS 来解决,所以我建议你使用 JQuery 解决方案。”

  • “奇怪的是,大多数浏览器都没有正确实现列伸缩容器,但对书写模式的支持相当好。因此,您可以使用具有垂直书写模式的行伸缩容器。”


更多分析

  • 铬错误报告

  • 马克·埃默里的回答


描述相同问题的其他帖子

  • Flex box容器宽度不增长
  • 如何使 display:flex 容器与其包装的内容水平扩展?
  • Flex-flow:柱包装。如何设置容器的宽度等于内容?
  • chrome 中的 Flexbox flex-flow 列换行错误?
  • 如何使用“flex-flow:列换行”?
  • 当内容换行成一列时,Flex 容器不会展开
  • flex-flow:列换行,在弹性框中导致父容器溢出
  • Html flexbox 容器不会扩展到包裹的子项上
  • Flexbox 容器和溢出的 Flex 子项?
  • 如何制作一个可拉伸以适合包装物品的弹性盒容器?
  • 当有多列时,Flex 容器计算一列
  • 使用 flex 使容器全宽
  • Flexbox 容器可以调整大小吗?
  • Flex-Wrap 内含 Flex-Grow
  • Flexbox 不断增长以容纳
  • 将 flexbox 元素展开为其内容?
  • Flexbox 列拉伸以适应内容
  • https://stackoverflow.com/q/48406237/3597276
  • flex-flow:列换行不会拉伸父元素的宽度
  • 为什么我的 没有扩展宽度以覆盖所有 ?
  • https://stackoverflow.com/q/55709208/3597276
  • Flexbox 换行不会增加父级的宽度?
  • Absolute Flex 容器未更改为具有定义的最大高度的正确宽度
  • 父 inline-block div 比带有 flex-wrap 的子 div 窄
  • 修复了带换行的弹性父级无法扩展以适应 Firefox 和 Safari 上的内容的问题
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 Flexbox 项目以列模式换行时,容器不会增加其宽度 的相关文章

  • React Native FlatList 样式

    我正在尝试获取列表的 HeaderComponent 旁边的 FlatList 项目 我希望房间从创建房间旁边开始 这是它的外观图像 1 https i stack imgur com qyZZP png https i stack img
  • 更新 Parse.com 中的一行

    我所拥有的是 当单击编辑按钮时 两个输入字段中的值将创建一个新行 并删除旧行 下面是我使用的代码 但我想要的是更新原始行而不是删除原始行 实例 http jsbin com uyonek 2使用下面的代码是如何工作的 editBtn onc
  • 如何使用 Angular 2 实现拖放(v2.0.0-beta.15)

    我想以角度实现一个简单的拖放列表 例如我可以更改其顺序的杂货列表 iv 在使用之前实现它https github com akserg ng2 dnd https github com akserg ng2 dnd但我的问题是我使用角度2
  • 文本区域下的额外填充

    我的文本区域下面有额外的填充 但我似乎找不到它的来源 我已将单独的代码放在此页面上 http jsfiddle net wfuks http jsfiddle net wfuks 我似乎找不到它的来源 它有类 field field bac
  • 我可以在一个变量中拥有多个值吗?

    正如标题 我可以在一个变量中拥有多个值吗 首先 我有这个表格
  • Chrome 扩展程序未加载 EventListener

    我一直在创建一个 chrome 扩展 它将我的新标签页分成 2 个框架 这样我就可以尝试加载 2 个不同的 URL 现在我开始很简单 但我无法让它们按预期加载 这是代码 背景 html
  • 从 firebase 数据库获取最高分值

    在我的网站上有一些我从 firebase 获得的电影 电影的分数在0到100之间 我已经在我的网站上找到了所有电影 我还想按降序显示它们 例如评分最高的 5 部电影 我怎样才能实现这一点 感谢您的回答 const app initializ
  • 复制 Chrome 默认输入的轮廓样式

    如何设置默认 Chrome 输入的轮廓样式 焦点上为橙色 使其在每个浏览器中看起来都相同 Chrome 风格似乎是textarea focus outline rgb 229 151 0 auto 5px outline offset 2p
  • 在 HTML TextArea 中设置(或读取)光标/插入符的值

    我正在尝试 但失败了 在 HTML 文本区域中实现拖放机制 使用 jQuery 或 Scriptaculous 我们都使用 拖放机制相对容易 因此我愿意接受使用这两者之一的答案 问题是 我似乎找不到读取或设置插入点的方法 我最终想要做的是确
  • 垂直对齐材质图标

    我正在尝试在导航菜单中垂直对齐 下拉箭头 我尝试过各种方法 例如vertical align middle display inline block 之类的东西 但这根本没有帮助 http img02 imgland net jfCmDoW
  • 如何解决flash的zindex问题

    在网页中我需要显示div覆盖未使用的 Flash 横幅wmode transparent环境 怎么解决呢 根据我的记忆 你可以将 div 推入 也许使用Javascript 这样你就不会弄乱你的HTML iframe 是像 flash 一样
  • 占位符不适用于 Internet Explorer

    我的应用程序出现了小问题 Internet Explorer 11 上不存在占位符 我尝试了下面的 CSS 示例 但没有成功 ms input placeholder IE10 11 color ccc important font wei
  • 如何使单词中的每个字母在悬停时发生变化

    假设我的网站上某个段落中有一个单词 IamGreat 我希望它在悬停时更改为 Good4you 但是 我不想更改整个单词 而是希望每个字母单独更改 因此 如果我将鼠标悬停在字母 I 上 它将变成字母 G 字母 r 将变成数字 4 等 这两个
  • LESS CSS 在媒体查询中设置变量?

    我正在开发一个专门针对 iPad 的网站 为了使我的网站能够在视网膜显示屏 iPad 和旧版本 iPad 上运行 我想在媒体查询中的 LESS CSS 中设置一个变量 例如 media all and max width 768px rat
  • 适用于 HTML5 混合应用程序的 CORS

    我读过很多关于 CORS 的文章 以及允许 Access Control Allow Origin 如何成为 Web 服务器的安全漏洞 但没有一篇文章解释了如何允许 HTML5 混合应用程序访问某些不允许使用通配符 的域上托管的 Web 服
  • 向 Twitter Bootstrap 添加新字体系列

    我怎样才能按照他们的方式将新的字体系列添加到 twitter bootstrap 中 他们使用一种叫做 woff 的东西 我正在尝试将 roboto 添加到 css 文件中 我怎样才能像他们那样做 woff 的事情呢 font face f
  • 使用js获取选择选项的onclick事件

    我有一个非常令人沮丧的问题 我有这个代码 它过滤掉我的结果并将它们输入到选择框中 var syn
  • Chrome 上的 contenteditable 中未显示编辑光标

    当您打开此页面时 请参阅现场演示 http jsfiddle net gs3p1a6r 3 show 与 Chrome span span CSS myspan border 0 outline 0 JS myspan focus the
  • CSS交付优化:如何推迟CSS加载?

    我在尝试着优化 CSS 交付遵循针对开发人员的谷歌文档https developers google com speed docs insights OptimizeCSSDelivery example https developers
  • HTML标题属性样式[重复]

    这个问题在这里已经有答案了 如何在不使用 javascript 或 CSS 的情况下更改以下标记中标题属性的样式 因为我将 HTML 插入到原本无法编辑的文档中的特定位置 span title This is information Thi

随机推荐

  • fgetcsv( ) 和 Unicode 的问题

    我有一个代码 在本地主机上 我读取 csv 文件 带有 Unicode 字符 没有问题 但是当在主机上上传代码时输出什么也没有 为什么 什么是解决方案 while data fgetcsv fin 5000 FALSE var dump d
  • ThumbnailUtils.createVideoThumbnail 对于现有 mp4 视频返回 null

    我有一个视频 我需要获取它的缩略图 我用ThumbnailUtils用于此目的的类 但它返回 null 而不是预期的Bitmap 当我调试我的应用程序时 我在里面看到了createVideoThumbnail method MediaMet
  • 在服务器端渲染中反应传单地图错误

    已解决 请阅读更新 2 你好 我在使用 React leaflet 地图的 React 入门套件中遇到此错误 它就像 github 模块示例 但我不知道问题是什么 我认为SSR有问题 React 版本 16 x 和 React 入门套件 更
  • WiX 静默安装无法启动内置 .EXE:WiX v3

    我知道这可能看起来像是重复的 但我已经尝试了几乎所有在线内容 包括下面的链接 使用双击时 安装成功完成 并启动我的 EXE 它是一个 WPF UI 问题是 如果在命令行中运行 WiX 安装程序会安装 但我的 WPF 不会启动 没有驱动程序更
  • 在批处理脚本中将用户输入的第一个字母变为大写

    这是我用来为新客户端创建文件夹的批处理脚本 ECHO OFF SET p clientLast Enter Client s Last Name SET p clientFirst Enter Client s First Name ECH
  • 我打算中止该场景,但是该场景和功能被报告为失败

    当满足某些条件逻辑时 我打算停止当前场景的运行 这意味着该场景已通过 然而 cucumber reporting 报告称该场景及其功能失败了 我在条件逻辑中使用 karate abort 函数 您会看到 mainFlow unhsFlow
  • 如何更改小向导图像的大小并在 inno setup 中具有自定义字段

    我希望我所有的 inno 设置页面如下所示 可以使用以下命令访问小向导图像WizardForm WizardSmallBitmapImage这是类型TBitmapImage 您可以更改此控件的大小和位置以适合您的设计 在顶部面板内 您还可以
  • NumericUpDown 背景色未按预期工作

    我最近需要编写 Windows NumericUpDown 控件的一个版本 该控件可以突出显示某个值是否是强制的 它需要通过更改控件的背景颜色来做到这一点 我认为这足够简单 但在尝试这样做时 我发现它有一个奇怪的副作用 即无法完全绘制所有控
  • 紧急回滚后如何将回滚的变更集+修复签入 TFS

    我们使用 VS2013 偶然向 TFS 提交了一些代码 这创建了变更集 2 为了修复这个错误 我们将变更集 2 回滚到本地计算机 然后我们提交了变更集 2 的回滚 从而创建了变更集 3 现在我们想要获取我们最初在本地计算机上错误签入的代码
  • 如何在 python 中制作固定大小的格式化字符串? [复制]

    这个问题在这里已经有答案了 我想创建一个具有固定大小和字段之间固定位置的格式化字符串 一个例子可以更好地解释 这里显然有 3 个不同的字段 并且字符串是固定大小的 XXX 123 98 00 YYYYY 3 1 00 ZZ 42 123 3
  • 无法加载文件或程序集'file:///C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\ asp.net vs2010

    昨天我的项目运行顺利 但今天我遇到了错误 详细信息如下 无法加载文件或程序集 file C WINDOWS Microsoft NET Framework v4 0 30319 Temporary ASP NET Files parktms
  • 如何创建可在 IronPython 中处理的 C# 事件处理程序?

    如何创建可在 IronPython 中处理的 C 事件处理程序 请注意 我使用的是 IronPython 2 0 1 我能够毫无问题地处理来自系统类的事件 例如 Window KeyDown 但是当我尝试定义自己的 C 事件时 当我尝试从
  • 从 nhibernate 中的 INSERT 命令中排除属性

    我有一个具有我希望只读属性的实体 这意味着当我将此实体插入数据库时 SqlServer 将自动生成该属性的值 因此我需要 nhibernate 在执行 INSERT 命令时忽略此属性 但在选择时检索它实体 重要提示 此属性不是ID 我不希望
  • codemirror:搜索并突出显示多个单词,无需对话框

    客观的 我在用代码镜像作为编辑 我想要 搜索并突出显示多个字符串 我希望能够迭代找到的每个匹配项并打印其行号 我想以编程方式执行此操作 并且不想使用对话框 如示例所示https codemirror net demo search html
  • linux redhat 6 并安装 easy_install

    我对此完全陌生 需要一些帮助 我有一个运行 Linux Redhat 6 并使用 Python 2 7 刚刚被设置为 Python 2 6 的默认值 的托管服务器 位于 usr local bin python2 7 我正在尝试在服务器上设
  • Android 示例应用程序未显示

    这里是新的 Android 开发人员 我正在关注以下教程http www vogella de 第一个应用程序 进行温度转换 有效 第二个 执行首选项并使用菜单 永远不会出现 我尝试过使用 Helios 和 Galileo 我尝试过重新安装
  • 发布应用时删除 AdMob 的测试设备 ID 是个好主意吗?

    我正准备在 Play 商店中启动一个应用程序 在尝试使用 AdMob 在测试模式下使用我的设备 ID 后 我现在想知道是否应该删除测试设备 ID 只保留 TEST EMULATOR 你觉得怎么样 有必要吗 是的 您应该在发布之前删除测试模式
  • 更新管理元框字段中的产品帖子元数据

    我正在尝试使用 update post meta 函数更新 WooCommerce 产品元数据 但它不起作用 这是我的代码 function woo add deal general fields save post id post id
  • 如何设置Active Directory用户的锁定时间和密码

    我想更改AD用户的userAccountControl和密码 用户已在 AD 中创建 该用户是使用 AD 中的 python ldap 模块创建的 处于 禁用 状态并且没有密码 AD 托管在 win2k8R2 上 当我使用 pythion
  • 当 Flexbox 项目以列模式换行时,容器不会增加其宽度

    我正在研究一个嵌套的弹性盒布局 它应该按如下方式工作 最外层 ul main 是一个水平列表 当添加更多项目时 该列表必须向右扩展 如果它变得太大 应该有一个水平滚动条 main display flex flex direction ro