私は次のように機能するはずのネストされたフレックスボックスレイアウトに取り組んでいます。
最も外側のレベル(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-Tricksのガイドラインに細心の注意を払って試みましたが、うまくいきませんでした。
このJSFiddleは、これまでのところを示しています。
期待される結果 (私が欲しいもの):
実際の結果 (私が得るもの):
古い結果 (2015年に取得したもの):
更新
いくつかの調査の後、これはより大きな問題のように見え始めています。主要なブラウザはすべて同じように動作し、フレックスボックスのデザインがネストされていることとは関係ありません。さらにシンプルなフレックスボックスの列レイアウトでは、アイテムが折り返されるときにリストの幅を増やすことを拒否します。
この他のJSFiddleは問題を明確に示しています。Chrome、Firefox、IE11の現在のバージョンでは、すべてのアイテムが正しく折り返されます。row
モードではリストの高さは増加しますが、モードでは幅は増加しませんcolumn
。また、column
モードの高さを変更しても、要素の即時のリフローはまったくありませんが、row
モードにはあります。
しかし、公式の仕様(特に例5を参照)は、私がやりたいことが可能であるはずであることを示しているようです。
誰かがこの問題の回避策を考え出すことができますか?
アップデート2
JavaScriptを使用して、サイズ変更イベント中にさまざまな要素の高さと幅を更新する多くの実験を行った後、その方法で解決しようとすると複雑すぎて手間がかかりすぎるという結論に達しました。また、JavaScriptを追加すると、フレックスボックスモデルが確実に機能しなくなります。これは可能な限りクリーンに保つ必要があります。
とりあえず、overflow-y: auto
代わりにフォールバックしflex-wrap: wrap
て、必要なときに内部コンテナーが垂直にスクロールするようにします。きれいではありませんが、少なくとも使いやすさを大幅に損なうことはありません。
column wrap
折り返し時に幅を拡張しないようにするバグがあります。詳細については、code.google.com / p / chromium / issues / detail?id = 247963をご覧ください。