フレックスアイテムの自動最小サイズ
フレックスボックスのデフォルト設定が発生しています。
フレックスアイテムは、主軸に沿ったコンテンツのサイズよりも小さくすることはできません。
デフォルトは...
min-width: auto
min-height: auto
...行方向と列方向のフレックスアイテムのそれぞれ。
これらのデフォルトを上書きするには、フレックスアイテムを次のように設定します。
min-width: 0
min-height: 0
overflow: hidden
(またはを除くその他の値visible
)
フレックスボックス仕様
4.5。フレックスアイテムの自動最小サイズ
フレックスアイテムにより適切なデフォルトの最小サイズを提供するために、この仕様auto
では、CSS 2.1で定義されているプロパティmin-width
とmin-height
プロパティの初期値として新しい値を導入しています。
auto
値に関して...
そのフレックス項目にoverflow
ある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を適用しましたが、アイテムはまだ縮小しませんか?
ネストされたFlexコンテナー
HTML構造の複数のレベルでフレックスアイテムを処理している場合は、上位レベルのアイテムのデフォルトの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
値は「新規」です。つまり、一部のブラウザーは、値が更新される前にフレックスレイアウトを実装し、CSS 2.1およびCSS 2.1の初期値であるため、デフォルトでまだ値をレンダリングする可能性があります。そのようなブラウザーの1つがIE11です。その他のブラウザは、フレックスボックスの仕様で定義されている新しい値に更新されています。min-width
min-height
0
0
min-width
min-height
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>
jsFiddle