最近写前端,遇到了一个问题,具体问题就是 flexbox 里的内容会 溢出 并撑大父盒子。
在网上找到的解决办法就是在父盒子上加上 width:0 ,但是如果按照 CSS 标准来实际上这是多余的。
在相关 BUG 的复现代码中 FlexInnerContainer
的大小是 138.113px (和字体大小相关)而不是 2 个FlexItem
的大小 200px2*100p
。
实际上他的大小是怎么来的呢,实际上是 FlexItem div 中的内容大小决定的。可以做如下验证:去掉 CSS 属性中 FlexItem 的 flex: 0 0 100px; 然后就会发现 FlexInnerContainer 的大小和 MMMMMMMMM 这几个字符的大小相等。
所以最终结论就是在嵌套的 flexbox 中父元素设置的 flex-basis 是无效的。
解决办法:设置父元素的 width 。
https://gist.github.com/oldshensheep/6b3302207045538548291edfdb689dec.js
在线示例 https://codepen.io/oldshensheep/pen/eYrqgxP
这个 BUG 最早源于在 2013 年,见 https://bugs.chromium.org/p/chromium/issues/detail?id=240765 暂未修复。
https://bugs.chromium.org/p/chromium/issues/detail?id=464210
复现代码 http://codepen.io/anon/pen/wBJQap
https://bugzilla.mozilla.org/show_bug.cgi?id=1055887
BUG 暂未修复,应该快了。
现代的 Chrome 和 Firefox ,其他浏览器不了解
flex-basis 定义 https://www.w3.org/TR/css-flexbox-1/#flex-basis-property
https://stackoverflow.com/questions/39884226/why-does-an-element-with-flex-1-width-0-still-have-width
https://stackoverflow.com/questions/34352140/what-are-the-differences-between-flex-basis-and-width
在Browser Bugs
章节中可以看到更多信息。
在查询过程中发现基本上没有中文没有讨论这个 bug 的……还好我英文不是问题……
但是英文内容一搜一大把……
中文找到的一个相关答案,但是他没有认为这个是 BUG 。https://yogwang.site/2022/CSS-flex-container-stretched-by-content/
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.