検討する flex-direction
質問を読むときに最初に頭に浮かぶのは、flex-basis
常にに当てはまるわけではないということwidth
です。
flex-direction
isの場合row
、flex-basis
幅を制御します。
ときでもflex-direction
ありcolumn
、flex-basis
高さを制御します。
主な違い
flex-basis
and width
/の重要な違いはheight
次のとおりです。
flex-basis
フレックスアイテムにのみ適用されます。フレックスコンテナー(フレックスアイテムでもない)は無視しflex-basis
ますがwidth
、およびを使用できますheight
。
flex-basis
主軸でのみ機能します。たとえば、にいる場合flex-direction: column
、width
プロパティはflexアイテムを水平方向にサイズ変更するために必要になります。
flex-basis
絶対位置のフレックスアイテムには影響しません。width
とheight
プロパティが必要になります。絶対配置のフレックスアイテムは、フレックスレイアウトに参加しません。
使用してflex
、3つのプロパティをプロパティ- flex-grow
、flex-shrink
およびflex-basis
-きちんと1つの宣言に組み合わせることができます。を使用するwidth
と、同じルールで複数行のコードが必要になります。
ブラウザの動作
それらがどのようにレンダリングされるかという点では、is またはでない限り、との間に違いはflex-basis
ありません。width
flex-basis
auto
content
スペックから:
7.2.3。flex-basis
プロパティ
以外のすべての値のauto
とcontent
、flex-basis
同じように解決されたwidth
横書きモードでは。
しかし、の影響auto
かはcontent
最小限であるか全く何もないかもしれません。スペックの詳細:
auto
フレックスアイテムで指定すると、auto
キーワードはメインサイズプロパティの値をusedとして取得しますflex-basis
。その値がそれ自体auto
である場合、使用される値はcontent
です。
content
フレックスアイテムのコンテンツに基づいて、自動サイズ変更を示します。
注:この値は、フレキシブルボックスレイアウトの初期リリースには存在しなかったため、一部の古い実装ではサポートされません。のauto
メインサイズ(width
またはheight
)と組み合わせて使用すると、同等の効果を得ることができますauto
。
だから、仕様に応じて、flex-basis
とwidth
しない限り、同一の解決flex-basis
ですauto
かcontent
。そのような場合、flex-basis
コンテンツの幅を使用する場合があります(おそらく、width
プロパティでも使用されます)。
flex-shrink
要因
フレックスコンテナーの初期設定を覚えておくことが重要です。これらの設定の一部は次のとおりです。
flex-direction: row
-フレックスアイテムは水平に配置されます
justify-content: flex-start
-フレックスアイテムは、主軸の線の始点にスタックします
align-items: stretch
-フレックスアイテムは、コンテナのクロスサイズをカバーするように拡張されます
flex-wrap: nowrap
-フレックスアイテムは1行にとどまるように強制されます
flex-shrink: 1
-フレックスアイテムは縮小できます
最後の設定に注意してください。
フレックスアイテムはデフォルトで縮小できるため(コンテナーのオーバーフローを防ぐため)、指定されたflex-basis
/ width
/ height
がオーバーライドされる場合があります。
たとえば、 flex-basis: 100px
またはwidth: 100px
と組み合わせてflex-shrink: 1
、必ずしも100pxになるとは限りません。
指定された幅をレンダリングし、固定したままにするには、縮小を無効にする必要があります。
div {
width: 100px;
flex-shrink: 0;
}
または
div {
flex-basis: 100px;
flex-shrink: 0;
}
または、仕様で推奨されているとおり:
flex: 0 0 100px; /* don't grow, don't shrink, stay fixed at 100px */
7.2。柔軟性のコンポーネント
flex
省略形は未指定のコンポーネントを正しくリセットして一般的な用途に対応するため、作成者は、省略形を直接使用するのではなく、省略形を使用して柔軟性を制御することをお勧めします。
ブラウザのバグ
一部のブラウザーでは、ネストされたフレックスコンテナー内のフレックスアイテムのサイズ設定に問題があります。
flex-basis
ネストされたflexコンテナでは無視されます。width
動作します。
を使用するflex-basis
と、コンテナはその子のサイズを無視し、子はコンテナからオーバーフローします。しかし、width
プロパティを使用すると、コンテナはその子のサイズを尊重し、それに応じて拡張します。
参照:
例:
フレックス使用してアイテムflex-basis
やwhite-space: nowrap
オーバーフローのinline-flex
コンテナ。 width
動作します。
と設定されたフレックスコンテナーinline-flex
はflex-basis
、兄弟をレンダリングするときに子を認識しませんwhite-space: nowrap
(ただし、幅が未定義の項目である可能性があります)。コンテナは、アイテムを収容するために拡張しません。
ただし、width
プロパティをの代わりに使用するとflex-basis
、コンテナはその子のサイズを尊重し、それに応じて拡張します。これはIE11とEdgeの問題ではありません。
参照:
例:
flex-basis
(およびflex-grow
)テーブル要素で機能しない
参照:
flex-basis
祖父母コンテナが縮小してフィットする要素である場合、ChromeおよびFirefoxで失敗します。セットアップはEdgeで正常に機能します。
上記のリンクで示した例のように、およびをposition: absolute
使用すると、同じ欠陥のある出力がレンダリングされます(jsfiddleデモ)。float
inline-block
IE 10および11に影響するバグ: