我在使用 flexbox 时遇到了问题。
我正在使用带有 的容器flex-direction: column; flex-wrap: wrap,因此我的内部项目实际上可以放置在多列中。
问题是浏览器仍然将容器的宽度计算为内部项目宽度的总和!
我的容器块应该有一个较小的宽度(基于内容大小),但它实际上是巨大的。
无论如何,在使用列而不是行时,以这种方式计算容器的宽度也很不自然。
看看我的代码中的绿色块。它有一个巨大的,但它不应该有。此外,当您从容器中移除项目时,它会变小。
我期望的是具有小宽度的容器,因此它不会占用超过可用空间的一半。
在最新的 OS X 上的最新 Safari 和 Chrome 上进行了检查。
.container {
display: flex;
flex-wrap: wrap;
flex-direction: column;
background: #aa0000;
height: 100px;
}
.group {
display: flex;
flex-wrap: wrap;
flex-direction: column;
align-content: flex-start;
}
.g1 {
background: #00aa00;
}
.g2 {
background: #0000aa;
}Run Code Online (Sandbox Code Playgroud)
<div class="container">
<div class="group g1">
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
</div>
<div class="group g2">
<div class="item">Item</div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
这似乎是弹性盒布局模块中涉及flex-direction: column和 的另一个错误flex-wrap: wrap。
浏览器似乎在这个问题上无处不在。
在这种特殊情况下,如错误报告中所述:
在我看来,宽度的计算方式好像内部元素是水平布局 (
flex-direction: row) 而不是垂直布局。
在其他情况下,会发生相反的情况:
在这两种情况下,目前都没有 flex 方法来解决这个问题。
对于这个特定问题,一位开发人员提供了一种 CSS 解决方法,但我不确定它是否适用于所有浏览器。除非你真的很绝望,否则我不会推荐它:
在某些情况下,您可以通过使用垂直书写模式来解决此问题。
也就是说,不要使用
flex-direction: column;,而是使用flex-direction: row; writing-mode: vertical-lr;。请记住writing-mode: initial;在 flexbox 的子项中重置为。https://bugs.chromium.org/p/chromium/issues/detail?id=507397
错误报告: