フレックスボックスの列が 4 つあり、すべて正常に動作しますが、列にテキストを追加して大きなフォント サイズに設定すると、フレックス プロパティにより列が本来の幅よりも広くなってしまいます。
使用してみたword-break: break-word
ところ、役立ちましたが、列の幅を非常に小さくすると、テキスト内の文字が複数行に分割され (1 行に 1 文字)、列の幅が 1 文字サイズよりも小さくなりません。
これを見てビデオ(最初は最初の列が最も小さいですが、ウィンドウのサイズを変更すると、最も広い列になります。フレックス設定を常に尊重したいだけです。フレックス サイズは 1 : 3 : 4 : 4 です)
フォント サイズと列のパディングを小さく設定すると役立つことはわかっていますが、他に解決策はありますか?
使えませんoverflow-x: hidden
。
.container {
display: flex;
width: 100%
}
.col {
min-height: 200px;
padding: 30px;
word-break: break-word
}
.col1 {
flex: 1;
background: orange;
font-size: 80px
}
.col2 {
flex: 3;
background: yellow
}
.col3 {
flex: 4;
background: skyblue
}
.col4 {
flex: 4;
background: red
}
<div class="container">
<div class="col col1">Lorem ipsum dolor</div>
<div class="col col2">Lorem ipsum dolor</div>
<div class="col col3">Lorem ipsum dolor</div>
<div class="col col4">Lorem ipsum dolor</div>
</div>
ベストアンサー1
フレックスアイテムの自動最小サイズ
フレックスボックスのデフォルト設定が発生しました。
フレックス アイテムは、主軸に沿ったコンテンツのサイズよりも小さくすることはできません。
デフォルトは...
min-width: auto
min-height: auto
...それぞれ行方向と列方向のフレックス項目用です。
フレックス アイテムを次のように設定することで、これらのデフォルトを上書きできます。
min-width: 0
min-height: 0
overflow: hidden
(または を除く他の値visible
)
フレックスボックス仕様
フレックス アイテムのより適切なデフォルトの最小サイズを提供するために、この仕様では、CSS 2.1 で定義されているおよびプロパティ
auto
の初期値として新しい値を導入しています。min-width
min-height
価値に関してはauto
...
主軸にある
overflow
フレックスアイテムの場合、フレックスアイテムの主軸の min-size プロパティで指定すると、自動的に最小サイズが指定されます。それ以外の場合は に計算されます。visible
0
言い換えると:
- および
min-width: auto
のデフォルトはのmin-height: auto
場合にのみ適用されます。overflow
visible
overflow
値が でない場合visible
、min-size プロパティの値は になります0
。- したがって、 はおよび
overflow: hidden
の代わりに使用できます。min-width: 0
min-height: 0
そして...
- 最小サイズ設定アルゴリズムは主軸にのみ適用されます。
- たとえば、行方向のコンテナ内のフレックス アイテムは
min-height: auto
デフォルトでは取得されません。 - より詳しい説明については、この投稿をご覧ください:
min-width: 0 を適用したのに、アイテムがまだ縮小されませんか?
ネストされたフレックスコンテナ
HTML 構造の複数のレベルで flex アイテムを扱う場合は、上位レベルのアイテムのデフォルトのmin-width: auto
/をオーバーライドする必要がある場合があります。min-height: auto
基本的に、 を持つ上位レベルの flex アイテムは、min-width: auto
を持つ下位にネストされたアイテムの縮小を防ぐことができますmin-width: 0
。
例:
ブラウザレンダリングに関する注意事項
Chrome と Firefox / Edge の比較
少なくとも2017年以降、Chromeは(1)
min-width: 0
/のmin-height: 0
デフォルトに戻すか、(2)0
謎のアルゴリズムに基づいて特定の状況で自動的にデフォルトを適用するかのいずれかを行っているようです。(これは、介入) その結果、多くの人が Chrome ではレイアウト (特に必要なスクロールバー) が期待どおりに機能するのに対し、Firefox / Edge では機能しないことに気づきました。この問題については、ここで詳しく説明されています。Firefox と Chrome の flex-shrink の不一致IE11
仕様書に記載されているように、およびプロパティ
auto
の値は「new」です。つまり、一部のブラウザでは、 が更新される前にフレックスレイアウトを実装し、 が および の初期値であるため、デフォルトで値がレンダリングされる可能性があります。min-width
min-height
0
0
min-width
min-height
CSS2.1 について。そのようなブラウザの 1 つが IE11 です。他のブラウザはauto
、フレックスボックス仕様。
改訂版デモ
.container {
display: flex;
}
.col {
min-height: 200px;
padding: 30px;
word-break: break-word
}
.col1 {
flex: 1;
background: orange;
font-size: 80px;
min-width: 0; /* NEW */
}
.col2 {
flex: 3;
background: yellow
}
.col3 {
flex: 4;
background: skyblue
}
.col4 {
flex: 4;
background: red
}
<div class="container">
<div class="col col1">Lorem ipsum dolor</div>
<div class="col col2">Lorem ipsum dolor</div>
<div class="col col3">Lorem ipsum dolor</div>
<div class="col col4">Lorem ipsum dolor</div>
</div>