1. はじめに
このセクションは規範的ではありません。
CSS 2.1では4つのレイアウトモードが定義されています。これらは、兄弟や祖先ボックスとの関係に基づいてボックスのサイズと位置を決定するアルゴリズムです:
-
ブロックレイアウト(文書のレイアウト向け)
-
インラインレイアウト(テキストのレイアウト向け)
-
テーブルレイアウト(2次元データを表形式でレイアウトするため)
-
配置レイアウト(他の要素をあまり考慮せずに非常に明示的な配置を可能にするため)
このモジュールは新しいレイアウトモードであるフレックスレイアウトを導入します。これはより複雑なアプリケーションやウェブページのレイアウト用に設計されています。
1.1. 概要
このセクションは規範的ではありません。
フレックスレイアウトは表面的にはブロックレイアウトに似ていますが、floatやcolumnのような、ブロックレイアウトで使える複雑なテキスト/文書中心のプロパティは多くありません。 その代わり、ウェブアプリや複雑なウェブページでよく必要とされる、スペースの分配やコンテンツの整列に強力でシンプルなツールを提供します。 フレックスコンテナの内容:
-
任意のフロー方向(左、右、下、さらには上!)でレイアウト可能
-
表示順序を逆転したり、スタイルレイヤーで‘order|再配置’できる(つまり、視覚順序はソースや読み上げ順序と独立できる)
-
利用可能なスペースに応じて“フレックス”サイズを変化できる
-
カタログはフレックスレイアウトでアイテムの行を横並びにし、各行のアイテムが同じ高さになるようにします。 各エントリ自体もカラムフレックスコンテナとなり、内容を縦方向にレイアウトします。
-
各エントリ内では、ソース文書の内容はタイトル→説明→写真の順で論理的に並びます。 これは読み上げレンダリングやCSS非対応ブラウザで適切な順序を提供します。 視覚的なプレゼンテーションのために、orderで画像を先頭に移動し、 align-selfで横方向に中央揃えしています。
-
購入ボタンの上にautoマージンを設定することで、説明の高さに関係なくボタンが各エントリボックスの最下部に配置されます。
#deals{ display : flex; /* フレックスレイアウト(アイテムを 同じ高さにする )*/ flex-flow: row wrap; /* アイテムの複数行折り返しを許可 */ } .sale-item{ display : flex; /* 各アイテムをフレックスレイアウトで配置 */ flex-flow: column; /* アイテム内容を縦方向に配置 */ } .sale-item > img{ order : -1 ; /* 画像を他の内容より前に(視覚順で)移動 */ align-self: center; /* 画像を横方向(副軸)中央に揃え */ } .sale-item > button{ margin-top : auto; /* 自動上マージンでボタンを下部へプッシュ */ }
< section id = "deals" > < section class = "sale-item" > < h1 > パソコン スターターキット</ h1 > < p > 予算が限られている方におすすめのパソコンセットです。< ul > < li > パソコン< li > モニター< li > キーボード< li > マウス</ ul > < img src = "images/computer.jpg" alt = "付属品:白いパソコンと周辺機器一式。" > < button > 今すぐ購入</ button > </ section > < section class = "sale-item" > …</ section > …</ section >

パソコン スターターキット
予算が限られている方におすすめのパソコンセットです。
- パソコン
- モニター
- キーボード
- マウス

プリンター
印刷できるのはASCIIアートのみです。
- 用紙・インクは付属しません
1.2. モジュールの相互作用
このモジュールはdisplayプロパティ[CSS2]の定義を拡張し、新しいブロックレベル型・インラインレベル型のdisplay値を追加し、新しいフォーマットコンテキストの種類とそれを制御するプロパティを定義します。 本モジュールで定義されたプロパティは、::first-lineや::first-letter疑似要素には適用されません。
CSS Box Alignment Moduleはここで導入された整列プロパティ (justify-content, align-items, align-self, align-content) の定義を拡張・上書きしています。
テスト
1.3. 値の定義
本仕様はCSSプロパティ定義の規約([CSS2])と値定義構文([CSS-VALUES-3])に従います。 仕様で定義されていない値型はCSS Values & Units [CSS-VALUES-3]に定義されています。 他のCSSモジュールとの組み合わせで、これらの値型定義が拡張される場合があります。
各プロパティ定義に記載された値以外にも、 本仕様で定義されるすべてのプロパティはCSS全域キーワードも値として受け付けます。 可読性のため、明示的な記載は省略しています。
2. フレックスレイアウトのボックスモデルと用語
フレックスコンテナは、displayプロパティの値が flex または inline-flexとなる要素によって生成されるボックスです。 フレックスコンテナの通常フロー内の子要素はフレックスアイテムと呼ばれ、フレックスレイアウトモデルで配置されます。
ブロック/インラインレイアウトとは異なり、 それらのレイアウト計算はブロック方向/インライン方向に偏っていますが、 フレックスレイアウトはフレックス方向に偏っています。 フレックスレイアウトについて説明しやすくするため、 このセクションではフレックスフロー相対の用語を定義します。 flex-flow値やwriting modeによって、これらの用語が物理方向(上/右/下/左)、軸(縦/横)、サイズ(幅/高さ)にどう対応するかが決まります。
- 主軸
- 主寸法
- フレックスコンテナの主軸は、フレックスアイテムが並ぶ主要な軸です。 主寸法に沿って広がります。
- 主開始(main-start)
- 主終了(main-end)
- フレックスアイテムはコンテナ内で 主開始側から 主終了側に向かって配置されます。
- 主サイズ
- 主サイズプロパティ
-
フレックスコンテナやフレックスアイテムの主サイズは、幅または高さ(主寸法側)を指します。
主サイズプロパティは、widthまたはheightプロパティのうち主寸法側のものです。
同様に、min主サイズプロパティおよびmax主サイズプロパティは、
min-width/max-width または min-height/max-height(主寸法側)で決まります。
主寸法側の値です。
それらは、min主サイズ/max主サイズとなります。
フレックスレイアウトでは、主サイズはflexプロパティで制御され、主サイズプロパティで直接制御されません。
注: これは、主寸法(width, height, inline-size, block-size) に関するフレックスアイテムの使用サイズの参照は、フレックス処理後の主サイズを指すことになります。
- 副軸
- 副寸法
- 主軸に垂直な軸は副軸と呼ばれます。 副寸法に沿って広がります。
- 副開始(cross-start)
- 副終了(cross-end)
- フレックスラインはアイテムで埋められ、コンテナ内で副開始側から副終了側に向かって配置されます。
- 副サイズ
- 副サイズプロパティ
- フレックスコンテナやフレックスアイテムの副サイズは、幅または高さ(副寸法側)を指します。 副サイズプロパティは、widthまたはheightプロパティのうち副寸法側のものです。 同様に、min副サイズプロパティおよびmax副サイズプロパティは、 min-width/max-width または min-height/max-height(副寸法側)で決まります。 副寸法側の値です。 それらは、min副サイズ/max副サイズとなります。
本仕様で使われている追加のサイズ用語はCSS Intrinsic and Extrinsic Sizingで定義されています。[CSS-SIZING-3]
3. フレックスコンテナ: flex および inline-flex display値
- flex
-
この値を指定すると、要素はフレックスコンテナボックスを生成し、
フローレイアウト内で配置されるときはブロックレベルとなります。
テスト
- baseline-synthesis-001.html (ライブテスト) (ソース)
- baseline-synthesis-002.html (ライブテスト) (ソース)
- baseline-synthesis-003.html (ライブテスト) (ソース)
- baseline-synthesis-004.html (ライブテスト) (ソース)
- baseline-synthesis-vert-lr-line-under.html (ライブテスト) (ソース)
- display-flex-001.htm (ライブテスト) (ソース)
- dynamic-change-simplified-layout-002.html (ライブテスト) (ソース)
- dynamic-change-simplified-layout.html (ライブテスト) (ソース)
- fixedpos-video-in-abspos-quirk-crash.html (ライブテスト) (ソース)
- flexbox_flex-0-0-0.html (ライブテスト) (ソース)
- flexbox_flex-0-0-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-0-0-1-unitless-basis.html (ライブテスト) (ソース)
- flexbox_flex-0-0-auto.html (ライブテスト) (ソース)
- flexbox_flex-0-0-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-0-0.html (ライブテスト) (ソース)
- flexbox_flex-0-0-N.html (ライブテスト) (ソース)
- flexbox_flex-0-0-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-0-0-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-0-0-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-0-0-N-unitless-basis.html (ライブテスト) (ソース)
- flexbox_flex-0-1-0.html (ライブテスト) (ソース)
- flexbox_flex-0-1-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-0-1-1-unitless-basis.html (ライブテスト) (ソース)
- flexbox_flex-0-1-auto.html (ライブテスト) (ソース)
- flexbox_flex-0-1-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-0-1.html (ライブテスト) (ソース)
- flexbox_flex-0-1-N.html (ライブテスト) (ソース)
- flexbox_flex-0-1-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-0-1-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-0-1-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-0-1-N-unitless-basis.html (ライブテスト) (ソース)
- flexbox_flex-0-auto.html (ライブテスト) (ソース)
- flexbox_flex-0-N-0.html (ライブテスト) (ソース)
- flexbox_flex-0-N-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-0-N-auto.html (ライブテスト) (ソース)
- flexbox_flex-0-N-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-0-N.html (ライブテスト) (ソース)
- flexbox_flex-0-N-N.html (ライブテスト) (ソース)
- flexbox_flex-0-N-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-0-N-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-0-N-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-0-0.html (ライブテスト) (ソース)
- flexbox_flex-1-0-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-1-0-auto.html (ライブテスト) (ソース)
- flexbox_flex-1-0-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-0.html (ライブテスト) (ソース)
- flexbox_flex-1-0-N.html (ライブテスト) (ソース)
- flexbox_flex-1-0-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-1-0-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-0-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-1-0.html (ライブテスト) (ソース)
- flexbox_flex-1-1-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-1-1-auto.html (ライブテスト) (ソース)
- flexbox_flex-1-1-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-1.html (ライブテスト) (ソース)
- flexbox_flex-1-1-N.html (ライブテスト) (ソース)
- flexbox_flex-1-1-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-1-1-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-1-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-N-0.html (ライブテスト) (ソース)
- flexbox_flex-1-N-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-1-N-auto.html (ライブテスト) (ソース)
- flexbox_flex-1-N-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-N.html (ライブテスト) (ソース)
- flexbox_flex-1-N-N.html (ライブテスト) (ソース)
- flexbox_flex-1-N-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-1-N-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-1-N-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-0-0.html (ライブテスト) (ソース)
- flexbox_flex-N-0-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-N-0-auto.html (ライブテスト) (ソース)
- flexbox_flex-N-0-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-0.html (ライブテスト) (ソース)
- flexbox_flex-N-0-N.html (ライブテスト) (ソース)
- flexbox_flex-N-0-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-N-0-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-0-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-1-0.html (ライブテスト) (ソース)
- flexbox_flex-N-1-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-N-1-auto.html (ライブテスト) (ソース)
- flexbox_flex-N-1-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-1.html (ライブテスト) (ソース)
- flexbox_flex-N-1-N.html (ライブテスト) (ソース)
- flexbox_flex-N-1-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-N-1-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-1-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-N-0.html (ライブテスト) (ソース)
- flexbox_flex-N-N-0-unitless.html (ライブテスト) (ソース)
- flexbox_flex-N-N-auto.html (ライブテスト) (ソース)
- flexbox_flex-N-N-auto-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-N.html (ライブテスト) (ソース)
- flexbox_flex-N-N-N.html (ライブテスト) (ソース)
- flexbox_flex-N-N-Npercent.html (ライブテスト) (ソース)
- flexbox_flex-N-N-Npercent-shrink.html (ライブテスト) (ソース)
- flexbox_flex-N-N-N-shrink.html (ライブテスト) (ソース)
- flexbox_flex-formatting-interop.html (ライブテスト) (ソース)
- flexbox_generated-flex.html (ライブテスト) (ソース)
- flexbox_generated.html (ライブテスト) (ソース)
- flexbox_generated-nested-flex.html (ライブテスト) (ソース)
- flexbox-iframe-intrinsic-size-001.html (ライブテスト) (ソース)
- flexbox_item-bottom-float.html (ライブテスト) (ソース)
- flexbox_item-clear.html (ライブテスト) (ソース)
- flexbox_item-float.html (ライブテスト) (ソース)
- flexbox_item-top-float.html (ライブテスト) (ソース)
- flexbox_item-vertical-align.html (ライブテスト) (ソース)
- flexbox_block.html (ライブテスト) (ソース)
- flexbox_box-clear.html (ライブテスト) (ソース)
- flexbox_display.html (ライブテスト) (ソース)
- flexbox_fbfc2.html (ライブテスト) (ソース)
- flexbox_fbfc.html (ライブテスト) (ソース)
- flexbox_nested-flex.html (ライブテスト) (ソース)
- flexbox-root-node-001a.html (ライブテスト) (ソース)
- flexbox-root-node-001b.html (ライブテスト) (ソース)
- flexbox_stf-fixpos.html (ライブテスト) (ソース)
- flexbox_stf-float.html (ライブテスト) (ソース)
- flexbox_stf-inline-block.html (ライブテスト) (ソース)
- flexbox_stf-table-caption.html (ライブテスト) (ソース)
- flexbox_stf-table-cell.html (ライブテスト) (ソース)
- flexbox_stf-table.html (ライブテスト) (ソース)
- flexbox_stf-table-row-group.html (ライブテスト) (ソース)
- flexbox_stf-table-row.html (ライブテスト) (ソース)
- flexbox_stf-table-singleline-2.html (ライブテスト) (ソース)
- flexbox_stf-table-singleline.html (ライブテスト) (ソース)
- flexbox_table-fixed-layout.html (ライブテスト) (ソース)
- flexbox-with-multi-column-property.html (ライブテスト) (ソース)
- flexbox_computedstyle_display.html (ライブテスト) (ソース)
- grid-flex-item-001.html (ライブテスト) (ソース)
- grid-flex-item-002.html (ライブテスト) (ソース)
- grid-flex-item-003.html (ライブテスト) (ソース)
- grid-flex-item-004.html (ライブテスト) (ソース)
- grid-flex-item-005.html (ライブテスト) (ソース)
- grid-flex-item-006.html (ライブテスト) (ソース)
- grid-flex-item-007.html (ライブテスト) (ソース)
- flexbox_interactive_flex-transitions.html (manual test) (ソース)
- flexbox_interactive_order-transitions-2.html (manual test) (ソース)
- flexbox_interactive_order-transitions.html (manual test) (ソース)
- nested-flex-image-loading-invalidates-intrinsic-sizes.html (ライブテスト) (ソース)
- percentage-margins-001.html (ライブテスト) (ソース)
- stretch-after-sibling-size-change.html (ライブテスト) (ソース)
- stretched-child-in-nested-flexbox-001.html (ライブテスト) (ソース)
- stretched-child-in-nested-flexbox-002.html (ライブテスト) (ソース)
- stretched-child-in-nested-flexbox-003.html (ライブテスト) (ソース)
- stretched-child-shrink-on-relayout.html (ライブテスト) (ソース)
- stretch-flex-item-checkbox-input.html (ライブテスト) (ソース)
- stretch-flex-item-radio-input.html (ライブテスト) (ソース)
- stretching-orthogonal-flows.html (ライブテスト) (ソース)
- table-with-percent-intrinsic-width.html (ライブテスト) (ソース)
- inline-flex
-
この値を指定すると、要素はフレックスコンテナボックスを生成し、
フローレイアウト内で配置されるときは
インラインレベルになります。
テスト
- flexbox_inline.html (ライブテスト) (ソース)
- flex-inline.html (ライブテスト) (ソース)
- flexbox_inline-float.html (ライブテスト) (ソース)
- inline-flexbox-absurd-block-size-crash.html (ライブテスト) (ソース)
- inline-flexbox-wrap-vertically-width-calculation.html (ライブテスト) (ソース)
- inline-flex-editing-crash.html (ライブテスト) (ソース)
- inline-flex-editing-with-updating-text-crash.html (ライブテスト) (ソース)
- inline-flex-frameset-main-axis-crash.html (ライブテスト) (ソース)
- inline-flex.html (ライブテスト) (ソース)
- inline-flex-min-content-height.html (ライブテスト) (ソース)
- flexbox_computedstyle_display-inline.html (ライブテスト) (ソース)
- intrinsic-width-orthogonal-writing-mode.html (ライブテスト) (ソース)
フレックスコンテナは、その内容に対して新しいフレックス整形コンテキストを確立します。 これはブロック整形コンテキストを確立するのと同じですが、ブロックレイアウトの代わりにフレックスレイアウトが使用されます。 例えば、フロートはフレックスコンテナ内に侵入せず、フレックスコンテナのマージンはその内容のマージンと折り畳まれません。フレックスコンテナは、その内容に対してブロックコンテナと全く同じように包含ブロックを形成します。[CSS2] overflowプロパティはフレックスコンテナに適用されます。
テスト
- flexbox-overflow-horiz-001.html (ライブテスト) (ソース)
- flexbox-overflow-horiz-002.html (ライブテスト) (ソース)
- flexbox-overflow-horiz-003.html (ライブテスト) (ソース)
- flexbox-overflow-horiz-004.html (ライブテスト) (ソース)
- flexbox-overflow-horiz-005.html (ライブテスト) (ソース)
- flexbox-overflow-padding-001.html (ライブテスト) (ソース)
- flexbox-overflow-padding-002.html (ライブテスト) (ソース)
- flexbox-overflow-vert-001.html (ライブテスト) (ソース)
- flexbox-overflow-vert-002.html (ライブテスト) (ソース)
- flexbox-overflow-vert-003.html (ライブテスト) (ソース)
- flexbox-overflow-vert-004.html (ライブテスト) (ソース)
- flexbox-overflow-vert-005.html (ライブテスト) (ソース)
- flexbox_rowspan-overflow-automatic.html (ライブテスト) (ソース)
- flexbox_rowspan-overflow.html (ライブテスト) (ソース)
- flexbox-safe-overflow-position-001.html (ライブテスト) (ソース)
- flexbox-safe-overflow-position-002.html (ライブテスト) (ソース)
- flexbox-safe-overflow-position-003.html (ライブテスト) (ソース)
- flexbox-safe-overflow-position-004.html (ライブテスト) (ソース)
- flexbox-safe-overflow-position-005.html (ライブテスト) (ソース)
- flexbox-safe-overflow-position-006.html (ライブテスト) (ソース)
- flexbox_width-overflow.html (ライブテスト) (ソース)
- min-size-auto-overflow-clip.html (ライブテスト) (ソース)
- negative-overflow-002.html (ライブテスト) (ソース)
- negative-overflow-003.html (ライブテスト) (ソース)
- negative-overflow.html (ライブテスト) (ソース)
- overflow-area-001.html (ライブテスト) (ソース)
- overflow-area-002.html (ライブテスト) (ソース)
- overflow-area-003.html (ライブテスト) (ソース)
- overflow-auto-001.html (ライブテスト) (ソース)
- overflow-auto-002.html (ライブテスト) (ソース)
- overflow-auto-003.html (ライブテスト) (ソース)
- overflow-auto-004.html (ライブテスト) (ソース)
- overflow-auto-005.html (ライブテスト) (ソース)
- overflow-auto-006.html (ライブテスト) (ソース)
- overflow-auto-007.html (ライブテスト) (ソース)
- overflow-auto-008.html (ライブテスト) (ソース)
- overflow-top-left.html (ライブテスト) (ソース)
- padding-overflow.html (ライブテスト) (ソース)
- text-overflow-on-flexbox-001.html (ライブテスト) (ソース)
- synthesize-vrl-baseline.html (ライブテスト) (ソース)
フレックスコンテナはブロックコンテナではないため、ブロックレイアウトを前提として設計された一部のプロパティはフレックスレイアウトの文脈では適用されません。特に:
-
vertical-alignはフレックスアイテムに効果を持ちません。
-
::first-lineおよび::first-letter疑似要素はフレックスコンテナには適用されず、フレックスコンテナは先祖要素に最初のフォーマット済み行や最初の文字を提供しません。
テスト
- align-content-wrap-004.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-lr-table-item.html (ライブテスト) (ソース)
- align-items-baseline-vert-lr-column-horz-table-item.html (ライブテスト) (ソース)
- align-items-baseline-vert-rl-column-horz-table-item.html (ライブテスト) (ソース)
- flexbox_box-clear.html (ライブテスト) (ソース)
- flexbox_first-letter.html (ライブテスト) (ソース)
- flexbox_first-line.html (ライブテスト) (ソース)
- flexbox-ignores-first-letter.html (ライブテスト) (ソース)
- flexbox_item-vertical-align.html (ライブテスト) (ソース)
- flexbox-with-pseudo-elements-001.html (ライブテスト) (ソース)
- flexbox-with-pseudo-elements-002.html (ライブテスト) (ソース)
- flexbox-with-pseudo-elements-003.html (ライブテスト) (ソース)
- flexible-box-float.html (ライブテスト) (ソース)
- flex-item-vertical-align.html (ライブテスト) (ソース)
- flex-vertical-align-effect.html (ライブテスト) (ソース)
- hittest-before-pseudo.html (ライブテスト) (ソース)
要素のdisplayプロパティが inline-flexに指定されている場合、 displayプロパティは特定の状況下でflexに算出されます。 CSS 2.1 セクション9.7の表に行が追加され、 「Specified Value(指定値)」列にinline-flex、 「Computed Value(算出値)」列にflexが入ります。
4. フレックスアイテム
ざっくり言えば、フレックスアイテムは フレックスコンテナのフロー内内容を表すボックスです。
フレックスコンテナ のインフローの子要素はそれぞれ フレックスアイテム となり、各子 テキストシーケンス は 匿名 の ブロックコンテナ フレックスアイテム にラップされます。 ただし、テキストシーケンス 全体が 文書の空白文字(つまり white-space プロパティの影響を受ける文字)のみで構成されている場合は、 代わりに描画されません(テキストノード が display:none であるかのように扱われます)。
テスト
- anonymous-block.html (ライブテスト) (ソース)
- anonymous-flex-item-001.html (ライブテスト) (ソース)
- anonymous-flex-item-002.html (ライブテスト) (ソース)
- anonymous-flex-item-003.html (ライブテスト) (ソース)
- anonymous-flex-item-004.html (ライブテスト) (ソース)
- anonymous-flex-item-005.html (ライブテスト) (ソース)
- anonymous-flex-item-006.html (ライブテスト) (ソース)
- canvas-dynamic-change-001.html (ライブテスト) (ソース)
- column-flex-child-with-max-width.html (ライブテスト) (ソース)
- flexbox-whitespace-handling-001a.xhtml (ライブテスト) (ソース)
- flexbox-whitespace-handling-001b.xhtml (ライブテスト) (ソース)
- flexbox-whitespace-handling-002.xhtml (ライブテスト) (ソース)
- hittest-anonymous-box.html (ライブテスト) (ソース)
- percentage-descendant-of-anonymous-flex-item.html (ライブテスト) (ソース)
- percentage-size-subitems-001.html (ライブテスト) (ソース)
- whitespace-in-flexitem-001.html (ライブテスト) (ソース)
フレックスアイテムの例:
< div style = "display:flex" > <!-- フレックスアイテム: ブロック子要素 --> < div id = "item1" > block</ div > <!-- フレックスアイテム: float要素 (floatは無視される) --> < div id = "item2" style = "float: left;" > float</ div > <!-- フレックスアイテム: インライン内容の周りの匿名ブロックボックス --> anonymous item 3<!-- フレックスアイテム: インライン子要素 --> < span > item 4<!-- フレックスアイテムは ブロックの周りで分割 されない --> < q style = "display: block" id = not-an-item > item 4</ q > item 4</ span > </ div >
要素間の空白は消えることに注意してください。 この空白は独立したフレックスアイテムにはなりませんが、要素間テキスト自体は匿名フレックスアイテムにラップされます。
また、匿名アイテムのボックスにはスタイルを割り当てることができないため、スタイル不可であることにも注意してください。 ただし、その内容はフレックスコンテナから(フォント設定などの)スタイルを継承します。
フレックスアイテムはその内容に対して独立した整形コンテキストを確立します。 ただし、フレックスアイテム自身はフレックスレベルボックスであり、ブロックレベルボックスではありません。 それらはコンテナのフレックス整形コンテキストに参加し、ブロック整形コンテキストには参加しません。
注: この仕様を読む著者は以下のボックス生成と静的位置の詳細を飛ばしてもよいでしょう。
要素の最も近い先祖要素(display:contentsの先祖は飛ばす)の算出されたdisplay値が flexまたはinline-flexの場合、 その要素自身のdisplay値はblockified(ブロック化)されます。 (この型のdisplay値変換の詳細はCSS2.1§9.7 [CSS2]や CSS Display 3 § 2.7 自動ボックスタイプ変換を参照してください。)
注: flexやinline-flex要素が最終的にフレックスコンテナボックスを生成しない場合(例:置換要素やdisplay: noneのサブツリーの場合)でも、ブロック化は発生します。
注: displayの一部の値は通常、元のボックスの周囲に匿名ボックスの生成を引き起こします。 そのようなボックスがフレックスアイテムである場合、 まずブロック化されるため、匿名ボックス生成は発生しません。 例えば、2つの隣接するフレックスアイテムがdisplay: table-cellの場合、1つの匿名テーブルにラップされるのではなく、2つの独立したdisplay: blockのフレックスアイテムになります。
display: table のフレックスアイテムの場合、 テーブルラッパーボックスがフレックスアイテムとなり、 align-selfプロパティはそれに適用されます。 キャプションボックスの内容は テーブルラッパーボックスのmin-contentおよびmax-contentサイズの計算に寄与します。 ただし、widthやheightと同様に、flexのロングハンドはテーブルボックスに次のように適用されます: フレックスアイテムの最終サイズは、 テーブルラッパーボックスの端とテーブルボックスの内容端との間の距離がすべてテーブルボックスのborder+padding領域の一部であるかのようにレイアウトを行い、 テーブルボックスがフレックスアイテムであるかのように計算されます。
4.1. 絶対位置指定されたフレックスの子要素
絶対位置指定の子要素はフロー外であるため、フレックスコンテナのフレックスレイアウトには参加しません。
フレックスコンテナの絶対位置指定の子要素の交差軸の端は、静的位置レクトのコンテンツ端(フレックスコンテナのもの)です。 静的位置レクトの主軸側の端は、子要素がそのフレックスコンテナ内で唯一のフレックスアイテムであり、かつ子要素とコンテナの両方が使用サイズの固定サイズボックスであると仮定した場合に、子要素のマージン端が配置される位置です。 (この目的のため、子要素のautoマージンはゼロとして扱われます。)
テスト
- abspos-autopos-htb-ltr.html (ライブテスト) (ソース)
- abspos-autopos-htb-rtl.html (ライブテスト) (ソース)
- abspos-autopos-vlr-ltr.html (ライブテスト) (ソース)
- abspos-autopos-vlr-rtl.html (ライブテスト) (ソース)
- abspos-autopos-vrl-ltr.html (ライブテスト) (ソース)
- abspos-autopos-vrl-rtl.html (ライブテスト) (ソース)
- dynamic-align-self-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-safe-002.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-safe-003.html (ライブテスト) (ソース)
- abspos-descendent-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-content-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-002.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-003.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-004.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-005.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-006.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-007.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-008.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-rtl-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-rtl-002.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-rtl-003.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-rtl-004.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-safe-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-vertWM-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-vertWM-002.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-vertWM-003.html (ライブテスト) (ソース)
- flex-abspos-staticpos-align-self-vertWM-004.html (ライブテスト) (ソース)
- flex-abspos-staticpos-fallback-justify-content-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-002.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-003.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-004.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-005.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-006.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-007.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-008.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-rtl-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-rtl-002.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-vertWM-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-content-vertWM-002.html (ライブテスト) (ソース)
- flex-abspos-staticpos-justify-self-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-margin-001.html (ライブテスト) (ソース)
- flex-abspos-staticpos-margin-002.html (ライブテスト) (ソース)
- flex-abspos-staticpos-margin-003.html (ライブテスト) (ソース)
- flexbox_absolute-atomic.html (ライブテスト) (ソース)
- flexbox-abspos-child-001a.html (ライブテスト) (ソース)
- flexbox-abspos-child-001b.html (ライブテスト) (ソース)
- flexbox-abspos-child-002.html (ライブテスト) (ソース)
- flexbox_inline-abspos.html (ライブテスト) (ソース)
- position-absolute-001.html (ライブテスト) (ソース)
- position-absolute-002.html (ライブテスト) (ソース)
- position-absolute-003.html (ライブテスト) (ソース)
- position-absolute-004.html (ライブテスト) (ソース)
- position-absolute-005.html (ライブテスト) (ソース)
- position-absolute-006.html (ライブテスト) (ソース)
- position-absolute-007.html (ライブテスト) (ソース)
- position-absolute-008.html (ライブテスト) (ソース)
- position-absolute-009.html (ライブテスト) (ソース)
- position-absolute-010.html (ライブテスト) (ソース)
- position-absolute-011.html (ライブテスト) (ソース)
- position-absolute-012.html (ライブテスト) (ソース)
- position-absolute-013.html (ライブテスト) (ソース)
- position-absolute-014.html (ライブテスト) (ソース)
- position-absolute-015.html (ライブテスト) (ソース)
- position-absolute-containing-block-001.html (ライブテスト) (ソース)
- position-absolute-containing-block-002.html (ライブテスト) (ソース)
- flex-content-alignment-with-abspos-001.html (ライブテスト) (ソース)
- dynamic-grid-flex-abspos.html (ライブテスト) (ソース)
- flexbox_stf-abspos.html (ライブテスト) (ソース)
- flex-item-position-relative-001.html (ライブテスト) (ソース)
4.2. フレックスアイテムのマージンとパディング
隣接する フレックスアイテム のマージンは 相殺されません。
フレックスアイテム 上のパーセンテージマージンとパディングは、 ブロックボックス 上のものと同様に、 包含ブロックのインラインサイズに対して解決されます。 例えば left/right/top/bottom の各パーセンテージは、 横書き writing-mode の場合、 すべて 包含ブロック の 幅に対して解決されます。
auto マージンは、対応する次元の余剰スペースを吸収するよう拡張されます。 アラインメントのために使ったり、 隣接するフレックスアイテム同士を離すためにも利用できます。 auto マージンによる整列も参照。
テスト
4.3. フレックスアイテムのZ順序
フレックスアイテムは、インラインブロックと全く同じように描画されます [CSS2] が、 orderで修正された文書順が生の文書順の代わりに使われ、 z-indexがauto以外の場合は positionがstaticであってもスタッキングコンテキストが作られます (positionがrelativeであるかのように振る舞います)。
注: フレックスアイテムの外側に配置された子孫も、フレックスアイテムが確立したスタッキングコンテキストに依然として参加します。
テスト
- flexbox-paint-ordering-001.xhtml (ライブテスト) (ソース)
- flexbox-paint-ordering-002.xhtml (ライブテスト) (ソース)
- flexbox-paint-ordering-003.html (ライブテスト) (ソース)
- flex-item-z-ordering-001.html (ライブテスト) (ソース)
- flex-item-z-ordering-002.html (ライブテスト) (ソース)
- flexbox-items-as-stacking-contexts-001.xhtml (ライブテスト) (ソース)
- flexbox-items-as-stacking-contexts-002.html (ライブテスト) (ソース)
- flexbox-items-as-stacking-contexts-003.html (ライブテスト) (ソース)
- hittest-overlapping-margin.html (ライブテスト) (ソース)
- hittest-overlapping-order.html (ライブテスト) (ソース)
- hittest-overlapping-relative.html (ライブテスト) (ソース)
4.4. 折りたたまれたアイテム
フレックスアイテムにvisibility:collapseを指定すると、 それは折りたたまれたフレックスアイテムとなり、 visibility:collapseがテーブル行やテーブル列に与える効果と似た動作になります。 折りたたまれたフレックスアイテムは描画から完全に除外されますが、 フレックスラインの交差サイズを維持する「支柱」が残されます。 このため、フレックスコンテナが1つのフレックスラインしか持たない場合、 アイテムを動的に折りたたみ/展開しても フレックスコンテナの主サイズは変化することがありますが、 交差サイズには影響せず、ページ全体のレイアウトが「揺れる」ことはありません。 ただしフレックスラインの折り返しは折りたたみ後に再計算されるため、 複数行ある場合はコンテナの交差サイズが変化することもあります。
折りたたまれたフレックスアイテムは描画されませんが、 整形構造には現れます。 そのため、display:noneアイテムとは異なり [CSS2]、 ボックスが整形構造に現れることに依存する効果(カウンターの増分やアニメーション・トランジションの実行など)は 折りたたまれたアイテムにも適用されます。
テスト
@media ( min-width:60 em ) { /* 十分な余白がある場合のみ二列レイアウト (デフォルトの文字サイズ相対)*/ div{ display : flex; } #main{ flex : 1 ; /* メインが残りスペースをすべて占める */ order:1 ; /* ナビゲーションの右(後)に配置 */ min-width:12 em ; /* メインエリアの最適なサイズ調整 */ } } /* メニュー項目はflexレイアウトを使うので visibility:collapse が機能する */ nav > ul > li{ display : flex; flex-flow : column; } /* ターゲットでないサブメニューを動的に折りたたむ */ nav > ul > li:not ( :target) :not ( :hover) > ul{ visibility : collapse; }
< div > < article id = "main" > 面白い読み物</ article > < nav > < ul > < li id = "nav-about" >< a href = "#nav-about" > 概要</ a > …< li id = "nav-projects" >< a href = "#nav-projects" > プロジェクト</ a > < ul > < li >< a href = "…" > アート</ a > < li >< a href = "…" > 建築</ a > < li >< a href = "…" > 音楽</ a > </ ul > < li id = "nav-interact" >< a href = "#nav-interact" > 交流</ a > …</ ul > </ nav > </ div > < footer > …
支柱のサイズを計算するには、まずすべてのアイテムを折りたたまない状態でフレックスレイアウトを実行し、 次に各折りたたまれたフレックスアイテムを元のラインの交差サイズを維持する支柱に置き換えて再度実行します。 visibility:collapseがフレックスレイアウトとどのように相互作用するかの規範定義は フレックスレイアウトアルゴリズムを参照してください。
注: フレックスアイテムにvisibility:collapseを使うと フレックスレイアウトアルゴリズムが途中から再実行され、 最もコストが高いステップが再度実施されます。 動的に折りたたみ/展開しない場合は、レイアウトエンジンの効率のためにdisplay:noneで非表示にすることを推奨します。 (visibility変更時は一部のみ再実行されるため、 動的ケースでは 'visibility: collapse' の利用が推奨されます。)
4.5. フレックスアイテムの自動最小サイズ
注: auto キーワードは 自動最小サイズを表し、 min-widthおよびmin-heightプロパティの新しい初期値です。 このキーワードは以前は本仕様で定義されていましたが、 現在はCSS Sizingモジュールで定義されています。
より妥当なデフォルトの最小サイズをフレックスアイテムに提供するため、 主軸の自動最小サイズ(フレックスアイテムで算出されたoverflow値が非スクロール可能の場合)は内容ベースの最小サイズとなります。 スクロールコンテナの場合、 自動最小サイズは通常通りゼロです。
内容ベースの最小サイズは フレックスアイテムが 置換要素か否かによって異なります:
- 置換要素の場合
- 非置換要素の場合
どちらの場合も、 最大主サイズが明確であれば、その値で制限されます。
内容サイズ候補、 指定サイズ候補、 転送サイズ候補では、 関連する min/max/推奨サイズプロパティを考慮することで、 内容ベースの最小サイズが作者指定の制約と干渉しません。 それぞれの定義は以下の通りです:
- 指定サイズ候補
- アイテムの推奨主サイズが明確かつ自動でない場合、 指定サイズ候補はそのサイズとなります。 それ以外の場合は未定義です。
- 転送サイズ候補
- アイテムに推奨アスペクト比があり、かつ推奨 交差サイズが明確であれば、 転送サイズ候補はそのサイズになります (そのサイズが最小および最大交差サイズが明確な場合は、それらで制限されます)、 アスペクト比を使って変換されます。 それ以外の場合は未定義です。
- 内容サイズ候補
- 内容サイズ候補は、min-contentサイズ (主軸において)です。 アイテムに推奨アスペクト比がある場合は、 明確な最小および最大 交差サイズ(アスペクト比で変換)で制限されます。
テスト
- content-height-with-scrollbars.html (ライブテスト) (ソース)
- fieldset-as-item-dynamic.html (ライブテスト) (ソース)
- fieldset-as-item-overflow.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-001.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-002.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-003.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-004.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-005.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-006.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-007.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-008.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-009.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-010.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-011.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-012.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-013.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-014.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-015.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-016.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-017.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-column-018.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-001.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-002.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-003.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-004.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-005.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-006.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-007.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-008.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-009.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-010.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-011.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-012.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-013.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-014.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-015.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-016.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-row-017.html (ライブテスト) (ソース)
- flex-aspect-ratio-img-vert-lr.html (ライブテスト) (ソース)
- flexbox-definite-cross-size-constrained-percentage.html (ライブテスト) (ソース)
- flexbox-min-height-auto-001.html (ライブテスト) (ソース)
- flexbox-min-height-auto-002a.html (ライブテスト) (ソース)
- flexbox-min-height-auto-002b.html (ライブテスト) (ソース)
- flexbox-min-height-auto-002c.html (ライブテスト) (ソース)
- flexbox-min-height-auto-003.html (ライブテスト) (ソース)
- flexbox-min-height-auto-004.html (ライブテスト) (ソース)
- flexbox-min-width-auto-001.html (ライブテスト) (ソース)
- flexbox-min-width-auto-002a.html (ライブテスト) (ソース)
- flexbox-min-width-auto-002b.html (ライブテスト) (ソース)
- flexbox-min-width-auto-002c.html (ライブテスト) (ソース)
- flexbox-min-width-auto-003.html (ライブテスト) (ソース)
- flexbox-min-width-auto-004.html (ライブテスト) (ソース)
- flexbox-min-width-auto-005.html (ライブテスト) (ソース)
- flexbox-min-width-auto-006.html (ライブテスト) (ソース)
- flex-item-compressible-001.html (ライブテスト) (ソース)
- flex-item-compressible-002.html (ライブテスト) (ソース)
- flexitem-stretch-image.html (ライブテスト) (ソース)
- flexitem-stretch-range.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-001.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-002.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-003.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-004.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-005.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-006.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-007.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-008.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-009.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-010.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-011.xht (ライブテスト) (ソース)
- flex-minimum-height-flex-items-012.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-013.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-014.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-015.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-016.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-017.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-018.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-019.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-020.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-021.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-022.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-023.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-024.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-025.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-026.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-027.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-028.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-029.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-030.html (ライブテスト) (ソース)
- flex-minimum-height-flex-items-031.html (ライブテスト) (ソース)
- flex-minimum-size-001.html (ライブテスト) (ソース)
- flex-minimum-size-002.html (ライブテスト) (ソース)
- flex-minimum-size-003.html (ライブテスト) (ソース)
- flex-minimum-width-flex-items-001.xht (ライブテスト) (ソース)
- flex-minimum-width-flex-items-002.xht (ライブテスト) (ソース)
- flex-minimum-width-flex-items-003.xht (ライブテスト) (ソース)
- flex-minimum-width-flex-items-004.xht (ライブテスト) (ソース)
- flex-minimum-width-flex-items-005.xht (ライブテスト) (ソース)
- flex-minimum-width-flex-items-006.xht (ライブテスト) (ソース)
- flex-minimum-width-flex-items-007.xht (ライブテスト) (ソース)
- flex-minimum-width-flex-items-008.xht (ライブテスト) (ソース)
- flex-minimum-width-flex-items-009.html (ライブテスト) (ソース)
- flex-minimum-width-flex-items-010.html (ライブテスト) (ソース)
- flex-minimum-width-flex-items-011.html (ライブテスト) (ソース)
- flex-minimum-width-flex-items-012.html (ライブテスト) (ソース)
- flex-minimum-width-flex-items-013.html (ライブテスト) (ソース)
- flex-minimum-width-flex-items-014.html (ライブテスト) (ソース)
- flex-minimum-width-flex-items-015.html (ライブテスト) (ソース)
- flex-minimum-width-flex-items-016.html (ライブテスト) (ソース)
- flexbox_computedstyle_min-auto-size.html (ライブテスト) (ソース)
- flexbox_computedstyle_min-height-auto.html (ライブテスト) (ソース)
- flexbox_computedstyle_min-width-auto.html (ライブテスト) (ソース)
- select-element-zero-height-001.html (ライブテスト) (ソース)
- select-element-zero-height-002.html (ライブテスト) (ソース)
注: 内容ベースの最小サイズは内在サイズ寄与の一種であり、CSS Sizing 3 § 5.2 内在寄与の循環パーセンテージ規定が適用されます。
ボックスの内在サイズ(例:ボックスのmin-contentサイズ)を計算する目的では、 内容ベースの最小サイズは、その軸のサイズを不定にします (たとえwidthプロパティが明確なサイズを指定していても)。 つまり、このサイズに対して計算されるパーセンテージは autoとして振る舞うことになります。
内在サイズの計算以外の目的では、 内容ベースの最小サイズは(明示的なmin-contentや最小サイズとは異なり)ボックスのサイズを不定にはしません。 しかし、この最小サイズの適用前にボックスのサイズに対して解決されたパーセンテージがあれば、 適用後の新しいサイズに対して再解決しなければなりません。
特に、ドキュメントの主要なコンテンツ領域にフレックスサイズを使う場合は、 min-width: 12emのような明示的なフォント相対の最小幅を指定した方が良いでしょう。 内容ベースの最小幅では、大きなテーブルや画像がコンテンツ領域全体のサイズを広げてしまい、 テキストの行が不必要に長くなって読みにくくなる可能性があります。
また、内容ベースのサイズ指定を大量の内容を持つアイテムに使う場合、 レイアウトエンジンは最小サイズを見つけるまでその全内容を走査しなければならず、 著者が明示的な最小値を設定した場合はこの必要がありません。 (内容が少ない場合はこの走査はほぼ無視できるので、パフォーマンス上の懸念はありません。)
テスト
- aspect-ratio-intrinsic-size-001.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-002.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-003.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-004.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-005.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-006.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-007.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-008.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-009.html (ライブテスト) (ソース)
- aspect-ratio-intrinsic-size-010.html (ライブテスト) (ソース)
- aspect-ratio-transferred-max-size.html (ライブテスト) (ソース)
- flex-item-content-is-min-width-max-content.html (ライブテスト) (ソース)
5. 並び順と方向
フレックスコンテナの内容は、どの方向にも、どの順序にも配置することができます。 これにより、以前は複雑または壊れやすい方法で実現していた効果―― 例えばfloatや clear プロパティを使ったハックなど――を、容易に実現できるようになります。 この機能は、flex-direction、flex-wrap、order プロパティによって提供されています。
注: フレックスレイアウトの並び替え機能は、意図的に表示上のみに影響し、 音声順やソース順に基づくナビゲーションには影響しません。 これにより、著者は視覚的な表示を操作しつつ、 CSS非対応のUAや、音声・逐次ナビゲーションといった線形モデルでは ソース順を維持することができます。 この二面性によってアクセシビリティが向上する例については、 CSS Display 3 § 3.1 並び替えとアクセシビリティや Flex Layout Overviewを参照してください。
著者は、絶対に orderや *-reverse の値を flex-flow/flex-direction で、正しいソース順の代用として使用してはなりません。 これは文書のアクセシビリティを損なう可能性があります。
5.1. フレックスフローの方向:flex-direction プロパティ
名前: | flex-direction |
---|---|
値: | row | row-reverse | column | column-reverse |
初期値: | row |
適用対象: | flex containers |
継承: | no |
パーセンテージ: | n/a |
算出値: | 指定されたキーワード |
正規順序: | 構文に従う |
アニメーション型: | 離散 |
flex-direction プロパティは、flex items がフレックスコンテナ内にどのように配置されるかを、 フレックスコンテナの主軸の方向を設定することで指定します。 これによって、フレックスアイテムがどの方向に並ぶかが決まります。
- row
-
フレックスコンテナの主軸は、現在のインライン軸
と同じ向きになります。
main-startとmain-endの方向は、
現在の書字モードにおける
inline-startとinline-end
の方向にそれぞれ一致します。
現在の書字モードです。
テスト
- flex-child-percent-basis-resize-1.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-001a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-001b.html (ライブテスト) (ソース)
- flexbox-flex-direction-row.htm (ライブテスト) (ソース)
- flexbox_justifycontent-left-001.html (ライブテスト) (ソース)
- flexbox-writing-mode-010.html (ライブテスト) (ソース)
- flexbox-writing-mode-011.html (ライブテスト) (ソース)
- flexbox-writing-mode-012.html (ライブテスト) (ソース)
- flexbox-writing-mode-016.html (ライブテスト) (ソース)
- percentage-size.html (ライブテスト) (ソース)
- row-reverse
-
rowと同じですが、
main-start方向と
main-end方向が入れ替わります。
テスト
- flexbox_direction-row-reverse.html (ライブテスト) (ソース)
- flexbox-mbp-horiz-001-reverse.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-001-rtl-reverse.xhtml (ライブテスト) (ソース)
- multi-line-wrap-with-row-reverse.html (ライブテスト) (ソース)
- flexbox_justifycontent-right-001.html (ライブテスト) (ソース)
- flexbox_justifycontent-start.html (ライブテスト) (ソース)
- flexbox_justifycontent-start-rtl.html (ライブテスト) (ソース)
- column
-
フレックスコンテナの主軸は、
現在の書字モードにおける
ブロック軸
と同じ向きになります。
main-start方向と
main-end方向は、
現在の書字モードにおける
block-start方向および
block-end
方向にそれぞれ一致します。
テスト
- columns-height-set-via-top-bottom.html (ライブテスト) (ソース)
- dynamic-bsize-change.html (ライブテスト) (ソース)
- flexbox_direction-column.html (ライブテスト) (ソース)
- flexbox_direction-column-reverse.html (ライブテスト) (ソース)
- flexbox_rtl-flow.html (ライブテスト) (ソース)
- flex-column-relayout-assert.html (ライブテスト) (ソース)
- flex-item-max-height-min-content.html (ライブテスト) (ソース)
- flex-item-transferred-sizes-padding-border-sizing.html (ライブテスト) (ソース)
- flex-item-transferred-sizes-padding-content-sizing.html (ライブテスト) (ソース)
- flex-outer-flexbox-column-recalculate-height-on-resize-001.html (ライブテスト) (ソース)
- image-nested-within-definite-column-flexbox.html (ライブテスト) (ソース)
- layout-with-inline-svg-001.html (ライブテスト) (ソース)
- nested-orthogonal-flexbox-relayout.html (ライブテスト) (ソース)
- percentage-max-width-cross-axis.html (ライブテスト) (ソース)
- percentage-size.html (ライブテスト) (ソース)
- column-reverse
- columnと同じですが、 main-start方向と main-end方向が入れ替わります。
注: reverse値はボックスの並び順を逆にしません。 writing-modeやdirection [CSS3-WRITING-MODES]と同様に、 フローの方向だけを変更します。 描画順序、音声順序、逐次ナビゲーションの順序には影響しません。
注: justify-contentの値によっては、 flex-directionのreverse値が、 flex containers かつ scroll containersである場合の初期スクロール位置を変化させることがあります。 詳細は CSS Box Alignment 3 § 5.3 Alignment Overflow and Scroll Containersを参照してください。
テスト
- discrete-no-interpolation.html (ライブテスト) (ソース)
- change-column-flex-width.html (ライブテスト) (ソース)
- column-flex-child-with-max-width.html (ライブテスト) (ソース)
- column-flex-child-with-overflow-scroll.html (ライブテスト) (ソース)
- cross-axis-scrollbar.html (ライブテスト) (ソース)
- dynamic-orthogonal-flex-item.html (ライブテスト) (ソース)
- flexbox-writing-mode-001.html (ライブテスト) (ソース)
- flexbox-writing-mode-002.html (ライブテスト) (ソース)
- flexbox-writing-mode-003.html (ライブテスト) (ソース)
- flexbox-writing-mode-004.html (ライブテスト) (ソース)
- flexbox-writing-mode-005.html (ライブテスト) (ソース)
- flexbox-writing-mode-006.html (ライブテスト) (ソース)
- flexbox-writing-mode-007.html (ライブテスト) (ソース)
- flexbox-writing-mode-008.html (ライブテスト) (ソース)
- flexbox-writing-mode-009.html (ライブテスト) (ソース)
- flexbox-writing-mode-010.html (ライブテスト) (ソース)
- flexbox-writing-mode-011.html (ライブテスト) (ソース)
- flexbox-writing-mode-012.html (ライブテスト) (ソース)
- flexbox-writing-mode-013.html (ライブテスト) (ソース)
- flexbox-writing-mode-014.html (ライブテスト) (ソース)
- flexbox-writing-mode-015.html (ライブテスト) (ソース)
- flexbox-writing-mode-016.html (ライブテスト) (ソース)
- flexbox-writing-mode-slr.html (ライブテスト) (ソース)
- flexbox-writing-mode-slr-row-mix.html (ライブテスト) (ソース)
- flexbox-writing-mode-slr-rtl.html (ライブテスト) (ソース)
- flexbox-writing-mode-srl.html (ライブテスト) (ソース)
- flexbox-writing-mode-srl-row-mix.html (ライブテスト) (ソース)
- flexbox-writing-mode-srl-rtl.html (ライブテスト) (ソース)
- flexbox_object.html (ライブテスト) (ソース)
- flexbox_writing_mode_vertical_lays_out_contents_from_top_to_bottom.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-direction-column.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-direction-column-reverse.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-direction-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-direction-row.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-direction-row-reverse.html (ライブテスト) (ソース)
5.2. フレックス行の折り返し:flex-wrapプロパティ
名前: | flex-wrap |
---|---|
値: | nowrap | wrap | wrap-reverse |
初期値: | nowrap |
適用対象: | flex containers |
継承: | no |
パーセンテージ: | n/a |
算出値: | 指定されたキーワード |
正規順序: | 構文に従う |
アニメーション型: | 離散 |
flex-wrapプロパティは、フレックスコンテナが単一行か複数行か、 そして新しい行が積み重なる交差軸の方向を制御します。
- nowrap
- フレックスコンテナは単一行になります。
- wrap
- フレックスコンテナは複数行になります。
- wrap-reverse
- wrapと同じです。
wrap-reverse以外の値の場合、 cross-start方向は、 現在の書字モードにおける inline-startまたは block-start のいずれか(どちらが交差軸かによる)に一致し、 cross-end方向は cross-startの反対方向になります。 flex-wrapが wrap-reverseの場合は、 cross-start方向と cross-end方向が入れ替わります。
注: align-contentの値によっては、 wrap-reverse値のflex-wrapが、 flex containersかつ scroll containersである場合の初期スクロール位置を変化させることがあります。 詳細は CSS Box Alignment 3 § 5.3 Alignment Overflow and Scroll Containersを参照してください。
テスト
- discrete-no-interpolation.html (ライブテスト) (ソース)
- flexbox-flex-wrap-default.htm (ライブテスト) (ソース)
- flexbox-flex-wrap-flexing-002.html (ライブテスト) (ソース)
- flexbox-flex-wrap-flexing-003.html (ライブテスト) (ソース)
- flexbox-flex-wrap-flexing.html (ライブテスト) (ソース)
- flexbox-flex-wrap-horiz-001.html (ライブテスト) (ソース)
- flexbox-flex-wrap-horiz-002.html (ライブテスト) (ソース)
- flexbox-flex-wrap-nowrap.htm (ライブテスト) (ソース)
- flexbox-flex-wrap-vert-001.html (ライブテスト) (ソース)
- flexbox-flex-wrap-vert-002.html (ライブテスト) (ソース)
- flexbox-flex-wrap-wrap.htm (ライブテスト) (ソース)
- flexbox-flex-wrap-wrap-reverse.htm (ライブテスト) (ソース)
- flexbox_rowspan.html (ライブテスト) (ソース)
- flexbox_rtl-flow.html (ライブテスト) (ソース)
- flexbox_rtl-flow-reverse.html (ライブテスト) (ソース)
- flexbox_rtl-order.html (ライブテスト) (ソース)
- flex-box-wrap.html (ライブテスト) (ソース)
- flexbox_wrap.html (ライブテスト) (ソース)
- flexbox_wrap-long.html (ライブテスト) (ソース)
- flexbox_wrap-reverse.html (ライブテスト) (ソース)
- multi-line-wrap-reverse-column-reverse.html (ライブテスト) (ソース)
- multi-line-wrap-reverse-row-reverse.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-wrap-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-wrap-nowrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-wrap-wrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-wrap-wrap-reverse.html (ライブテスト) (ソース)
- multiline-min-preferred-width.html (ライブテスト) (ソース)
- multiline-reverse-wrap-baseline.html (ライブテスト) (ソース)
5.3. フレックス方向と折り返し:flex-flowショートハンド
名前: | flex-flow |
---|---|
値: | <'flex-direction'> || <'flex-wrap'> |
初期値: | 各プロパティを参照 |
適用対象: | 各プロパティを参照 |
継承: | 各プロパティを参照 |
パーセンテージ: | 各プロパティを参照 |
算出値: | 各プロパティを参照 |
アニメーション型: | 各プロパティを参照 |
正規順序: | 構文に従う |
テスト
- box-sizing-001.html (ライブテスト) (ソース)
- button-column-wrap-crash.html (ライブテスト) (ソース)
- column-intrinsic-size-aspect-ratio-crash.html (ライブテスト) (ソース)
- css-flexbox-row.html (ライブテスト) (ソース)
- css-flexbox-row-reverse.html (ライブテスト) (ソース)
- css-flexbox-row-reverse-wrap.html (ライブテスト) (ソース)
- css-flexbox-row-reverse-wrap-reverse.html (ライブテスト) (ソース)
- css-flexbox-row-wrap.html (ライブテスト) (ソース)
- css-flexbox-row-wrap-reverse.html (ライブテスト) (ソース)
- css-flexbox-test1.html (ライブテスト) (ソース)
- flexbox-flex-direction-column.htm (ライブテスト) (ソース)
- flexbox-flex-direction-column-percentage-ignored.html (ライブテスト) (ソース)
- flexbox-flex-direction-column-reverse.htm (ライブテスト) (ソース)
- flexbox-flex-direction-default.htm (ライブテスト) (ソース)
- flexbox-flex-direction-row.htm (ライブテスト) (ソース)
- flexbox-flex-direction-row-reverse.htm (ライブテスト) (ソース)
- flex-direction-column-001-visual.html (visual test) (ソース)
- flex-direction-column.html (ライブテスト) (ソース)
- flex-direction-column-overlap-001.html (ライブテスト) (ソース)
- flex-direction-column-reverse-001-visual.html (visual test) (ソース)
- flex-direction-column-reverse-002-visual.html (visual test) (ソース)
- flex-direction-column-reverse.html (ライブテスト) (ソース)
- flex-direction.html (ライブテスト) (ソース)
- flex-direction-modify.html (ライブテスト) (ソース)
- flex-direction-row-001-visual.html (visual test) (ソース)
- flex-direction-row-002-visual.html (visual test) (ソース)
- flex-direction-row-reverse-001-visual.html (visual test) (ソース)
- flex-direction-row-reverse-002-visual.html (visual test) (ソース)
- flex-direction-row-reverse.html (ライブテスト) (ソース)
- flex-direction-row-vertical.html (ライブテスト) (ソース)
- flex-direction-with-element-insert.html (ライブテスト) (ソース)
- flexbox-flex-flow-001.html (ライブテスト) (ソース)
- flexbox-flex-flow-002.html (ライブテスト) (ソース)
- flexbox_flow-column-reverse-wrap.html (ライブテスト) (ソース)
- flexbox_flow-column-reverse-wrap-reverse.html (ライブテスト) (ソース)
- flexbox_flow-column-wrap.html (ライブテスト) (ソース)
- flexbox_flow-column-wrap-reverse.html (ライブテスト) (ソース)
- flexbox_flow-row-wrap.html (ライブテスト) (ソース)
- flexbox_flow-row-wrap-reverse.html (ライブテスト) (ソース)
- flex-flow-001.html (ライブテスト) (ソース)
- flex-flow-002.html (ライブテスト) (ソース)
- flex-flow-003.html (ライブテスト) (ソース)
- flex-flow-004.html (ライブテスト) (ソース)
- flex-flow-005.html (ライブテスト) (ソース)
- flex-flow-006.html (ライブテスト) (ソース)
- flex-flow-007.html (ライブテスト) (ソース)
- flex-flow-008.html (ライブテスト) (ソース)
- flex-flow-009.html (ライブテスト) (ソース)
- flex-flow-010.html (ライブテスト) (ソース)
- flex-flow-011.html (ライブテスト) (ソース)
- flex-flow-012.html (ライブテスト) (ソース)
- flex-flow-013.html (ライブテスト) (ソース)
- flex-wrap-002.html (ライブテスト) (ソース)
- flex-wrap-003.html (ライブテスト) (ソース)
- flex-wrap-004.html (ライブテスト) (ソース)
- flex-wrap-005.html (ライブテスト) (ソース)
- flex-wrap-006.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-column.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-column-nowrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-column-reverse.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-column-reverse-nowrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-column-reverse-wrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-column-wrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-column-wrap-reverse.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-nowrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-row.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-row-nowrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-row-reverse.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-row-reverse-nowrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-row-reverse-wrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-row-reverse-wrap-reverse.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-row-wrap.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-row-wrap-reverse.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-flow-wrap.html (ライブテスト) (ソース)
- multiline-column-max-height.html (ライブテスト) (ソース)
- flex-direction-computed.html (ライブテスト) (ソース)
- flex-direction-invalid.html (ライブテスト) (ソース)
- flex-direction-valid.html (ライブテスト) (ソース)
- flex-flow-computed.html (ライブテスト) (ソース)
- flex-flow-invalid.html (ライブテスト) (ソース)
- flex-flow-shorthand.html (ライブテスト) (ソース)
- flex-flow-valid.html (ライブテスト) (ソース)
- flex-wrap-computed.html (ライブテスト) (ソース)
- flex-wrap-invalid.html (ライブテスト) (ソース)
- flex-wrap-valid.html (ライブテスト) (ソース)
flex-flowプロパティは、flex-directionプロパティとflex-wrapプロパティを 一括で設定するためのショートハンドです。 これらはあわせて、フレックスコンテナの主軸と交差軸を定義します。
div | |
div | |
div |
英語 | 日本語 |
---|---|
|
|
5.4. 並び替えとアクセシビリティ: order プロパティ
フレックスアイテムは、デフォルトでは
ソース文書に現れる順序で表示・配置されます。
これは論理順序を表します。
この順序は、非視覚メディア(音声など)でのレンダリングや、
シーケンシャルナビゲーションのデフォルトの巡回順序(例えばリンクの巡回、
tabindex
[HTML]参照)、
そして非CSS UAで内容が表現される場合にも使われます。
orderプロパティを使うことで、 フレックスアイテムの並び順を変更できます。 これにより、アイテムはorder-modified document orderで配置され、 2Dのビジュアルキャンバス上での空間的な並びと、 音声やシーケンシャルナビゲーションといった線形プレゼンテーションでの論理順序を 異ならせることができます。 詳細はCSS Display 3 § 3 Display Order: the order propertyを参照してください。 [CSS-DISPLAY-3]
注: 視覚的な認知は二次元かつ非線形なので、 望ましいボックス順序は、非視覚メディアや非CSS UAで使われる論理順序と常に一致するわけではありません。
著者はorderを 論理順序ではなく、視覚上での並び替えのみに使う必要があります。 orderを使って論理並び替えを行うスタイルシートは非準拠となります。
<!DOCTYPE html> < header > ...</ header > < main > < article > ...</ article > < nav > ...</ nav > < aside > ...</ aside > </ main > < footer > ...</ footer >
このレイアウトはフレックスレイアウトで簡単に実現できます:
main{ display : flex; } main > article{ order : 2 ; min-width : 12 em ; flex : 1 ; } main > nav{ order : 1 ; width : 200 px ; } main > aside{ order : 3 ; width : 200 px ; }
さらに、 カラムはデフォルトで高さが揃うようになり、 メインコンテンツは画面いっぱいに広がります。 また、メディアクエリを組み合わせることで、狭い画面では全て縦並びに切り替えることも可能です:
@media all and( max-width:600 px ) { /* 3カラム対応には幅が狭すぎる */ main{ flex-flow : column; } main > article, main > nav, main > aside{ /* ドキュメント順に戻す */ order:0 ; width : auto; } }
(さらに高度な折り返しを実現するための複数行フレックスコンテナの利用は読者への課題です。)
6. フレックス行
フレックスアイテムは、フレックスコンテナ内で フレックス行 に沿って配置・整列されます。 これはレイアウトアルゴリズムによるグループ化と整列のための仮想的なコンテナです。 フレックスコンテナは単一行または複数行のいずれかになり、 それはflex-wrapプロパティによって決まります:
-
単一行フレックスコンテナ (つまりflex-wrap: nowrapのもの)は、 全ての子要素を1行で配置します。 それによって内容がはみ出す場合でも、折り返しはされません。
-
複数行フレックスコンテナ (flex-wrap: wrapやflex-wrap: wrap-reverseの場合)は、 フレックスアイテムを複数行に分割して配置します。 これはテキストが幅に収まらない時に改行されるのと似ています。 行が追加されると、 交差軸に沿ってフレックスコンテナ内で積み重ねられ、 それはflex-wrapプロパティによって決まります。 各行には最低1つのフレックスアイテムが含まれます。 (フレックスコンテナが完全に空の場合を除く)
#flex{ display : flex; flex-flow : row wrap; width : 300 px ; } .item{ width : 80 px ; }
< div id = "flex" > < div class = "item" > 1</ div > < div class = "item" > 2</ div > < div class = "item" > 3</ div > < div class = "item" > 4</ div > </ div >
このコンテナは幅が300pxなので、1行には3つしか収まりません。 3つで240px、残り60pxの余白が生じます。 flex-flowプロパティで 複数行のフレックスコンテナ (値にwrapキーワードが含まれるため)が指定されているので、 最後のアイテム用に新たな行が作られます。
内容が行に分割されると、 各行は独立してレイアウトされます。 フレキシブルな長さやjustify-contentプロパティ、 align-selfプロパティは いずれも1行ごとにアイテムのみを考慮します。
複数行のフレックスコンテナ(1行だけの場合も含む)では、 各行の交差サイズは その行内のフレックスアイテムを収めるのに必要な最小サイズとなります (align-selfによる整列後)。 行はフレックスコンテナ内でalign-contentプロパティで整列されます。 単一行のフレックスコンテナでは、 行の交差サイズはフレックスコンテナの交差サイズと同じで、 align-contentは効果を持ちません。 行の主サイズは 常にフレックスコンテナのコンテンツボックスの主サイズと同じです。
テスト
- align-content-001.htm (ライブテスト) (ソース)
- align-content-002.htm (ライブテスト) (ソース)
- align-content-003.htm (ライブテスト) (ソース)
- align-content-004.htm (ライブテスト) (ソース)
- align-content-005.htm (ライブテスト) (ソース)
- align-content-006.htm (ライブテスト) (ソース)
- align-content-007.htm (ライブテスト) (ソース)
- flexbox-lines-must-be-stretched-by-default.html (ライブテスト) (ソース)
7. 柔軟性
フレックスレイアウトの特徴は、フレックスアイテムを「フレックス」させる能力です。 これは、主次元において利用可能なスペースを満たすように 幅や高さを調整することです。 これにはflexプロパティを使用します。 フレックスコンテナは、アイテムに対して(flex grow factorに比例して) 空きスペースを分配し、コンテナを満たします。 または(flex shrink factorに比例して)アイテムを縮小し、 はみ出しを防ぎます。
フレックスアイテムは、 完全に非柔軟 なのは、flex-grow値と flex-shrink値の両方がゼロの場合です。 それ以外の場合は柔軟となります。
7.1. flexショートハンド
名前: | flex |
---|---|
値: | none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] |
初期値: | 0 1 auto |
適用対象: | フレックスアイテム |
継承: | no |
パーセンテージ: | 各プロパティを参照 |
算出値: | 各プロパティを参照 |
アニメーション型: | 算出値型による |
正規順序: | 構文に従う |
テスト
- flexbox-dyn-resize-001.html (ライブテスト) (ソース)
- flex-item-max-width-min-content.html (ライブテスト) (ソース)
- flex-item-min-height-min-content.html (ライブテスト) (ソース)
- flex-item-min-width-min-content.html (ライブテスト) (ソース)
- flex-shorthand-calc.html (ライブテスト) (ソース)
- flex-computed.html (ライブテスト) (ソース)
- flex-invalid.html (ライブテスト) (ソース)
- flex-shorthand.html (ライブテスト) (ソース)
- flex-valid.html (ライブテスト) (ソース)
flexプロパティは、柔軟なサイズの構成要素―― フレックス係数(growとshrink) およびflex basisを指定します。 ボックスがフレックスアイテムの場合、flexは 主サイズプロパティ の代わりに参照され、ボックスの主サイズが決定されます。 ボックスがフレックスアイテムでない場合、flexは効果を持ちません。
注: flexロングハンドの初期値は flex: 0 1 autoと同等です。 これは、flexショートハンドで省略された場合のデフォルト値 (実質的に1 1 0px)とは異なります。 そのため、flexショートハンドは 最も一般的なケースにより適した仕様となっています。
- <'flex-grow'>
-
この<number
[0,∞]>要素はflex-grow ロングハンドを設定し、
flex grow係数を指定します。
これは、フレックスコンテナ内で正の空きスペースが分配される際に、
フレックスアイテムが
他のフレックスアイテムに対してどのくらい成長するかを決定します。
省略された場合は1になります。
テスト
- flex-grow-interpolation.html (ライブテスト) (ソース)
- flex-001.htm (ライブテスト) (ソース)
- flex-003.htm (ライブテスト) (ソース)
- flex-grow-001.xht (ライブテスト) (ソース)
- flex-grow-002.html (ライブテスト) (ソース)
- flex-grow-003.html (ライブテスト) (ソース)
- flex-grow-004.html (ライブテスト) (ソース)
- flex-grow-005.html (ライブテスト) (ソース)
- flex-grow-006.html (ライブテスト) (ソース)
- flex-grow-007.html (ライブテスト) (ソース)
- flex-grow-008.html (ライブテスト) (ソース)
- flexbox_flex-natural.html (ライブテスト) (ソース)
- flexbox_flex-natural-mixed-basis-auto.html (ライブテスト) (ソース)
- flexbox_flex-natural-mixed-basis.html (ライブテスト) (ソース)
- flexbox_flex-natural-variable-auto-basis.html (ライブテスト) (ソース)
- flexbox_flex-natural-variable-zero-basis.html (ライブテスト) (ソース)
- flexbox_flex-none.html (ライブテスト) (ソース)
- flexbox_flex-none-wrappable-content.html (ライブテスト) (ソース)
- flex-factor-less-than-one.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shorthand-0-auto.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shorthand-auto.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shorthand.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shorthand-initial.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shorthand-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shorthand-none.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shorthand-number.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-grow-0.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-grow-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-grow-number.html (ライブテスト) (ソース)
- flexbox_interactive_flex-grow-transitions.html (manual test) (ソース)
- flex-grow-computed.html (ライブテスト) (ソース)
- flex-grow-invalid.html (ライブテスト) (ソース)
- flex-grow-valid.html (ライブテスト) (ソース)
- table-item-flex-percentage-min-width.html (ライブテスト) (ソース)
- table-item-flex-percentage-width.html (ライブテスト) (ソース)
0から1の間のFlex値は少し特殊な挙動をします: 行上のflex値の合計が1未満の場合、 それらは空きスペースの100%未満しか使用しません。
アイテムのflex-grow値は、 実質的に空きスペースの割合を要求するものであり、 1は「空きスペースの100%」を意味します。 そして、行上のアイテムが合計で100%以上を要求している場合、 要求は同じ比率を保ったまま、ちょうど100%になるように再配分されます。 しかし、アイテムが満額より少ない量を要求している場合 (例えば3つのアイテムがそれぞれflex-grow: .25など)、 それぞれが要求した分だけ(各アイテムに空きスペースの25%ずつ、残りの25%は未充填)割り当てられます。 空きスペースの分配の詳細については § 9.7 柔軟長の解決を参照してください。
このパターンはflex-growがゼロに近づく際の連続的な挙動のために必要です (つまりアイテムが空きスペースを全く欲しがらない時)。 これがないと、flex-grow: 1のアイテムが 空きスペースをすべて取得するだけでなく、 flex-grow: 0.1のアイテムや flex-grow: 0.01のアイテムも そうなり、最終的に値が十分小さくなってゼロにアンダーフローすると アイテムは突然空きスペースを全く取得しなくなります。 この挙動によって、 アイテムはflex-growが1未満になるにつれて 徐々に空きスペースの取得量が減り、 ゼロでは滑らかに空きスペースを全く取得しなくなります。
この「部分的な充填」挙動が特に望まれるのでなければ、 著者は値を1以上にすることを推奨します。 例えば、1と2を使う方が .33や.67を使うよりも アイテムの追加・削除・折り返しが発生した場合に 意図通りの挙動になる可能性が高いです。
- <'flex-shrink'>
-
この<number
[0,∞]>要素はflex-shrink ロングハンドを設定し、
flex shrink係数を指定します。
これは、負の空きスペースが分配される際に
フレックスコンテナ内で他のフレックスアイテムに対して
フレックスアイテムが
どのくらい縮小するかを決定します。
省略された場合は1になります。
テスト
- flex-shrink-interpolation.html (ライブテスト) (ソース)
- flex-002.htm (ライブテスト) (ソース)
- flex-004.htm (ライブテスト) (ソース)
- flex-factor-less-than-one.html (ライブテスト) (ソース)
- flex-shrink-001.html (ライブテスト) (ソース)
- flex-shrink-002.html (ライブテスト) (ソース)
- flex-shrink-003.html (ライブテスト) (ソース)
- flex-shrink-004.html (ライブテスト) (ソース)
- flex-shrink-005.html (ライブテスト) (ソース)
- flex-shrink-006.html (ライブテスト) (ソース)
- flex-shrink-007.html (ライブテスト) (ソース)
- flex-shrink-008.html (ライブテスト) (ソース)
- flex-shrink-large-value-crash.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shrink-0.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shrink-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shrink-number.html (ライブテスト) (ソース)
- flexbox_interactive_flex-shrink-transitions.html (manual test) (ソース)
- flexbox_interactive_flex-shrink-transitions-invalid.html (manual test) (ソース)
- flex-shrink-computed.html (ライブテスト) (ソース)
- flex-shrink-invalid.html (ライブテスト) (ソース)
- flex-shrink-valid.html (ライブテスト) (ソース)
- table-item-flex-percentage-min-width.html (ライブテスト) (ソース)
- table-item-flex-percentage-width.html (ライブテスト) (ソース)
注: flex shrink係数は、 負のスペース分配時にflex 基本サイズで乗算されます。 これにより、アイテムがどれだけ縮小できるかに比例して負のスペースが分配されるため、 例えば小さいアイテムがゼロになる前に、大きいアイテムが目に見えて縮小されることが保証されます。
- <'flex-basis'>
-
このコンポーネントはflex-basis ロングハンドを設定します。
これはflex basis(基準値)を指定します。
フレックスアイテムの初期の主サイズであり、
フレックス係数に従って空きスペースが分配される前の値です。
テスト
- flex-basis-composition.html (ライブテスト) (ソース)
- flex-basis-content-crash.html (ライブテスト) (ソース)
- flex-basis-interpolation.html (ライブテスト) (ソース)
- dynamic-isize-change-001.html (ライブテスト) (ソース)
- dynamic-isize-change-002.html (ライブテスト) (ソース)
- dynamic-isize-change-003.html (ライブテスト) (ソース)
- dynamic-isize-change-004.html (ライブテスト) (ソース)
- flex-basis-001.html (ライブテスト) (ソース)
- flex-basis-002.html (ライブテスト) (ソース)
- flex-basis-003.html (ライブテスト) (ソース)
- flex-basis-004.html (ライブテスト) (ソース)
- flex-basis-005.html (ライブテスト) (ソース)
- flex-basis-006.html (ライブテスト) (ソース)
- flex-basis-007.html (ライブテスト) (ソース)
- flex-basis-008.html (ライブテスト) (ソース)
- flex-basis-009.html (ライブテスト) (ソース)
- flex-basis-010.html (ライブテスト) (ソース)
- flex-basis-011.html (ライブテスト) (ソース)
- flex-basis-012.html (ライブテスト) (ソース)
- flex-basis-013.html (ライブテスト) (ソース)
- flex-basis-intrinsics-001.html (ライブテスト) (ソース)
- flex-basis-item-margins-001.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-001a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-001b.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-002a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-002b.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-003a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-003b.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-004a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-004b.html (ライブテスト) (ソース)
- flexbox_flex-basis.html (ライブテスト) (ソース)
- flexbox_flex-basis-shrink.html (ライブテスト) (ソース)
- flex-one-sets-flex-basis-to-zero-px.html (ライブテスト) (ソース)
- flex-shorthand-flex-basis-middle.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-basis-0.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-basis-0percent.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-basis-auto.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-basis-percent.html (ライブテスト) (ソース)
- flexbox_interactive_flex-basis-transitions.html (manual test) (ソース)
- flex-basis-computed.html (ライブテスト) (ソース)
- flex-basis-invalid.html (ライブテスト) (ソース)
- flex-basis-valid.html (ライブテスト) (ソース)
- table-as-item-percent-width-cell-001.html (ライブテスト) (ソース)
<'flex-basis'>はwidthプロパティや heightプロパティと同じ値(ただしautoは扱いが異なる)、 さらにcontentキーワードを受け付けます。
- auto
- フレックスアイテムに指定された場合、 autoキーワードは 主サイズプロパティの値を取得し、それを使用するflex-basisとします。 その値自体がautoの場合、使用される値はcontentになります。
- content
-
自動サイズで、フレックスアイテムの内容に基づきます。
(これは通常max-contentサイズと等価ですが、
推奨アスペクト比、内在サイズ制約、直交フロー等に対応する調整が加わります。
§ 9 フレックスレイアウトアルゴリズムの詳細参照。)
注: この値はFlexible Box Layoutの初期リリースには存在せず、 古い実装ではサポートされていない場合があります。 同等の効果はautoと主サイズ(widthまたはheight)にautoを指定することで再現可能です。
- <'width'>
- その他の値については、flex-basisは widthやheightと同じ方法で解決されます。
flexショートハンドで省略された場合、指定値は0になります。
- none
- noneキーワードは0 0 autoに展開されます。
単位無しのゼロが2つのフレックス係数の直後でない場合は、フレックス係数として解釈されます。 誤解や無効な宣言を避けるため、 著者は<'flex-basis'>コンポーネントとしてゼロを指定する場合は 単位を付けるか、2つのフレックス係数の後に記述してください。
7.1.1. flexの基本値
この節は参考情報です。
下記は、最も一般的な効果を表す4つのflex値の効果をまとめています:
- flex: initial
- flex: 0 1 autoと同等。(これが初期値です。) アイテムのサイズはwidth/height プロパティに基づきます。 (アイテムの主サイズプロパティがautoの場合は、内容に基づきます。) 正の空きスペースがある場合アイテムは非柔軟となり、 空間が不足している場合は最小サイズまで縮小できます。 整列機能やautoマージンにより、フレックスアイテムを主軸上で整列可能です。
- flex: auto
- flex: 1 1 autoと同等。 アイテムのサイズはwidth/height プロパティに基づきますが、主軸の空きスペースを吸収する完全な柔軟性を持ちます。 全アイテムがflex: auto、flex: initial、flex: noneのいずれかなら、 サイズ計算後の正の空きスペースはflex: autoのアイテムに均等に分配されます。
- flex: none
- flex: 0 0 autoと同等。 この値はwidth/height プロパティでサイズを決定し、 完全に非柔軟なフレックスアイテムになります。 initialと似ていますが、 フレックスアイテムはオーバーフロー時でも縮小できません。
- flex: <number [1,∞]>
- flex: <number [1,∞]> 1 0と同等。 アイテムを柔軟にし、flex basisをゼロに設定します。 フレックスコンテナ内の空きスペースの指定割合をアイテムが取得します。 コンテナ内の全アイテムがこのパターンを使う場合、 サイズは指定したフレックス係数に比例します。
テスト
デフォルトでは、フレックスアイテムは最小内容サイズ(最も長い単語や固定サイズ要素の長さ)未満には縮小されません。 これを変更するには、min-widthやmin-heightプロパティを設定してください。 (§ 4.5 フレックスアイテムの自動最小サイズ参照。)
7.2. 柔軟性の構成要素
柔軟性の各構成要素は、個別のロングハンドプロパティで制御できます。
著者は、柔軟性の制御には直接ロングハンドプロパティを使うよりも flexショートハンドの使用を推奨します。 ショートハンドは未指定の構成要素を正しくリセットし、 一般的な用途に適した動作となるためです。
7.2.1. flex-growプロパティ
名前: | flex-grow |
---|---|
値: | <number [0,∞]> |
初期値: | 0 |
適用対象: | フレックスアイテム |
継承: | no |
パーセンテージ: | n/a |
算出値: | 指定された数値 |
正規順序: | 構文に従う |
アニメーション型: | 算出値型による |
テスト
- flex-grow-interpolation.html (ライブテスト) (ソース)
- flex-001.htm (ライブテスト) (ソース)
- flex-003.htm (ライブテスト) (ソース)
- flex-grow-001.xht (ライブテスト) (ソース)
- flex-grow-002.html (ライブテスト) (ソース)
- flex-grow-003.html (ライブテスト) (ソース)
- flex-grow-004.html (ライブテスト) (ソース)
- flex-grow-005.html (ライブテスト) (ソース)
- flex-grow-006.html (ライブテスト) (ソース)
- flex-grow-007.html (ライブテスト) (ソース)
- flex-grow-008.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-grow-0.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-grow-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-grow-number.html (ライブテスト) (ソース)
- flexbox_interactive_flex-grow-transitions.html (manual test) (ソース)
- flex-grow-computed.html (ライブテスト) (ソース)
- flex-grow-invalid.html (ライブテスト) (ソース)
- flex-grow-valid.html (ライブテスト) (ソース)
著者は、柔軟性の制御にflexショートハンドを使うことが推奨されます。 flex-growを直接設定するよりも、 ショートハンドは未指定の構成要素を正しくリセットし、 一般的な用途に適した挙動となるためです。
flex-growプロパティは、 指定された<number>で flex grow係数を設定します。 負の値は許可されません。
7.2.2. flex-shrinkプロパティ
名前: | flex-shrink |
---|---|
値: | <number [0,∞]> |
初期値: | 1 |
適用対象: | フレックスアイテム |
継承: | no |
パーセンテージ: | n/a |
算出値: | 指定値 |
正規順序: | 構文に従う |
アニメーション型: | 数値 |
テスト
- flex-shrink-interpolation.html (ライブテスト) (ソース)
- flex-002.htm (ライブテスト) (ソース)
- flex-004.htm (ライブテスト) (ソース)
- flex-shrink-001.html (ライブテスト) (ソース)
- flex-shrink-002.html (ライブテスト) (ソース)
- flex-shrink-003.html (ライブテスト) (ソース)
- flex-shrink-004.html (ライブテスト) (ソース)
- flex-shrink-005.html (ライブテスト) (ソース)
- flex-shrink-006.html (ライブテスト) (ソース)
- flex-shrink-007.html (ライブテスト) (ソース)
- flex-shrink-008.html (ライブテスト) (ソース)
- flex-shrink-large-value-crash.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shrink-0.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shrink-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-shrink-number.html (ライブテスト) (ソース)
- flexbox_interactive_flex-shrink-transitions.html (manual test) (ソース)
- flexbox_interactive_flex-shrink-transitions-invalid.html (manual test) (ソース)
- flex-shrink-computed.html (ライブテスト) (ソース)
- flex-shrink-invalid.html (ライブテスト) (ソース)
- flex-shrink-valid.html (ライブテスト) (ソース)
著者は柔軟性の制御にflexショートハンドを使うことが推奨されます。 flex-shrinkを直接用いるよりも、 ショートハンドは未指定の構成要素を正しくリセットし、 一般的な用途に合わせた挙動になります。
flex-shrinkプロパティは 指定された<number>によって flex shrink係数を設定します。 負の値は許可されません。
7.2.3. flex-basisプロパティ
名前: | flex-basis |
---|---|
値: | content | <'width'> |
初期値: | auto |
適用対象: | フレックスアイテム |
継承: | no |
パーセンテージ: | フレックスコンテナの内側の主サイズに対する割合 |
算出値: | 指定されたキーワードまたは算出された<length-percentage>値 |
正規順序: | 構文に従う |
アニメーション型: | 算出値型による |
テスト
- flex-basis-composition.html (ライブテスト) (ソース)
- flex-basis-content-crash.html (ライブテスト) (ソース)
- flex-basis-interpolation.html (ライブテスト) (ソース)
- dynamic-isize-change-001.html (ライブテスト) (ソース)
- dynamic-isize-change-002.html (ライブテスト) (ソース)
- dynamic-isize-change-003.html (ライブテスト) (ソース)
- dynamic-isize-change-004.html (ライブテスト) (ソース)
- flex-basis-001.html (ライブテスト) (ソース)
- flex-basis-002.html (ライブテスト) (ソース)
- flex-basis-003.html (ライブテスト) (ソース)
- flex-basis-004.html (ライブテスト) (ソース)
- flex-basis-005.html (ライブテスト) (ソース)
- flex-basis-006.html (ライブテスト) (ソース)
- flex-basis-007.html (ライブテスト) (ソース)
- flex-basis-008.html (ライブテスト) (ソース)
- flex-basis-009.html (ライブテスト) (ソース)
- flex-basis-010.html (ライブテスト) (ソース)
- flex-basis-011.html (ライブテスト) (ソース)
- flex-basis-012.html (ライブテスト) (ソース)
- flex-basis-013.html (ライブテスト) (ソース)
- flex-basis-intrinsics-001.html (ライブテスト) (ソース)
- flex-basis-item-margins-001.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-001a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-001b.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-002a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-002b.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-003a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-003b.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-004a.html (ライブテスト) (ソース)
- flexbox-flex-basis-content-004b.html (ライブテスト) (ソース)
- flexbox_flex-basis.html (ライブテスト) (ソース)
- flexbox_flex-basis-shrink.html (ライブテスト) (ソース)
- flex-one-sets-flex-basis-to-zero-px.html (ライブテスト) (ソース)
- flex-shorthand-flex-basis-middle.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-basis-0.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-basis-0percent.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-basis-auto.html (ライブテスト) (ソース)
- flexbox_computedstyle_flex-basis-percent.html (ライブテスト) (ソース)
- flexbox_interactive_flex-basis-transitions.html (manual test) (ソース)
- flex-basis-computed.html (ライブテスト) (ソース)
- flex-basis-invalid.html (ライブテスト) (ソース)
- flex-basis-valid.html (ライブテスト) (ソース)
著者は、柔軟性の制御にはflexショートハンドを使うことが推奨されます。 flex-basisを直接設定するよりも、 ショートハンドは未指定の構成要素を正しくリセットし、 一般的な用途に適した動作となるためです。
flex-basisプロパティはflex basisを設定します。 このプロパティは、widthおよび heightプロパティと同じ値、さらにcontentを受け付けます。
autoやcontent(上記定義)以外の全ての値については、 flex-basisは横書きモードにおけるwidthと同じ方法で解決されます [CSS2]。 ただし、ある値がwidthでautoに解決される場合は、 flex-basisでは代わりに contentに解決されます。 例えば、flex-basisのパーセンテージ値は フレックスアイテムの包含ブロック(つまりflex container)に対して解決されます。 その包含ブロックのサイズが未定義の場合、 flex-basisの使用値は contentになります。 さらに、flex-basisは、他の指定がない限り コンテンツボックスのサイズを決定します。 例えばbox-sizingなどで上書きされていない場合です [CSS3UI]。
8. 整列
フレックスコンテナの内容がフレックスされた後、 すべてのフレックスアイテムの寸法が確定した時点で、 それらをフレックスコンテナ内で整列できます。
margin プロパティを使うことで、ブロックレイアウトのマージンよりも強力な方法で アイテムを整列できます。 フレックスアイテムは CSS Box Alignmentのアラインメントプロパティにも対応しており、 主軸main axisと交差軸cross axisの両方でキーワードによる簡単な整列が可能です。 これらのプロパティにより、CSS 2.1 では困難だった 水平方向・垂直方向の中央揃えなど、 多くの一般的な整列が容易に実現できます。
注: アラインメントプロパティは CSS Box Alignment [CSS-ALIGN-3]で定義されていますが、 Flexible Box Layout は関連する定義をここで再掲しています。 これは、仕様の進行を遅らせるような規範的な依存関係を作らないためです。 これらのプロパティは、CSS Box Alignment Level 3が完成し、 他のレイアウトモードにおける効果が定義されるまで、フレックスレイアウトのみに適用されます。 また、Box Alignment モジュールで新たに定義された値も Flexible Box Layout に適用されます。 つまり、Box Alignment モジュールが完成すれば、 ここの定義は置き換えられることになります。
8.1. autoマージンによる整列
この節は規範的ではありません。 マージンがフレックスアイテムに与える影響の規範的な定義はFlex Layout Algorithmの章にあります。
フレックスアイテム上のautoマージンは、ブロックフローにおけるautoマージンと非常によく似た効果を持ちます:
-
フレックスベースや柔軟長の計算時、autoマージンは0として扱われます。
-
justify-contentやalign-selfによる整列の前に、 その次元の正の空きスペースはautoマージンへ分配されます。
-
オーバーフローするボックスはautoマージンを無視し、end方向にオーバーフローします。
テスト
- auto-height-column-with-border-and-padding.html (ライブテスト) (ソース)
- auto-height-with-flex.html (ライブテスト) (ソース)
- auto-margins-001.html (ライブテスト) (ソース)
- auto-margins-002.html (ライブテスト) (ソース)
- auto-margins-003.html (ライブテスト) (ソース)
- flexbox-margin-auto-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-margin-auto-horiz-002.xhtml (ライブテスト) (ソース)
- flexbox_margin-auto.html (ライブテスト) (ソース)
- flexbox_margin-auto-overflow.html (ライブテスト) (ソース)
注: 空きスペースがautoマージンに分配される場合、 アラインメントプロパティはその次元では効果がありません。 なぜなら、マージンがフレックス後に残った全ての空きスペースを奪ってしまうためです。
nav > ul{ display : flex; } nav > ul > #login{ margin-left : auto; }
< nav > < ul > < li >< a href = /about > 概要</ a > < li >< a href = /projects > プロジェクト</ a > < li >< a href = /interact > 交流</ a > < li id = "login" >< a href = /login > ログイン</ a > </ ul > </ nav >
8.2. 軸の整列:justify-content プロパティ
名前: | justify-content |
---|---|
値: | flex-start | flex-end | center | space-between | space-around |
初期値: | flex-start |
適用対象: | flex containers |
継承: | no |
パーセンテージ: | n/a |
算出値: | 指定されたキーワード |
正規順序: | 構文に従う |
アニメーション型: | 離散 |
テスト
- dynamic-isize-change-001.html (ライブテスト) (ソース)
- dynamic-isize-change-002.html (ライブテスト) (ソース)
- dynamic-isize-change-003.html (ライブテスト) (ソース)
- dynamic-isize-change-004.html (ライブテスト) (ソース)
- flexbox_justifycontent-center.html (ライブテスト) (ソース)
- flexbox_justifycontent-center-overflow.html (ライブテスト) (ソース)
- flexbox_justifycontent-end.html (ライブテスト) (ソース)
- flexbox_justifycontent-end-rtl.html (ライブテスト) (ソース)
- flexbox_justifycontent-flex-end.html (ライブテスト) (ソース)
- flexbox_justifycontent-flex-start.html (ライブテスト) (ソース)
- flexbox-justify-content-horiz-001a.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-horiz-001b.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-horiz-002.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-horiz-003.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-horiz-004.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-horiz-005.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-horiz-006.xhtml (ライブテスト) (ソース)
- flexbox_justifycontent-left-001.html (ライブテスト) (ソース)
- flexbox_justifycontent-left-002.html (ライブテスト) (ソース)
- flexbox_justifycontent-right-001.html (ライブテスト) (ソース)
- flexbox_justifycontent-right-002.html (ライブテスト) (ソース)
- flexbox_justifycontent-rtl-001.html (ライブテスト) (ソース)
- flexbox_justifycontent-rtl-002.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacearound.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacearound-negative.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacearound-only.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacebetween.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacebetween-negative.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacebetween-only.html (ライブテスト) (ソース)
- flexbox_justifycontent-start.html (ライブテスト) (ソース)
- flexbox_justifycontent-start-rtl.html (ライブテスト) (ソース)
- flexbox_justifycontent-stretch.html (ライブテスト) (ソース)
- flexbox-justify-content-vert-001a.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-vert-001b.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-vert-002.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-vert-003.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-vert-004.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-vert-005.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-vert-006.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-wmvert-001.xhtml (ライブテスト) (ソース)
- flexbox-justify-content-wmvert-002.html (ライブテスト) (ソース)
- flexbox-justify-content-wmvert-003.html (ライブテスト) (ソース)
- flexbox_margin.html (ライブテスト) (ソース)
- flexbox_margin-left-ex.html (ライブテスト) (ソース)
- flexbox_computedstyle_justify-content-center.html (ライブテスト) (ソース)
- flexbox_computedstyle_justify-content-flex-end.html (ライブテスト) (ソース)
- flexbox_computedstyle_justify-content-flex-start.html (ライブテスト) (ソース)
- flexbox_computedstyle_justify-content-space-around.html (ライブテスト) (ソース)
- flexbox_computedstyle_justify-content-space-between.html (ライブテスト) (ソース)
- justify-content-001.htm (ライブテスト) (ソース)
- justify-content-002.htm (ライブテスト) (ソース)
- justify-content-003.htm (ライブテスト) (ソース)
- justify-content-004.htm (ライブテスト) (ソース)
- justify-content-005.htm (ライブテスト) (ソース)
- justify-content-006.html (ライブテスト) (ソース)
- justify-content-007.html (ライブテスト) (ソース)
- justify-content_center.html (visual test) (ソース)
- justify-content_flex-end.html (visual test) (ソース)
- justify-content_flex-start.html (visual test) (ソース)
- justify-content-sideways-001.html (ライブテスト) (ソース)
- justify-content_space-around.html (visual test) (ソース)
- justify-content_space-between-001.html (visual test) (ソース)
- justify-content_space-between-002.html (ライブテスト) (ソース)
- scrollbars-auto.html (ライブテスト) (ソース)
- scrollbars.html (ライブテスト) (ソース)
- scrollbars-no-margin.html (ライブテスト) (ソース)
justify-contentプロパティは、フレックスコンテナの現在の行の主軸に沿ってフレックスアイテムを整列します。 これは、柔軟長やautoマージンの解決が済んだ後に実行されます。 通常、1行のフレックスアイテム全てが非柔軟、または柔軟でも最大サイズに達した場合に 余った空きスペースを分配するのに役立ちます。 また、アイテムが行からオーバーフローした場合の整列にも一定の制御を与えます。
- flex-start
- フレックスアイテムは行の先頭に詰めて配置されます。 行の最初のフレックスアイテムのmain-startマージン端は 行のmain-start端にぴったり合わせて配置され、 それ以降のフレックスアイテムは直前のアイテムにぴったり合わせて配置されます。
- flex-end
- フレックスアイテムは行の末尾に詰めて配置されます。 最後のフレックスアイテムのmain-endマージン端は 行のmain-end端にぴったり合わせて配置され、 それ以外のフレックスアイテムは次のアイテムにぴったり合わせて配置されます。
- center
- フレックスアイテムは行の中央に詰めて配置されます。 行上のフレックスアイテム同士はぴったり並べられ、 行の中央に揃えられます。 行のmain-start端と最初のアイテム、 行のmain-end端と最後のアイテムの間に 同じ量の余白が入ります。 (余った空きスペースが負の場合、フレックスアイテムは両端で均等にオーバーフローします。)
- space-between
- フレックスアイテムは行内で均等に分配されます。 余った空きスペースが負の場合や、行上にフレックスアイテムが1つだけの場合は この値はsafe flex-startにフォールバックします。 それ以外の場合は、 最初のフレックスアイテムのmain-startマージン端は 行のmain-start端にぴったり合わせて配置され、 最後のフレックスアイテムのmain-endマージン端は 行のmain-end端にぴったり合わせて配置され、 残りのフレックスアイテムは隣接するアイテム同士の間隔が均等になるように分配されます。
- space-around
-
フレックスアイテムは行内で均等に分配されますが、
両端は半分の間隔になります。
余った空きスペースが負の場合や、行上にフレックスアイテムが1つしかない場合は
この値はsafe centerにフォールバックします。
それ以外の場合、行上のフレックスアイテムは
隣接するフレックスアイテム同士の間隔が均等になるように分配され、
最初と最後のフレックスアイテムとフレックスコンテナの端との間隔は
アイテム同士の間隔の半分となります。
テスト
- flexbox-column-row-gap-001.html (ライブテスト) (ソース)
- flexbox-column-row-gap-002.html (ライブテスト) (ソース)
- flexbox-column-row-gap-003.html (ライブテスト) (ソース)
- flexbox-column-row-gap-004.html (ライブテスト) (ソース)
- flexbox_columns-flexitems-2.html (ライブテスト) (ソース)
- flexbox_columns-flexitems.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacearound.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacearound-negative.html (ライブテスト) (ソース)
- flexbox_justifycontent-spacearound-only.html (ライブテスト) (ソース)
3色のアイテムを持つフレックスコンテナに対する5つのjustify-contentキーワードとその効果を示すイラスト。
8.3. 交差軸の整列:align-itemsおよびalign-selfプロパティ
名前: | align-items |
---|---|
値: | flex-start | flex-end | center | baseline | stretch |
初期値: | stretch |
適用対象: | フレックスコンテナ |
継承: | no |
パーセンテージ: | n/a |
算出値: | 指定されたキーワード |
正規順序: | 構文に従う |
アニメーション型: | 離散 |
テスト
- align-items-007.html (ライブテスト) (ソース)
- align-items-008.html (ライブテスト) (ソース)
- align-items-009.html (ライブテスト) (ソース)
- align-items-baseline-column-horz.html (ライブテスト) (ソース)
- align-items-baseline-column-vert.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-lr-flexbox-item.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-lr-grid-item.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-lr-items.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-lr-table-item.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-rl-flexbox-item.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-rl-grid-item.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-rl-items.html (ライブテスト) (ソース)
- align-items-baseline-column-vert-rl-table-item.html (ライブテスト) (ソース)
- align-items-baseline-overflow-non-visible.html (ライブテスト) (ソース)
- align-items-baseline-row-horz.html (ライブテスト) (ソース)
- align-items-baseline-row-vert.html (ライブテスト) (ソース)
- align-items-baseline-vert-lr-column-horz-flexbox-item.html (ライブテスト) (ソース)
- align-items-baseline-vert-lr-column-horz-grid-item.html (ライブテスト) (ソース)
- align-items-baseline-vert-lr-column-horz-items.html (ライブテスト) (ソース)
- align-items-baseline-vert-lr-column-horz-table-item.html (ライブテスト) (ソース)
- align-items-baseline-vert-rl-column-horz-flexbox-item.html (ライブテスト) (ソース)
- align-items-baseline-vert-rl-column-horz-grid-item.html (ライブテスト) (ソース)
- align-items-baseline-vert-rl-column-horz-items.html (ライブテスト) (ソース)
- align-items-baseline-vert-rl-column-horz-table-item.html (ライブテスト) (ソース)
- multiline-align-self.html (ライブテスト) (ソース)
- column-flex-child-with-max-width.html (ライブテスト) (ソース)
- dynamic-stretch-change.html (ライブテスト) (ソース)
- flexbox_align-items-baseline.html (ライブテスト) (ソース)
- flexbox_align-items-center-2.html (ライブテスト) (ソース)
- flexbox_align-items-center-3.html (ライブテスト) (ソース)
- flexbox_align-items-center.html (ライブテスト) (ソース)
- flexbox-align-items-center-nested-001.html (ライブテスト) (ソース)
- flexbox_align-items-flexend-2.html (ライブテスト) (ソース)
- flexbox_align-items-flexend.html (ライブテスト) (ソース)
- flexbox_align-items-flexstart-2.html (ライブテスト) (ソース)
- flexbox_align-items-flexstart.html (ライブテスト) (ソース)
- flexbox_align-items-stretch-2.html (ライブテスト) (ソース)
- flexbox_align-items-stretch-3.html (ライブテスト) (ソース)
- flexbox_align-items-stretch-4.html (ライブテスト) (ソース)
- flexbox_align-items-stretch.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-items-baseline.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-items-center.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-items-flex-end.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-items-flex-start.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-items-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-items-stretch.html (ライブテスト) (ソース)
- position-relative-percentage-top-001.html (ライブテスト) (ソース)
- position-relative-percentage-top-002.html (ライブテスト) (ソース)
- position-relative-percentage-top-003.html (ライブテスト) (ソース)
- relayout-align-items.html (ライブテスト) (ソース)
- stretch-input-in-column.html (ライブテスト) (ソース)
- stretch-requires-computed-auto-size.html (ライブテスト) (ソース)
- table-as-item-stretch-cross-size-2.html (ライブテスト) (ソース)
- table-as-item-stretch-cross-size-3.html (ライブテスト) (ソース)
- table-as-item-stretch-cross-size-4.html (ライブテスト) (ソース)
- table-as-item-stretch-cross-size-5.html (ライブテスト) (ソース)
- table-as-item-stretch-cross-size.html (ライブテスト) (ソース)
名前: | align-self |
---|---|
値: | auto | flex-start | flex-end | center | baseline | stretch |
初期値: | auto |
適用対象: | flex items |
継承: | no |
パーセンテージ: | n/a |
算出値: | 指定されたキーワード |
正規順序: | 構文に従う |
アニメーション型: | 離散 |
テスト
- align-self-006.html (visual test) (ソース)
- align-self-010.html (visual test) (ソース)
- align-self-013.html (ライブテスト) (ソース)
- align-self-014.html (ライブテスト) (ソース)
- align-self-015.html (ライブテスト) (ソース)
- align-self-016.html (ライブテスト) (ソース)
- flexbox_align-self-auto.html (ライブテスト) (ソース)
- flexbox-align-self-baseline-compatability.html (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-001a.xhtml (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-001b.xhtml (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-002.xhtml (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-003.xhtml (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-004.xhtml (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-005.xhtml (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-006.xhtml (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-007.xhtml (ライブテスト) (ソース)
- flexbox-align-self-baseline-horiz-008.xhtml (ライブテスト) (ソース)
- flexbox_align-self-baseline.html (ライブテスト) (ソース)
- flexbox_align-self-center.html (ライブテスト) (ソース)
- flexbox_align-self-flexend.html (ライブテスト) (ソース)
- flexbox_align-self-flexstart.html (ライブテスト) (ソース)
- flexbox-align-self-horiz-001-block.xhtml (ライブテスト) (ソース)
- flexbox-align-self-horiz-001-table.xhtml (ライブテスト) (ソース)
- flexbox-align-self-horiz-002.xhtml (ライブテスト) (ソース)
- flexbox-align-self-horiz-003.xhtml (ライブテスト) (ソース)
- flexbox-align-self-horiz-004.xhtml (ライブテスト) (ソース)
- flexbox-align-self-horiz-005.xhtml (ライブテスト) (ソース)
- flexbox_align-self-stretch.html (ライブテスト) (ソース)
- flexbox-align-self-stretch-vert-001.html (ライブテスト) (ソース)
- flexbox-align-self-stretch-vert-002.html (ライブテスト) (ソース)
- flexbox-align-self-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-align-self-vert-002.xhtml (ライブテスト) (ソース)
- flexbox-align-self-vert-003.xhtml (ライブテスト) (ソース)
- flexbox-align-self-vert-004.xhtml (ライブテスト) (ソース)
- flexbox-align-self-vert-rtl-001.xhtml (ライブテスト) (ソース)
- flexbox-align-self-vert-rtl-002.xhtml (ライブテスト) (ソース)
- flexbox-align-self-vert-rtl-003.xhtml (ライブテスト) (ソース)
- flexbox-align-self-vert-rtl-004.xhtml (ライブテスト) (ソース)
- flexbox-align-self-vert-rtl-005.xhtml (ライブテスト) (ソース)
- flexbox_computedstyle_align-self-baseline.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-self-center.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-self-flex-end.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-self-flex-start.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-self-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-self-stretch.html (ライブテスト) (ソース)
フレックスアイテムは、フレックスコンテナの現在の行の交差軸に沿って整列できます。 これはjustify-contentと似ていますが、垂直方向で行われます。align-itemsは、フレックスコンテナ内の全アイテム(匿名フレックスアイテムも含む)の デフォルトの整列方法を設定します。align-selfは、 個々のフレックスアイテムごとにこのデフォルト整列を上書きできます。 (匿名フレックスアイテムの場合、align-selfは常に そのコンテナのalign-items値と一致します。)
どちらか一方でもフレックスアイテムの交差軸マージンが autoの場合、align-selfは効果を持ちません。
値の意味は以下の通りです:
- auto
- 交差軸の整列制御を親ボックスのalign-items値に委ねます。 (これはalign-selfの初期値です。)
- flex-start
- cross-startマージン端が cross-start行端にぴったり配置されます。
- flex-end
- cross-endマージン端が cross-end行端にぴったり配置されます。
- center
- フレックスアイテムのマージンボックスが 行内の交差軸の中央に揃えられます。 (フレックス行の交差サイズがアイテムより小さい場合、 両方向に均等にオーバーフローします。)
- baseline
- フレックスアイテムはベースライン整列に参加します。 行上の参加するフレックスアイテムのベースラインが揃うように整列され、 ベースラインからcross-startマージン端までの距離が最大のアイテムが 行のcross-start端にぴったり配置されます。 必要な軸にベースラインがない場合は、 ベースラインがアイテムのボーダーボックスから合成されます。
- stretch
-
フレックスアイテムの交差サイズプロパティが
autoに算出され、
交差軸のマージンのどちらもautoでない場合、
フレックスアイテムは伸長されます。
使用値は、アイテムのマージンボックスの交差サイズが行のサイズにできるだけ近づく長さになります。
ただし、min-height/min-width/max-height/max-widthの制約は守られます。
注: フレックスコンテナの高さが制約されている場合、 この値によってフレックスアイテムの内容がアイテムからオーバーフローすることがあります。
フレックスアイテムのcross-startマージン端が 行のcross-start端にぴったり配置されます。
テスト
- align-items-005.htm (ライブテスト) (ソース)
- align-self-004.html (ライブテスト) (ソース)
- align-self-005.html (ライブテスト) (ソース)
- css-flexbox-height-animation-stretch.html (manual test) (ソース)
4色のアイテムを持つフレックスコンテナに対する5つのalign-itemsキーワードとその効果を示すイラスト。
8.4. フレックス行の詰め方:align-content プロパティ
名前: | align-content |
---|---|
値: | flex-start | flex-end | center | space-between | space-around | stretch |
初期値: | stretch |
適用対象: | 複数行 フレックスコンテナ |
継承: | no |
パーセンテージ: | n/a |
算出値: | 指定されたキーワード |
正規順序: | 構文に従う |
アニメーション型: | 離散 |
align-contentプロパティは、フレックスコンテナの余った交差軸のスペースがある場合に、 フレックスコンテナ内の行を整列します。 これはjustify-contentが主軸でアイテムを整列するのと似ています。 このプロパティは単一行のフレックスコンテナには効果がありません。 値の意味は以下の通りです:
- flex-start
- 行はフレックスコンテナの先頭に詰めて配置されます。 フレックスコンテナ内の最初の行のcross-start端は フレックスコンテナのcross-start端にぴったり合わせて配置され、 それ以降の行は直前の行にぴったり合わせて配置されます。
- flex-end
- 行はフレックスコンテナの末尾に詰めて配置されます。 最後の行のcross-end端は フレックスコンテナのcross-end端にぴったり合わせて配置され、 それ以外の行は次の行にぴったり合わせて配置されます。
- center
- 行はフレックスコンテナの中央に詰めて配置されます。 フレックスコンテナ内の行同士はぴったり並べられ、 フレックスコンテナの中央に揃えられます。 フレックスコンテナのcross-start内容端と最初の行、 フレックスコンテナのcross-end内容端と最後の行の間に 同じ量の余白が入ります。 (余った空きスペースが負の場合、行は両端で均等にオーバーフローします。)
- space-between
- 行はフレックスコンテナ内で均等に分配されます。 余った空きスペースが負の場合や、フレックスコンテナ内にフレックス行が1つしかない場合は この値はsafe flex-startにフォールバックします。 それ以外の場合は、 最初の行のcross-start端は フレックスコンテナのcross-start内容端にぴったり合わせて配置され、 最後の行のcross-end端は フレックスコンテナのcross-end内容端にぴったり合わせて配置され、 残りの行は隣接する行同士の間隔が均等になるように分配されます。
- space-around
- 行はフレックスコンテナ内で均等に分配されますが、両端は半分の間隔になります。 余った空きスペースが負の場合はsafe centerにフォールバックします。 それ以外の場合、フレックスコンテナ内の行は隣接する行同士の間隔が均等になるように分配され、 最初と最後の行とフレックスコンテナの端との間隔は 行同士の間隔の半分となります。
- stretch
- 行は残りのスペースを埋めるように伸長されます。 余った空きスペースが負の場合はflex-startにフォールバックします。 それ以外の場合、余ったスペースは全ての行に均等に分配され、交差サイズが増加します。
注: 複数行のフレックスコンテナのみが 行を整列するための交差軸の空きスペースを持ちます。 単一行フレックスコンテナでは 唯一の行が自動的にスペースいっぱいに伸長されます。
align-contentキーワードと 複数行フレックスコンテナへの効果を示すイラスト。
テスト
- align-content_center.html (ライブテスト) (ソース)
- align-content_flex-end.html (ライブテスト) (ソース)
- align-content_flex-start.html (ライブテスト) (ソース)
- align-content-horiz-001a.html (ライブテスト) (ソース)
- align-content-horiz-001b.html (ライブテスト) (ソース)
- align-content-horiz-002.html (ライブテスト) (ソース)
- align-content_space-around.html (ライブテスト) (ソース)
- align-content_space-between.html (ライブテスト) (ソース)
- align-content_stretch.html (ライブテスト) (ソース)
- align-content-vert-001a.html (ライブテスト) (ソース)
- align-content-vert-001b.html (ライブテスト) (ソース)
- align-content-vert-002.html (ライブテスト) (ソース)
- align-content-wmvert-001.html (ライブテスト) (ソース)
- align-content-wrap-001.html (ライブテスト) (ソース)
- align-content-wrap-002.html (ライブテスト) (ソース)
- align-content-wrap-003.html (ライブテスト) (ソース)
- align-content-wrap-004.html (ライブテスト) (ソース)
- align-content-wrap-005.html (ライブテスト) (ソース)
- flex-align-content-center.html (ライブテスト) (ソース)
- flex-align-content-end.html (ライブテスト) (ソース)
- flex-align-content-space-around.html (ライブテスト) (ソース)
- flex-align-content-space-between.html (ライブテスト) (ソース)
- flex-align-content-start.html (ライブテスト) (ソース)
- flexbox_align-content-center.html (ライブテスト) (ソース)
- flexbox_align-content-flexend.html (ライブテスト) (ソース)
- flexbox_align-content-flexstart.html (ライブテスト) (ソース)
- flexbox_align-content-spacearound.html (ライブテスト) (ソース)
- flexbox_align-content-spacebetween.html (ライブテスト) (ソース)
- flexbox_align-content-stretch-2.html (ライブテスト) (ソース)
- flexbox_align-content-stretch.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-content-center.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-content-flex-end.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-content-flex-start.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-content-space-around.html (ライブテスト) (ソース)
- flexbox_computedstyle_align-content-space-between.html (ライブテスト) (ソース)
8.5. フレックスコンテナのベースライン
フレックスコンテナ自身がベースライン整列に参加するためには(例えば、フレックスコンテナ自身が外側のフレックスコンテナ内のフレックスアイテムである場合など)、 内容を最もよく表すベースラインの位置を提出する必要があります。 このために、フレックスコンテナのベースラインは以下のように決定されます (orderによる並び替え後、 flex-directionも考慮します):
- first/last 主軸ベースライン集合
-
インライン軸がフレックスコンテナの主軸と一致する場合、
ベースラインは以下のように決定されます:
-
フレックスコンテナのフレックスアイテムのうち、 最も開始側/最も終了側のフレックス行がベースライン整列に参加する場合、 フレックスコンテナのfirst/last 主軸ベースライン集合は、 それらのフレックスアイテムの共有整列用ベースラインから 生成されます。
-
それ以外の場合、フレックスコンテナに少なくとも1つフレックスアイテムがある場合、 フレックスコンテナのfirst/last 主軸ベースライン集合は、 最も開始側/最も終了側のフレックスアイテムの 整列用ベースラインから 生成されます。 (アイテムがフレックスコンテナの主軸に平行な整列用ベースラインを持たない場合、 まずボーダー端から合成されます。)
-
さらにそれ以外の場合、フレックスコンテナはfirst/last 主軸ベースライン集合を持たず、 必要に応じて、その整列コンテキストのルールに従って 合成されます。
-
- first/last 交差軸ベースライン集合
- インライン軸がフレックスコンテナの交差軸と一致する場合、 ベースラインは以下のように決定されます:
上記のルールに従ってベースラインを計算する際、 ベースラインを提供するボックスのoverflow値がスクロールを許可する場合、 ベースラインの決定のためには、そのボックスを初期スクロール位置にあるものとして扱う必要があります。
テーブルセルのベースライン決定時には、 フレックスコンテナはline boxやtable-rowと同様にベースラインを提供します。 [CSS2]
ベースラインについての詳細は、CSS Writing Modes 3 § 4.1 ベースラインの概要およびCSS Box Alignment 3 § 9 ベースライン整列詳細を参照してください。
テスト
- flex-align-baseline-001.html (ライブテスト) (ソース)
- flex-align-baseline-002.html (ライブテスト) (ソース)
- flex-align-baseline-003.html (ライブテスト) (ソース)
- flex-align-baseline-004.html (ライブテスト) (ソース)
- flex-align-baseline-005.html (ライブテスト) (ソース)
- flex-align-baseline-006.html (ライブテスト) (ソース)
- flex-align-baseline-007.html (ライブテスト) (ソース)
- flex-align-baseline-column-rtl-direction.html (ライブテスト) (ソース)
- flex-align-baseline-column-vert-lr-rtl-wrap-reverse.html (ライブテスト) (ソース)
- flex-align-baseline-column-vert-rl-rtl-wrap-reverse.html (ライブテスト) (ソース)
- flex-align-baseline-fieldset-001.html (ライブテスト) (ソース)
- flex-align-baseline-fieldset-002.html (ライブテスト) (ソース)
- flex-align-baseline-fieldset-003.html (ライブテスト) (ソース)
- flex-align-baseline-flex-001.html (ライブテスト) (ソース)
- flex-align-baseline-flex-002.html (ライブテスト) (ソース)
- flex-align-baseline-flex-003.html (ライブテスト) (ソース)
- flex-align-baseline-flex-004.html (ライブテスト) (ソース)
- flex-align-baseline-grid-001.html (ライブテスト) (ソース)
- flex-align-baseline-grid-002.html (ライブテスト) (ソース)
- flex-align-baseline-grid-003.html (ライブテスト) (ソース)
- flex-align-baseline-multicol-001.html (ライブテスト) (ソース)
- flex-align-baseline-multicol-002.html (ライブテスト) (ソース)
- flex-align-baseline-multicol-003.html (ライブテスト) (ソース)
- flex-align-baseline-overflow-001.html (ライブテスト) (ソース)
- flex-align-baseline-overflow-002.html (ライブテスト) (ソース)
- flex-align-baseline-overflow-003.html (ライブテスト) (ソース)
- flex-align-baseline-table-001.html (ライブテスト) (ソース)
- flex-align-baseline-table-002.html (ライブテスト) (ソース)
- flex-align-baseline-table-003.html (ライブテスト) (ソース)
- flexbox-baseline-align-self-baseline-horiz-001.html (ライブテスト) (ソース)
- flexbox-baseline-align-self-baseline-vert-001.html (ライブテスト) (ソース)
- flexbox-baseline-empty-001a.html (ライブテスト) (ソース)
- flexbox-baseline-empty-001b.html (ライブテスト) (ソース)
- flexbox-baseline-multi-item-horiz-001a.html (ライブテスト) (ソース)
- flexbox-baseline-multi-item-horiz-001b.html (ライブテスト) (ソース)
- flexbox-baseline-multi-item-vert-001a.html (ライブテスト) (ソース)
- flexbox-baseline-multi-item-vert-001b.html (ライブテスト) (ソース)
- flexbox-baseline-multi-line-horiz-001.html (ライブテスト) (ソース)
- flexbox-baseline-multi-line-horiz-002.html (ライブテスト) (ソース)
- flexbox-baseline-multi-line-horiz-003.html (ライブテスト) (ソース)
- flexbox-baseline-multi-line-horiz-004.html (ライブテスト) (ソース)
- flexbox-baseline-multi-line-vert-001.html (ライブテスト) (ソース)
- flexbox-baseline-multi-line-vert-002.html (ライブテスト) (ソース)
- flexbox-baseline-nested-001.html (ライブテスト) (ソース)
- flexbox-baseline-single-item-001a.html (ライブテスト) (ソース)
- flexbox-baseline-single-item-001b.html (ライブテスト) (ソース)
9. フレックスレイアウトアルゴリズム
このセクションでは、フレックスコンテナとその内容の正確なレイアウト動作を詳細に記述する規範的なアルゴリズムを示します。 ここに書かれているアルゴリズムは、可読性と理論的な単純さを重視して記述されており、 必ずしも最も効率的なものではありません。 実装はどのようなアルゴリズムを使用しても構いませんが、 ここで記載されたアルゴリズムと同じ結果を出さなければなりません。
注: このセクションは主に実装者向けです。 ウェブページを作成する著者は、個々のプロパティ説明を読めば十分であり、 CSSレイアウトの難解な詳細を深く理解したい場合以外は、このセクションを読む必要はありません。
以下のセクションでは、フレックスコンテナとその内容のレイアウトアルゴリズムを定義します。
注: フレックスレイアウトはフレックスアイテムをorderで変更された文書順で扱い、 元の文書順ではありません。
テスト
- flexbox-basic-block-horiz-001v.xhtml (ライブテスト) (ソース)
- flexbox-basic-block-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-block-vert-001v.xhtml (ライブテスト) (ソース)
- flexbox-basic-block-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-canvas-horiz-001v.xhtml (ライブテスト) (ソース)
- flexbox-basic-canvas-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-canvas-vert-001v.xhtml (ライブテスト) (ソース)
- flexbox-basic-canvas-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-fieldset-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-fieldset-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-iframe-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-iframe-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-img-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-img-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-textarea-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-textarea-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-video-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-basic-video-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-dyn-resize-001.html (ライブテスト) (ソース)
- flexbox-mbp-horiz-001-rtl.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-002a.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-002b.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-002v.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-003-reverse.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-003v.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-003.xhtml (ライブテスト) (ソース)
- flexbox-mbp-horiz-004.xhtml (ライブテスト) (ソース)
- flexbox-sizing-horiz-001.xhtml (ライブテスト) (ソース)
- flexbox-sizing-horiz-002.xhtml (ライブテスト) (ソース)
- flexbox-sizing-vert-001.xhtml (ライブテスト) (ソース)
- flexbox-sizing-vert-002.xhtml (ライブテスト) (ソース)
- percentage-max-height-001.html (ライブテスト) (ソース)
- percentage-max-height-002.html (ライブテスト) (ソース)
- percentage-max-height-003.html (ライブテスト) (ソース)
- percentage-max-height-004.html (ライブテスト) (ソース)
- percentage-max-height-005.html (ライブテスト) (ソース)
- percent-height-flex-items-cross-sizes-with-mutations.html (ライブテスト) (ソース)
- table-as-item-auto-min-width.html (ライブテスト) (ソース)
- table-as-item-change-cell.html (ライブテスト) (ソース)
- table-as-item-fixed-min-width-2.html (ライブテスト) (ソース)
- table-as-item-fixed-min-width-3.html (ライブテスト) (ソース)
- table-as-item-fixed-min-width.html (ライブテスト) (ソース)
- table-as-item-narrow-content-2.html (ライブテスト) (ソース)
- table-as-item-narrow-content.html (ライブテスト) (ソース)
- table-as-item-specified-height.html (ライブテスト) (ソース)
- table-as-item-specified-width.html (ライブテスト) (ソース)
- table-as-item-specified-width-vertical.html (ライブテスト) (ソース)
9.1. 初期設定
- 匿名フレックスアイテムを生成する(§ 4 フレックスアイテム参照)。
9.2. 行長の決定
- フレックスアイテムの主軸・交差軸の利用可能スペースを決定する。 各次元について、 その次元のフレックスコンテナの内容ボックスが確定サイズなら、それを使用する。 その次元のフレックスコンテナが minまたはmax-content制約下でサイズ決定中の場合、 その次元の利用可能スペースはその制約値とする。 それ以外の場合は、フレックスコンテナのマージン・ボーダー・パディングを フレックスコンテナの利用可能スペースから差し引き、その値を使う。この結果、値が無限大になることもある。
-
各アイテムのフレックス基準サイズと仮主サイズを決定する:
テスト
- image-as-flexitem-size-001.html (ライブテスト) (ソース)
- image-as-flexitem-size-001v.html (ライブテスト) (ソース)
- image-as-flexitem-size-002.html (ライブテスト) (ソース)
- image-as-flexitem-size-002v.html (ライブテスト) (ソース)
- image-as-flexitem-size-003.html (ライブテスト) (ソース)
- image-as-flexitem-size-003v.html (ライブテスト) (ソース)
- image-as-flexitem-size-004.html (ライブテスト) (ソース)
- image-as-flexitem-size-004v.html (ライブテスト) (ソース)
- image-as-flexitem-size-005.html (ライブテスト) (ソース)
- image-as-flexitem-size-005v.html (ライブテスト) (ソース)
- image-as-flexitem-size-006.html (ライブテスト) (ソース)
- image-as-flexitem-size-006v.html (ライブテスト) (ソース)
- image-as-flexitem-size-007.html (ライブテスト) (ソース)
- image-as-flexitem-size-007v.html (ライブテスト) (ソース)
- item-with-table-with-infinite-max-intrinsic-width.html (ライブテスト) (ソース)
- multiline-min-max.html (ライブテスト) (ソース)
- orthogonal-writing-modes-and-intrinsic-sizing.html (ライブテスト) (ソース)
- svg-root-as-flex-item-001.html (ライブテスト) (ソース)
- svg-root-as-flex-item-002.html (ライブテスト) (ソース)
- svg-root-as-flex-item-003.html (ライブテスト) (ソース)
- svg-root-as-flex-item-004.html (ライブテスト) (ソース)
- svg-root-as-flex-item-005.html (ライブテスト) (ソース)
- svg-root-as-flex-item-006.html (ライブテスト) (ソース)
- table-as-item-min-height-1.html (ライブテスト) (ソース)
- table-as-item-wide-content.html (ライブテスト) (ソース)
- table-with-infinite-max-intrinsic-width.html (ライブテスト) (ソース)
- アイテムの使用確定flex basisがある場合、 それがflex base sizeとなります。
-
フレックスアイテムが...
- preferred aspect ratioを持つ場合
- 使用flex basisがcontentである場合
- 確定したcross sizeを持つ場合
- 使用flex basisがcontentまたはavailable spaceに依存し、 かつフレックスコンテナがmin-contentまたはmax-content制約下でサイズ決定中の場合 (例: 自動テーブルレイアウト [CSS2])、 その制約下でアイテムをサイズ決定します。 flex base sizeはアイテムの結果のmain sizeとなります。
-
それ以外の場合、
使用flex
basisがcontentまたはavailable
spaceに依存し、
利用可能な主サイズが無限大で、
フレックスアイテムのインライン軸が主軸に平行な場合、
直交フローのボックスの規則
[CSS3-WRITING-MODES]に従ってアイテムをレイアウトします。
flex base
sizeはアイテムのmax-contentmain sizeとなります。
注: このケースは例えば、 英語文書(横書きwriting mode)内に カラムフレックスコンテナがあり、 その中に縦書き日本語(縦書きwriting mode)の flex itemが含まれる場合に発生します。
-
その他の場合は、
アイテムを利用可能なavailable spaceに
使用flex
basisをmain
sizeの代わりに用いてサイズ決定します。
contentの値はmax-contentとして扱います。
cross sizeが
main sizeの決定に必要な場合(例:flex itemのmain
sizeがブロック軸にある時や、
preferred aspect ratioを持つ場合)、
かつflex itemの交差サイズがautoで確定していない場合、
この計算ではfit-contentを
flex itemのcross
sizeとして使用します。
flex base
sizeはアイテムの結果のmain sizeとなります。
テスト
- css-flexbox-img-expand-evenly.html (ライブテスト) (ソース)
- fit-content-item-001.html (ライブテスト) (ソース)
- fit-content-item-002.html (ライブテスト) (ソース)
- fit-content-item-003.html (ライブテスト) (ソース)
- fit-content-item-004.html (ライブテスト) (ソース)
- flexbox-vert-lr-with-img.html (ライブテスト) (ソース)
- flex-container-max-content-001.html (ライブテスト) (ソース)
- flex-container-min-content-001.html (ライブテスト) (ソース)
- flex-height-min-content.html (ライブテスト) (ソース)
flex base sizeを決定する際、 アイテムのmin・max 主サイズは無視されます (クランプは行われません)。 さらに、box-sizingを適用する際に コンテンツボックスのサイズをゼロで下限する計算も無視されます。 (例えば、サイズがゼロ、パディングが正、box-sizing: border-box指定のアイテムは 外側のflex base sizeがゼロになり、内側のflex base sizeは負となります。)
hypothetical main sizeは、 アイテムのflex base sizeを 使用されるmin・max 主サイズ(およびコンテンツボックスサイズのゼロ下限)に従ってクランプしたものです。
- フレックスコンテナの主サイズを、その属するフォーマッティングコンテキストの規則に従って決定する。
9.3. 主サイズの決定
-
フレックスアイテムをフレックス行にまとめる:
- フレックスコンテナが単一行の場合、 全フレックスアイテムを1つのフレックス行にまとめる。
-
それ以外の場合、
最初の未収集アイテムから始めて、順番にアイテムを集めていき、
次に集めるアイテムが初めてフレックスコンテナの内側主サイズに収まらなくなるまで
(または強制改ページが現れるまで、
§ 10 フレックスレイアウトの分割参照)連続して集める。
もし最初の未収集アイテムが収まらない場合は、そのアイテムだけをその行に集める。
このステップでは、 フレックスアイテムのサイズは外側 仮主サイズとする。(注:この値は負になる場合もある。)
すべてのフレックスアイテムがフレックス行に収集されるまで繰り返す。
「できるだけ多く集める」行は、ゼロサイズのフレックスアイテムも前の行の末尾に収集する。 たとえ最後の非ゼロアイテムがその行をぴったり埋めた場合でも。
- 柔軟長を解決することで、すべてのフレックスアイテムの使用主サイズを決定する。§ 9.7 柔軟長の解決参照。
テスト
- flexbox_quirks_body.html (ライブテスト) (ソース)
- ortho-table-item-001.html (ライブテスト) (ソース)
- percentage-heights-000.html (ライブテスト) (ソース)
- percentage-heights-001.html (ライブテスト) (ソース)
- percentage-heights-002.html (ライブテスト) (ソース)
- percentage-heights-003.html (ライブテスト) (ソース)
- percentage-heights-004.html (ライブテスト) (ソース)
- percentage-heights-005.html (ライブテスト) (ソース)
- percentage-heights-006.html (ライブテスト) (ソース)
- percentage-heights-007.html (ライブテスト) (ソース)
- percentage-heights-008.html (ライブテスト) (ソース)
- percentage-heights-009.html (ライブテスト) (ソース)
- percentage-heights-010.html (ライブテスト) (ソース)
- percentage-heights-011.html (ライブテスト) (ソース)
- percentage-heights-012.html (ライブテスト) (ソース)
- percentage-heights-013.html (ライブテスト) (ソース)
- percentage-heights-014.html (ライブテスト) (ソース)
- percentage-heights-015.html (ライブテスト) (ソース)
- percentage-heights-016.html (ライブテスト) (ソース)
- percentage-heights-017.html (ライブテスト) (ソース)
- percentage-heights-018.html (ライブテスト) (ソース)
- percentage-heights-019.html (ライブテスト) (ソース)
9.4. 交差サイズの決定
- 各アイテムの仮交差サイズを決定する。 使用主サイズと指定された利用可能スペースを使い、アイテムをin-flowのブロックレベルボックスとしてレイアウトし、 autoはfit-contentとして扱う。
-
各フレックス行の交差サイズを計算する。
フレックスコンテナが単一行で、確定交差サイズを持つ場合、 フレックス行の交差サイズは フレックスコンテナの内側の交差サイズとなります。
それ以外の場合、各フレックス行について:
- インライン軸が主軸に平行で、align-selfがbaselineであり、 かつ交差軸マージンが両方とも非autoである フレックスアイテムを全て集める。 各アイテムのベースラインと仮外側cross-start端までの距離の最大値、 ベースラインと仮外側cross-end端までの距離の最大値をそれぞれ求め、 それらの値を合計する。
- 前のステップで集められなかったアイテムの中から、 仮外側仮交差サイズの最大値を求める。
-
フレックス行の使用交差サイズは、前の二つのステップで得られた値とゼロのうち最大のものとなる。
フレックスコンテナが単一行の場合、 行の交差サイズをコンテナの算出min/max交差サイズの範囲にクランプする。CSS 2.1のmin/max-width/height定義がより一般的に適用されていれば、 この挙動は自動的に得られるはずです。
テスト
- flexbox-single-line-clamp-1.html (ライブテスト) (ソース)
- flexbox-single-line-clamp-2.html (ライブテスト) (ソース)
- flexbox-single-line-clamp-3.html (ライブテスト) (ソース)
- flex-item-contains-size-layout-001.html (ライブテスト) (ソース)
- flex-item-contains-strict.html (ライブテスト) (ソース)
- layout-algorithm_algo-cross-line-001.html (ライブテスト) (ソース)
- layout-algorithm_algo-cross-line-002.html (ライブテスト) (ソース)
- 'align-content: stretch'を扱う。 フレックスコンテナが確定交差サイズを持ち、align-contentがstretch、 かつフレックス行の交差サイズ合計がフレックスコンテナの内側交差サイズより小さい場合、 各フレックス行の交差サイズを等しく増やし、合計がコンテナの内側交差サイズと正確に一致するようにする。
-
visibility:collapseアイテムを折り畳む。 もしフレックスアイテムにvisibility: collapseがあれば、
そのアイテムが属する行の交差サイズをstrut sizeとして記録し、レイアウトを最初からやり直す。
2回目のレイアウトでは、 アイテムを行に集める際に、 折り畳まれたアイテムは主サイズゼロとして扱う。 以降のアルゴリズムでは、そのアイテムは完全に無視される (display:noneと同様)だが、 行の交差サイズ計算後に、 もし行の交差サイズがその行内の折り畳まれたアイテムのstrut size最大値未満なら、 その行の交差サイズをstrut sizeに設定する。
2回目のレイアウトではこのステップはスキップする。
-
各フレックスアイテムの使用交差サイズを決定する。
フレックスアイテムがalign-self: stretchであり、
算出された交差サイズプロパティがautoで、
交差軸マージンがどちらもautoでない場合、
使用外側交差サイズはそのフレックス行の使用交差サイズとなり、
アイテムの使用min/max交差サイズに従ってクランプする。
それ以外の場合、使用交差サイズはアイテムの仮交差サイズとなる。
フレックスアイテムがalign-self: stretchの場合、 アイテム内容のレイアウトをやり直し、 この使用サイズを確定交差サイズとして扱い、 パーセンテージサイズの子要素を解決できるようにする。
このステップはフレックスアイテムの主サイズには影響しません。 たとえpreferred aspect ratioを持っていても。
9.5. 主軸の整列
-
残りの空きスペースを分配する。
各フレックス行について:
- 残りの空きスペースが正で、この行の主軸マージンのうち少なくとも1つがautoなら、 空きスペースをそれらのマージンに均等に分配する。 それ以外の場合、すべてのautoマージンをゼロにする。
- justify-contentに従って主軸方向にアイテムを整列する。
9.6. 交差軸の整列
-
交差軸autoマージンを解決する。 フレックスアイテムに交差軸autoマージンがある場合:
- 外側交差サイズ(それらのautoマージンをゼロとして扱う)が フレックス行の交差サイズより小さければ、 その差分をautoマージンに均等に分配する。
- それ以外の場合、 block-startまたはinline-startマージン(交差軸側のもの)がautoならゼロにし、 反対側のマージンをアイテムの外側交差サイズが行の交差サイズと等しくなるように設定する。
- 全てのフレックスアイテムを交差軸方向に整列する 両方の交差軸マージンがautoでない場合、align-selfに従う。
- フレックスコンテナの使用交差サイズを決定する 参加しているフォーマッティングコンテキストの規則に従う。 内容ベースの交差サイズが必要な場合は、 フレックス行の 交差サイズの合計を使う。
- 全てのフレックス行を整列する align-contentに従う。
9.7. 柔軟長の解決
フレックス行内のアイテムの柔軟長を解決するには:
- 使用フレックス係数を決定する。 行上のすべてのアイテムの仮主サイズ(外側)を合計する。 合計がフレックスコンテナの内側主サイズより小さければ、 このアルゴリズムの残りではflex grow係数を使う。 それ以外はflex shrink係数を使う。
-
各フレックス行のアイテムは、最初目標主サイズを
flex base sizeに設定する。
各アイテムは最初未凍結で、凍結される可能性がある。
注: アイテムの目標主サイズは、凍結後は変更されない。
-
非柔軟アイテムのサイズ決定。 凍結し、
目標主サイズを
仮主サイズに設定する…
- flex係数がゼロのアイテム
- flex grow係数を使う場合: flex base sizeが仮主サイズより大きいアイテム
- flex shrink係数を使う場合: flex base sizeが仮主サイズより小さいアイテム
- 初期空きスペースを計算。 行上のすべてのアイテムの外側サイズを合計し、 フレックスコンテナの内側主サイズからこれを引く。 凍結アイテムには外側目標主サイズを使い、 その他のアイテムには外側flex base sizeを使う。
-
ループ:
- 柔軟アイテムの有無確認。 行上の全アイテムが凍結済みなら、このループを終了。
- 残り空きスペースを計算。初期空きスペースと同様に計算。 未凍結アイテムのflex係数合計が1未満なら、 初期空きスペースにこの合計を掛ける。 この値の絶対値が残り空きスペースの絶対値より小さければ、 これを残り空きスペースとして使う。
-
残り空きスペースがゼロでなければ、flex係数に比例して分配:
- flex grow係数使用時
- 行上の未凍結アイテムごとに、 アイテムのflex grow係数と行上の未凍結アイテム全体のflex grow係数合計との比率を計算。 アイテムの目標主サイズを、 flex base sizeに、 この比率に応じた残り空きスペースの一部を加えて設定。
- flex shrink係数使用時
- 行上の未凍結アイテムごとに、 flex shrink係数に内側flex base sizeを掛け、 拡大flex shrink係数として記録。 アイテムの拡大flex shrink係数と 行上の未凍結アイテム全体の拡大flex shrink係数合計との比率を計算。 アイテムの目標主サイズを、 flex base sizeから この比率に応じた残り空きスペース(絶対値)の一部を減算して設定。この計算で内側主サイズが負になる場合があるが、 次のステップで修正される。
- min/max違反を修正。 凍結されていない各アイテムの目標主サイズを 使用min・max主サイズでクランプし、コンテンツボックスサイズをゼロで下限する。 アイテムの目標主サイズが小さくなった場合はmax違反、 大きくなった場合はmin違反。
-
過度にflexされたアイテムを凍結。 前のステップの調整量
∑(clamped size - unclamped size)
の合計が 総違反量となる。 総違反量が:- ゼロ
- 全アイテムを凍結
- 正
- min違反のアイテムを全て凍結
- 負
- max違反のアイテムを全て凍結
注: この処理で少なくとも1アイテムが凍結され、 ループが進行し必ず終了することが保証される。
- このループの最初に戻る。
- 各アイテムの使用主サイズを 目標主サイズに設定する。
テスト
- item-with-max-height-and-scrollbar.html (ライブテスト) (ソース)
- item-with-max-height-and-scrollbar.html (ライブテスト) (ソース)
- max-width-violation.html (ライブテスト) (ソース)
- relayout-image-load.html (ライブテスト) (ソース)
- table-as-item-inflexible-in-column-1.html (ライブテスト) (ソース)
- table-as-item-inflexible-in-column-2.html (ライブテスト) (ソース)
- table-as-item-inflexible-in-row-1.html (ライブテスト) (ソース)
- table-as-item-inflexible-in-row-2.html (ライブテスト) (ソース)
9.8. 確定サイズと非確定サイズ
CSS Sizing [CSS-SIZING-3]では確定および非確定長が定義されていますが、 Flexboxでは、ある長さが確定とみなされる追加のケースがいくつかあります:
-
フレックスコンテナに確定な主サイズがある場合、 フレックス処理後の主サイズはフレックスアイテムにとって 確定として扱われます。
-
フレックスアイテムのflex basisが確定なら、 フレックス処理後の主サイズも 確定となります。
-
単一行のフレックスコンテナに確定した交差サイズがある場合、 自動優先外側交差サイズを持つ伸長したフレックスアイテムは、フレックスコンテナの内側交差サイズ(フレックスアイテムのmin/max交差サイズでクランプ)となり、 確定とみなされます。
-
フレックス行の交差サイズが決定された時点で、 autoサイズのフレックスコンテナ内のアイテムの交差サイズもレイアウト目的では 確定とみなされます。 ステップ11参照。
テスト
- flexbox-definite-cross-size-constrained-percentage.html (ライブテスト) (ソース)
- flexbox-definite-sizes-001.html (ライブテスト) (ソース)
- flexbox-definite-sizes-002.html (ライブテスト) (ソース)
- flexbox-definite-sizes-003.html (ライブテスト) (ソース)
- flexbox-definite-sizes-004.html (ライブテスト) (ソース)
- flexbox-definite-sizes-005.html (ライブテスト) (ソース)
- flexbox-definite-sizes-006.html (ライブテスト) (ソース)
- height-percentage-with-dynamic-container-size.html (ライブテスト) (ソース)
- percentage-widths-001.html (ライブテスト) (ソース)
- position-fixed-001.html (ライブテスト) (ソース)
- stretch-obeys-min-max-001.html (ライブテスト) (ソース)
- stretch-obeys-min-max-002.html (ライブテスト) (ソース)
- stretch-obeys-min-max-003.html (ライブテスト) (ソース)
注: これはflex layout内で 「確定」サイズの決定にレイアウト処理が必要となることを意味しています。 これはflex item内のパーセンテージ値が、著者の期待通りに解決されるようにするためです。
9.9. 内在サイズ
内在サイズは、フレックスコンテナが fit-content論理幅(fit-content式を使用)や内容ベースの論理高さ(max-contentサイズを使用)など 各種内容ベースの自動サイズ決定に使われます。 これらの計算では、フレックスアイテム上のautoマージンは0として扱われます。
この節の用語定義については[CSS-SIZING-3]を参照してください。
テスト
- flexbox-gap-position-absolute.html (ライブテスト) (ソース)
- gap-001-lr.html (ライブテスト) (ソース)
- gap-001-ltr.html (ライブテスト) (ソース)
- gap-001-rl.html (ライブテスト) (ソース)
- gap-001-rtl.html (ライブテスト) (ソース)
- gap-002-lr.html (ライブテスト) (ソース)
- gap-002-ltr.html (ライブテスト) (ソース)
- gap-002-rl.html (ライブテスト) (ソース)
- gap-002-rtl.html (ライブテスト) (ソース)
- gap-003-lr.html (ライブテスト) (ソース)
- gap-003-ltr.html (ライブテスト) (ソース)
- gap-003-rl.html (ライブテスト) (ソース)
- gap-003-rtl.html (ライブテスト) (ソース)
- gap-004-lr.html (ライブテスト) (ソース)
- gap-004-ltr.html (ライブテスト) (ソース)
- gap-004-rl.html (ライブテスト) (ソース)
- gap-004-rtl.html (ライブテスト) (ソース)
- gap-005-lr.html (ライブテスト) (ソース)
- gap-005-ltr.html (ライブテスト) (ソース)
- gap-005-rl.html (ライブテスト) (ソース)
- gap-005-rtl.html (ライブテスト) (ソース)
- gap-006-lr.html (ライブテスト) (ソース)
- gap-006-ltr.html (ライブテスト) (ソース)
- gap-006-rl.html (ライブテスト) (ソース)
- gap-006-rtl.html (ライブテスト) (ソース)
- gap-007-lr.html (ライブテスト) (ソース)
- gap-007-ltr.html (ライブテスト) (ソース)
- gap-007-rl.html (ライブテスト) (ソース)
- gap-007-rtl.html (ライブテスト) (ソース)
- gap-008-ltr.html (ライブテスト) (ソース)
- gap-009-ltr.html (ライブテスト) (ソース)
- gap-010-ltr.html (ライブテスト) (ソース)
- gap-011.html (ライブテスト) (ソース)
- gap-012.html (ライブテスト) (ソース)
- gap-013.html (ライブテスト) (ソース)
- gap-014.html (ライブテスト) (ソース)
- gap-015.html (ライブテスト) (ソース)
- gap-016.html (ライブテスト) (ソース)
- gap-017.html (ライブテスト) (ソース)
- gap-018.html (ライブテスト) (ソース)
- gap-019.html (ライブテスト) (ソース)
- gap-020.html (ライブテスト) (ソース)
- gap-021.html (ライブテスト) (ソース)
- auto-min-size-001.html (ライブテスト) (ソース)
- col-wrap-001.html (ライブテスト) (ソース)
- col-wrap-002.html (ライブテスト) (ソース)
- col-wrap-003.html (ライブテスト) (ソース)
- col-wrap-004.html (ライブテスト) (ソース)
- col-wrap-005.html (ライブテスト) (ソース)
- col-wrap-006.html (ライブテスト) (ソース)
- col-wrap-007.html (ライブテスト) (ソース)
- col-wrap-008.html (ライブテスト) (ソース)
- col-wrap-009.html (ライブテスト) (ソース)
- col-wrap-010.html (ライブテスト) (ソース)
- col-wrap-011.html (ライブテスト) (ソース)
- col-wrap-012.html (ライブテスト) (ソース)
- col-wrap-013.html (ライブテスト) (ソース)
- col-wrap-014.html (ライブテスト) (ソース)
- col-wrap-015.html (ライブテスト) (ソース)
- col-wrap-016.html (ライブテスト) (ソース)
- col-wrap-017.html (ライブテスト) (ソース)
- col-wrap-018.html (ライブテスト) (ソース)
- col-wrap-019.html (ライブテスト) (ソース)
- col-wrap-020.html (ライブテスト) (ソース)
- col-wrap-crash.html (ライブテスト) (ソース)
- row-001.html (ライブテスト) (ソース)
- row-002.html (ライブテスト) (ソース)
- row-003.html (ライブテスト) (ソース)
- row-004.html (ライブテスト) (ソース)
- row-005.html (ライブテスト) (ソース)
- row-006.html (ライブテスト) (ソース)
- row-007.html (ライブテスト) (ソース)
- row-008.html (ライブテスト) (ソース)
- row-compat-001.html (ライブテスト) (ソース)
- row-use-cases-001.html (ライブテスト) (ソース)
- row-wrap-001.html (ライブテスト) (ソース)
- multiline-shrink-to-fit.html (ライブテスト) (ソース)
- svg-no-natural-size-grandchild.html (ライブテスト) (ソース)
9.9.1. フレックスコンテナの内在主サイズ
max-content 主サイズのフレックスコンテナは、理論的には、フレックスレイアウトをそのコンテナサイズで実行したとき、 各フレックスアイテムが アイテムの柔軟性の範囲内で max-content寄与値以上のサイズになるような フレックスコンテナが取りうる最小サイズです。
min-content 主サイズのフレックスコンテナは、理論的には、フレックスコンテナが取りうる最小サイズであり、 どのアイテムもコンテナからはみ出さず、 どのアイテムの内容もアイテム自身からはみ出さないサイズです。 (ただし、ボックスレイアウトがoverflowするように定義されている場合は除く(例えば、負のマージンや合計が100%以上になるパーセンテージサイズ等)。)
テスト
9.9.1.1. 理想的なアルゴリズム
注: 以下のアルゴリズムはフレックスコンテナの理想的な内在主サイズを計算します。 しかし、最初に正しく実装されなかったため、 既存コンテンツが(残念ながら一貫した)誤った実装動作に依存するようになりました。これはWeb互換性がありません。 実装者やCSSワーキンググループは、 Webブラウザ実装がこの動作に安全に近づけるかどうかを調査しており、 更なる実験が歓迎されています。
- 各フレックスアイテムについて、 外側flex base sizeを max-content寄与値サイズから引き算する。 その結果が正の場合は、 アイテムのflex grow factorで割る(flex grow factorが1以上の場合)、 またはflex grow factorが1未満の場合は掛ける。 結果が負の場合は、 アイテムのscaled flex shrink factorで割る(ゼロ除算の場合は負の無限大とみなす)。 これがアイテムのdesired flex fractionです。
- すべてのフレックスアイテムを無限長の行に配置する。 各行内で、 すべてのフレックスアイテムのdesired flex fractionのうち最大(最も正)の値を求める。 これがその行のchosen flex fractionです。
-
chosen flex fractionが正であり、
行のflex grow
factorの合計が1未満なら、
chosen flex fractionをその合計で割る。
chosen flex fractionが負であり、 行のflex shrink factorの合計が1未満なら、 chosen flex fractionにその合計を掛ける。
- 各アイテムのflex base sizeに flex grow factor(縮小の場合はscaled flex shrink factor)と chosen flex fractionの積を加算し、 その結果をmax main sizeでクランプし、min main sizeで下限する。
- フレックスコンテナの max-contentサイズは、 全行の中で 算出された各行内すべてのアイテムサイズの合計の最大値となる。
min-content 主サイズは、単一行 フレックスコンテナの場合、 max-content 主サイズと同じ方法で計算されますが、 アイテムのmin-content寄与値が max-content寄与値の代わりに使われます。
このアルゴリズムのflex合計が1未満の場合の影響
上記のアルゴリズムは特に2つのケースで正しい挙動を与え、 2つの間を連続的に遷移できるようにフレックスコンテナのサイズを設計しています:
-
すべてのアイテムが非柔軟の場合、 フレックスコンテナは アイテムのflex base sizeの合計でサイズ決定されます。 (非柔軟なflex base sizeは、 width/heightの代用となり、 指定されていればBlock Layoutのmax-content寄与値の元になります。)
-
すべてのアイテムがflex factor ≥ 1の柔軟アイテムの場合、 フレックスコンテナは アイテムのmax-content寄与値の合計(またはそれより大きいサイズ)で サイズ決定されます。 すべてのフレックスアイテムが少なくともmax-content寄与値以上のサイズになり、 かつ柔軟性に応じて他のアイテムとの比率も正しく保たれます。
例えば、フレックスコンテナに フレックスアイテムが1つあり、 flex-basis: 100px;だがmax-contentサイズが200pxの場合、 アイテムがflex-grow: 0なら フレックスコンテナ(およびフレックスアイテム)は 100px幅、 flex-grow: 1以上なら フレックスコンテナ(およびフレックスアイテム)は 200px幅となります。
この2つのケース間の全体挙動を連続化する方法は複数ありますが、 それぞれ欠点があります。 もっとも悪影響が少ないものを選んでいますが、 flex factorが1未満の場合は柔軟性が二重に適用されてしまいます。 上記例でアイテムがflex-grow: .5なら、 フレックスコンテナは 150px幅となり、 アイテムは最終的に125px幅になります。
この二重適用を完全に排除することはできません。 他のより重要な原則を犠牲にしない限り(特に原則3―flex-grow: .5のアイテムが2つあっても二重適用しないようにしつつ、 flex-grow: 0の兄弟アイテムがflex-grow: 1のアイテムに影響しないようにする―はできないようです)。
選択された具体的挙動についての詳細な補足
原則:
-
サイズがゼロに近づく場合も、拡大・縮小とも爆発的なサイズにしない。
-
flex factorがすべて1以上なら、すべてのアイテムがmax-contentサイズ以上になる最小サイズを返す。
-
flex係数がゼロのアイテムはサイズに一切影響しない。
-
flex係数やアイテムサイズの変化に対して連続的な挙動を保つ。
-
任意の入力変数(サイズ、flex係数)の線形変化に対して、サイズ変化もできるだけ線形にする。
-
flex factorの合計が1以上なら、すべてのアイテムがmax-contentサイズ以上になる最小サイズを返す。
これらを両立させるためには、flex factorや行のflex factor合計が1未満の場合は補正を加える必要があります。
縮小は比較的簡単です。 0 shrinkの場合はdesired fractionが負の無限大になるので(常に最大値を取るので選ばれない)、 行レベルで補正を加えるだけでよく、合計が1未満の場合だけ二重適用になります。
拡大はより複雑です。 0 growの場合は正の無限大になってしまうので、個々のアイテムレベルで補正が必要です。 factorが1未満の場合はspaceにfactorを掛けますが、 それだけだとfactorが1未満&合計が1以上の場合は二重適用、 合計が1未満だと三重適用になるので、 合計が1の場合は逆補正で割り算して二重適用に揃えます。
二重適用を完全には排除できませんが、 他の原則を守るために許容しています。
9.9.1.2. Web互換の内在サイズ決定アルゴリズム
注: 以下のアルゴリズムはWeb互換性があることが示されています。 今後、可能であれば上記の理想アルゴリズムに近づけるために変更される可能性があります。
Web互換アルゴリズムは後述予定。[Issue #8884]
9.9.1.3. 複数行min-contentアルゴリズム
複数行コンテナについては、 min-content 主サイズは、そのフレックスコンテナ内の 非collapsedなフレックスアイテムの min-content寄与値の最大値となります。 この目的では、 アイテムが伸長不可ならその寄与値はアイテムのflex base sizeで上限、 縮小不可ならflex base sizeで下限し、 さらにアイテムのmin/max主サイズでクランプします。
9.9.2. フレックスコンテナの内在交差サイズ
min-content/max-content 交差サイズは、 単一行のフレックスコンテナの場合、 アイテムのmin-content寄与値/max-content寄与値の最大値となります。
複数行のフレックスコンテナについては、 行方向・列方向で挙動が異なります:
- row 複数行 フレックスコンテナ 交差サイズ
-
min-content/max-content 交差サイズは、 フレックスコンテナを交差軸方向の min-content制約/max-content制約下で サイズ決定したときに得られる フレックス行の交差サイズの合計です。
- column 複数行 フレックスコンテナ 交差サイズ
-
min-content 交差サイズは、 すべてのフレックスアイテムの min-content寄与値の最大値です。
注: このヒューリスティックは、 min-contentサイズがmax-contentサイズより小さくなることを保証するために 実質的に単一行とみなしています。 フレックスコンテナに高さ制約がある場合はオーバーフローしますが、 フレックスコンテナが スクロールコンテナでもある場合は、 少なくとも任意のカラムを scrollport内に完全に収めるだけの大きさになります。
max-content 交差サイズは、 フレックスコンテナを 交差軸方向の max-content制約下でサイズ決定したときに得られる フレックス行の交差サイズの合計であり、 各フレックスアイテムのレイアウト時に available spaceとして アイテムのmax-content 交差サイズ寄与値の最大値を使います。
注: このヒューリスティックは、 フレックスコンテナが 各フレックスアイテムを max-content寄与値以上でレイアウトし、 各フレックス行が 最大のフレックスアイテムより大きくならないようにする サイズの合理的な近似を与えます。 完全には正確ではない場合もありますが、 完全に正確にするのは非常に高コストのため、 実用上は十分です。
テスト
9.9.3. フレックスアイテムの内在サイズ寄与値
min-content寄与値の主サイズ(main-size)は、フレックスアイテムの外側min-contentサイズと、外側preferredサイズ(それがautoでない場合)のうち大きい方で、 さらにmin/max主サイズによってクランプされます。
max-content寄与値の主サイズ(main-size)は、フレックスアイテムの外側max-contentサイズと、外側preferredサイズ(それがautoでない場合)のうち大きい方で、 さらにmin/max主サイズによってクランプされます。
10. フレックスレイアウトの分割
フレックスコンテナは、アイテム間、アイテムの行(複数行モード時)、アイテム内部でページ分割できます。 break-*プロパティは、ブロックレベルやインラインレベルのボックスと同様、フレックスコンテナにも通常通り適用されます。 このセクションでは、それらがフレックスアイテムやアイテム内容にどのように適用されるかを定義します。 詳細はCSS Fragmentation Moduleも参照 [CSS3-BREAK]。
以下の分割ルールでは、分割コンテナを「ページ」と呼びます。 同様のルールは他の分割コンテキストにも適用されます。 (必要に応じて「ページ」を適切な分割コンテナタイプに置き換えてください。) このセクションでは可読性のため、「row」と「column」は フレックスコンテナの ブロックフロー方向との相対的な向きを指し、 フレックスコンテナ自身の向きではありません。
分割されたフレックスコンテナの厳密なレイアウトは、このFlexible Box Layoutレベルでは定義されていません。 ただし、フレックスコンテナ内部での分割は以下のルールに従います (order-modified document orderで解釈):
-
rowフレックスコンテナでは、
フレックスアイテム上のbreak-beforeやbreak-after値は、フレックス行に伝播されます。
最初の行のbreak-before値、
最後の行のbreak-after値は
フレックスコンテナに伝播されます。
注: breakの伝播 (text-decorationの伝播のように) は算出値には影響しません。
- columnフレックスコンテナでは、 最初のアイテムのbreak-before値、 最後のアイテムのbreak-after値は フレックスコンテナに伝播されます。 他のアイテムの強制分割は、アイテム自体に適用されます。
- アイテム内部の強制分割は、その内容サイズを増加させる効果があり、 兄弟アイテム内で強制分割が発生することはありません。
- rowフレックスコンテナでは、Class A break機会は 兄弟フレックス行間で発生し、 Class C break機会は 最初/最後のフレックス行とフレックスコンテナの内容端間で発生します。 columnフレックスコンテナでは、Class A break機会は 兄弟フレックスアイテム間で発生し、 Class C break機会は 行上の最初/最後のフレックスアイテムとフレックスコンテナの内容端間で発生します。 [CSS3-BREAK]
- フレックスコンテナが分割後に続く場合、 フレックスアイテムの利用可能スペース (分割コンテキストのブロックフロー方向)は、 以前のページのフレックスコンテナ断片が消費したスペース分だけ減少します。 コンテナ断片が消費したスペースは、そのページ上の内容ボックスのサイズです。 この調整の結果、利用可能スペースが負になった場合はゼロに設定されます。
- フレックスコンテナの最初の断片がページの上端でない場合、 かつフレックスアイテムのいずれもそのページの残りスペースに収まらない場合、 コンテナ断片全体が次ページに移動されます。
- 複数行のcolumnフレックスコンテナを分割する場合、 UAは各断片を独自のフレックス行「スタック」として構成してもよいです。 (multi-columnコンテナの各断片が独自のカラムボックス行を持つのと同じように。) これにより、前のページで表示される内容がボックス順序の早い内容に対応するようにします。
- 前項のアイテム再配置以外では、 UAは分割されていないフローに対するフレックスコンテナの歪みを最小化するよう努めるべきです。
テスト
- flexbox_interactive_break-after-column-item.html (manual test) (ソース)
- flexbox_interactive_break-after-column-lastitem.html (manual test) (ソース)
- flexbox_interactive_break-after-container.html (manual test) (ソース)
- flexbox_interactive_break-after-item.html (manual test) (ソース)
- flexbox_interactive_break-after-line.html (manual test) (ソース)
- flexbox_interactive_break-after-line-order.html (manual test) (ソース)
- flexbox_interactive_break-after-multiline.html (manual test) (ソース)
- flexbox_interactive_break-before-column-firstitem.html (manual test) (ソース)
- flexbox_interactive_break-before-column-item.html (manual test) (ソース)
- flexbox_interactive_break-before-container.html (manual test) (ソース)
- flexbox_interactive_break-before-item.html (manual test) (ソース)
- flexbox_interactive_break-before-multiline.html (manual test) (ソース)
- flexbox_interactive_break-natural.html (manual test) (ソース)
10.1. サンプルフレックス分断アルゴリズム
この参考セクションでは、フレックスコンテナ向けの分断アルゴリズム例を示します。
実装者はこのアルゴリズムを改良し、CSSワーキンググループへフィードバックを
提供することが推奨されます。
このアルゴリズムはページ分割が常に前方向に進むと仮定しています。 よって以下のアルゴリズムでは、分割前の整列は基本的に無視されます。 高度なレイアウトエンジンは断片間の整列も対応できるかもしれません。
- 単一行のカラムフレックスコンテナ
-
- フレックスレイアウトアルゴリズム(ページ分割を考慮せず)を交差サイズの決定まで実行する。
- 最初から、連続したフレックスアイテムまたはその断片をできる限り多く(最低1つまたは断片)レイアウトし、 ページの空きがなくなるか強制分割に遭遇するまで続ける。
- 前ステップで空きがなくなり、空きスペースが正の場合、 UAはこのページ上の分配された空きスペースを(ゼロまでだが通り越さず)減らして 次の分割不可フレックスアイテムまたは断片のための空きを作ってもよい。 それ以外の場合、入らないアイテムや断片は次ページに送られる。 UAは断片の50%以上が残り空きに入るなら「引き上げ」、そうでなければ「押し出し」するべき。
- 前ステップでレイアウトされなかったアイテムや断片があれば、 フレックスレイアウトアルゴリズムを 行長の決定から交差サイズの決定まで再実行し、 次ページサイズと全ての内容(既にレイアウト済も含む)で再開、 ただし未レイアウトの最初のアイテムや断片から始める。
- フレックスコンテナの各断片について、 主軸整列から最後までフレックスレイアウトアルゴリズムを続ける。
このアルゴリズムの意図は、カラム方向の単一行フレックスコンテナが ブロックフローと非常に似た分割動作をすることです。 テスト例として、justify-content:startかつ非柔軟アイテムのみの フレックスコンテナは、 同じ内容・サイズ・マージンのin-flow子を持つブロックと同じ分割動作となるべきです。
- 複数行のカラムフレックスコンテナ
-
- ページ分割を考慮してフレックスレイアウトアルゴリズムを実行 (フレックスコンテナの最大行長をページ残り空きに制限) 交差サイズの決定まで。
- フレックス行をできる限り多く(最低1行)レイアウトし、 フレックスコンテナの交差方向空きがなくなるか強制分割に遭遇するまで:
- 前ステップでレイアウトされなかったアイテムがあれば、 行長の決定から交差サイズの決定まで 次ページサイズと未レイアウトのアイテムのみで実行・再開。
- フレックスコンテナの各断片について、 主軸整列から最後までフレックスレイアウトアルゴリズムを続ける。
このサンプルアルゴリズムの欠点は、 フレックスアイテムが1ページに完全に収まらない場合、 複数行カラムフレックスコンテナでは ページ分割されないことです。
- 単一行のローフレックスコンテナ
-
- フレックスレイアウトアルゴリズム全体(ページ分割考慮せず)を実行、 ただしalign-selfが flex-startまたはbaseline以外はflex-startとみなす。
- 分割不可アイテムがページ残り空きに収まらず、 かつフレックスコンテナがページ上端でない場合は 次ページに移してレイアウトを最初から再開。
-
各アイテムについて、内容のうちページ残り空きに収まる部分までレイアウトし、
残りを次ページへ断片化。
フレックスレイアウトアルゴリズムを
行長の決定から主軸整列まで新ページサイズで再実行。
前断片に完全に収まったフレックスアイテムも 後続断片では主軸スペースを消費する。
- フレックスコンテナの各断片について、 交差軸整列から最後までフレックスレイアウトアルゴリズムを再実行。 最初以外の断片では、 align-selfとalign-contentを 全断片・行でflex-startとして扱う。
- 元々のalign-self値で 全断片の合計交差サイズに アイテムを揃えた場合、アイテムが断片1つに完全に収まるなら その断片に移動して適切に整列してもよい。
- 複数行のローフレックスコンテナ
-
- フレックスレイアウトアルゴリズム(ページ分割考慮せず)を交差サイズの決定まで実行。
-
フレックス行をできる限り多く(最低1行)、最初からページ空きまたは強制分割までレイアウト。
行がページに収まらず、行がページ上端でなければ 次ページに移してレイアウトを最初から再開。 この行以降のアイテムのみ使用。
フレックスアイテム自体が強制分割なら、 主サイズの決定から主軸整列まで この行以降のアイテムのみで再実行。 分割を起こしたアイテムは行分割ステップで自動で新行開始、 このステップに戻る。 アイテム内の強制分割は無視。
- 前ステップでレイアウトされなかったアイテムがあれば、 行長の決定から主軸整列まで 次ページサイズと未レイアウトアイテムのみで再実行。 前行未レイアウトから再開。
- 各断片について、 交差軸整列から最後までフレックスレイアウトアルゴリズムを続ける。
付録A: 軸マッピング
この付録は参考情報です。
flex-flow | 主軸 | 開始 | 終了 | 交差軸 | 開始 | 終了 |
---|---|---|---|---|---|---|
row + nowrap/wrap | 横 | 左 | 右 | 縦 | 上 | 下 |
row-reverse + nowrap/wrap | 右 | 左 | ||||
row + wrap-reverse | 左 | 右 | 下 | 上 | ||
row-reverse + wrap-reverse | 右 | 左 | ||||
column + nowrap/wrap | 縦 | 上 | 下 | 横 | 左 | 右 |
column-reverse + nowrap/wrap | 下 | 上 | ||||
column + wrap-reverse | 上 | 下 | 右 | 左 | ||
column-reverse + wrap-reverse | 下 | 上 |
flex-flow | 主軸 | main-start | main-end | 交差軸 | cross-start | cross-end |
---|---|---|---|---|---|---|
row + nowrap/wrap | 横 | 右 | 左 | 縦 | 上 | 下 |
row-reverse + nowrap/wrap | 左 | 右 | ||||
row + wrap-reverse | 右 | 左 | 下 | 上 | ||
row-reverse + wrap-reverse | 左 | 右 | ||||
column + nowrap/wrap | 縦 | 上 | 下 | 横 | 右 | 左 |
column-reverse + nowrap/wrap | 下 | 上 | ||||
column + wrap-reverse | 上 | 下 | 左 | 右 | ||
column-reverse + wrap-reverse | 下 | 上 |
flex-flow | 主軸 | 開始 | 終了 | 交差軸 | 開始 | 終了 |
---|---|---|---|---|---|---|
row + nowrap/wrap | 縦 | 上 | 下 | 横 | 右 | 左 |
row-reverse + nowrap/wrap | 下 | 上 | ||||
row + wrap-reverse | 上 | 下 | 左 | 右 | ||
row-reverse + wrap-reverse | 下 | 上 | ||||
column + nowrap/wrap | 縦 | 右 | 左 | 横 | 上 | 下 |
column-reverse + nowrap/wrap | 左 | 右 | ||||
column + wrap-reverse | 右 | 左 | 下 | 上 | ||
column-reverse + wrap-reverse | 左 | 右 |
付録B:
-webkit-
レガシープロパティ
この付録は規範的です。
これらのエイリアスは非推奨であり、著者は現役のレガシーUAに対応させる必要がない限り使用すべきではありません。
一般Webコンテンツとの互換性のため、 UAがWebブラウザであれば必須、それ以外は任意で 以下のレガシー名エイリアスを実装する必要があります:
エイリアス | 標準 |
---|---|
-webkit-align-content | align-content |
-webkit-align-items | align-items |
-webkit-align-self | align-self |
-webkit-flex | flex |
-webkit-flex-basis | flex-basis |
-webkit-flex-direction | flex-direction |
-webkit-flex-flow | flex-flow |
-webkit-flex-grow | flex-grow |
-webkit-flex-shrink | flex-shrink |
-webkit-flex-wrap | flex-wrap |
-webkit-justify-content | justify-content |
-webkit-order | order |
テスト
謝辞
フィードバック・貢献に感謝します:
Erik Anderson、 Christian Biesinger、 Tony Chang、 Phil Cupp、 Arron Eicholz、 James Elmore、 Andrew Fedoniouk、 Brian Heuston、 Shinichiro Hamaji、 Daniel Holbert、 Ben Horst、 John Jansen、 Brad Kemper、 Kang-hao Lu、 Markus Mielke、 Peter Moulder、 Robert O’Callahan、 Christoph Päper、 Ning Rogers、 Peter Salas、 Elliott Sprehn、 Morten Stenshorne、 Christian Stockwell、 Ojan Vafai、 Eugene Veselov、 Greg Whitworth、 Boris Zbarsky。
変更履歴
このセクションでは、以前の公開からの変更点を記録しています。
2018年11月19日 CR以降の変更点
コメント対応状況が公開されています。主な変更点:
- § 9.9.1 フレックスコンテナの内在主サイズ の部分を理想的だがWeb互換性なしと明記し、 Web互換アルゴリズムを継続調査中としてマーク。 (Issue 8884)
- § 9.9.1 フレックスコンテナの内在主サイズのflex規則の誤りを修正し、実際のアルゴリズムに近づけた。 入力がゼロに近づくときのゼロ除算や爆発的なサイズを回避。 (Issue 7189)
- カラムwrapフレックスコンテナの交差サイズ内在サイズ規則を見直し、より良い結果を得られるように修正。 (Issue 6777)
- content edgeを フレックスコンテナの static-position矩形の判定に使用するよう変更。 追加のレイアウト作業なしで済むようにした。 これにより、フレックスコンテナのalign-contentは無視されるが、 ボックス自身のalign-selfは有効。 (Issue 5843, 7596)
- auto preferred sizesをminとmaxサイズ寄与値計算の両方で正しく無視するよう修正。 (max計算で漏れていたが、changelogには正しく記載済み…) (Issue 6455)
- order プロパティ定義を[CSS-DISPLAY-3]へ移動。 詳細は§ 5.4 並び替えとアクセシビリティ:orderプロパティ参照。 (Issue 5865)
-
主サイズを、flex itemが確定flex basisを持つ場合は
常に確定とするよう変更し、実装に合わせた。
(Issue 4311)
注: 完全非柔軟アイテムで 確定flex basisを持つ場合、 主サイズは定義上確定となる。注: これによりflex layout内で 「確定」サイズの算出にレイアウト処理が必要になる場合がある。 これはflex item内のパーセンテージを著者の期待通りに解決できるようにするため。
- 各ページごとにflex行の独立スタックへ再構成することを任意にし、 サンプルアルゴリズムの課題を明記。 (6855)
- プロパティ定義表の値構文を新しいCSSブラケット範囲表記に更新し、 負値の制約を反映。(編集上の変更)
- アスペクト比の用語をpreferred aspect ratioに更新。 置換要素固有の用途を明確化。 aspect-ratioプロパティへの対応。
- aspect-ratioと自動最小サイズの相互作用を定義。 transferred size suggestionへ効果を適用し、 specified size suggestionの確定性から除外。 (Issues 6069、6794、changeset A、changeset B)
- 自動最小サイズの条件を、 算出値のoverflowで判定するように変更。 スクロールコンテナか否かではなく、 例えば置換要素など scrollable overflow値が 非スクロール可能な使用値になるケースを回避。 (7714)
- 内容ベース最小サイズがアイテムサイズを非確定化しない例外規則は autoに限定され、 他の内在サイズキーワードには影響しないことを明記。 (Issue 6457)
-
collapsed flex itemを
内在主サイズ計算から明示的に除外。
(Issue 5985)
max-content 主サイズのフレックスコンテナは アイテム自身の柔軟性が許す範囲で max-content寄与値を維持しつつ フレックスコンテナが取りうる最小サイズ。 非collapsedなflex itemのみ考慮:
ただし、複数行コンテナでは、 単純にそのmin-content寄与値の最大値が 非collapsed flex item全ての中で使われる。
-
flex base sizeの計算は
使用交差サイズに依存することを明確化。
(Issue 3736)
… flex base sizeは 使用 交差サイズ およびflex itemの内在アスペクト比から計算される。
- § 9.7 柔軟長の解決の記述を微調整し、誤りを修正。 (Issue 5179)
-
「レイアウト実行」はブロックレベルレイアウト規則を用いることを明確化。
(Issue 5188)
各アイテムの仮交差サイズを決定 in-flowのブロックレベルボックスとしてレイアウトするかのように 使用主サイズと 与えられた 利用可能スペースで…
-
フレックスコンテナの交差サイズ決定ステップを
どのフォーマッティングコンテキストでも動作するように書き直し、
ブロックレイアウト規則の仮定を排除。
(Issue 5190)
フレックスコンテナの使用交差サイズを決定 参加するフォーマッティングコンテキストの規則に従う。 内容ベースの交差サイズが必要なら、 フレックス行の 交差サイズの合計を使う。
-
アスペクト比算出対象のボックス記載を削除し、
aspect-ratioプロパティに合わせて新挙動を許容。
(Issue 5246)
then the flex base size is calculated from its used
innercross size and the flex item’s intrinsic aspect ratio. -
内容ベース最小サイズは
内在サイズ寄与値の一種であり、
[CSS-SIZING-3]の関連規則の影響を受けることを明記。
(Issue 5665)
注: 内容ベース最小サイズは内在サイズ寄与値の一種であり、 CSS Sizing 3 § 5.2 内在寄与値の規定が適用される。
- space-*キーワードの負の空きスペース時のフォールバック整列にsafeを適用。 (Issue 10154)
- 内容ベース最小サイズの定義を読みやすく改稿。(編集上の変更)
- 付録B: -webkit- レガシープロパティを追加し、
Web互換性のために必要なflexレイアウトプロパティの
-webkit-
エイリアスを記載。 (Issue 5634) - ブロック化規則を算出値で記述し直し。 (Issue 4065)
- その他細かな編集修正・明確化、
2017年10月16日CR以降の変更点
コメント対応状況も公開されています。
- フレックスアイテムのブロック軸マージンとパディングについて、 ブロック寸法で解決する選択肢を削除し、 ブロックと同様にインライン寸法で解決することが必須になりました。 (Issue 2085)
-
フレックスアイテムのmin-content寄与値をpreferred
sizeで下限し
(Issue 2353)、
関連する表現をより正確に修正。
主サイズのmin-content寄与値は、 フレックスアイテムの 外側min-contentサイズ と外側preferred size(そのwidth/height、適切な方)、 かつそれがautoでない場合 のうち大きい方で、 flex base sizeを最大値(伸長不可の場合)、 または最小値(縮小不可の場合)としてクランプし、 さらにmin/max主サイズプロパティでクランプします。
主サイズのmax-content寄与値は、 フレックスアイテムの 外側max-contentサイズと 外側
指定preferred サイズ (そのwidth/height、適切な方,) かつそれが確定値autoでない場合 のうち大きい方で、 flex base sizeを最大値(伸長不可の場合)、 または最小値(縮小不可の場合)としてクランプし、 さらにmin/max主サイズプロパティでクランプします。 -
flex-basis: contentの定義に説明と参照を追加。
自動サイズ自動サイズ を示し、フレックスアイテムの内容に基づく。 (通常はmax-contentサイズと同等だが、 アスペクト比・内在サイズ制約・直交フローの調整が加わる場合がある。 詳細は§ 9 フレックスレイアウトアルゴリズム参照。) - autoキーワードのmin-width・min-heightの定義を [CSS-SIZING-3]へ移動。 フレックスアイテムの自動最小サイズ定義は本仕様に残存。 (Issue 1920, Issue 2103)
- autoのmin-width・min-heightの計算方法を 常に自身に算出されるように修正(CSS2 display型の場合は解決値がゼロのまま)。 (Issue 2230, Issue 2248)
- min/maxクランプは使用値によることを明記。 テーブルのautoレイアウトではmin-contentサイズで下限される。 (Issue 2442)
-
break伝播は算出値に影響せず
orderで変更された文書順が使われることを明確化。
(Issue 2614)
分断されたフレックスコンテナの厳密なレイアウトはこのFlexible Box Layoutレベルでは定義されていませんが、 コンテナ内部の分割は以下のルールに従います (orderで変更された文書順で解釈) :
-
rowフレックスコンテナでは、
フレックスアイテム上のbreak-before・break-after値はフレックス行に伝播されます。
最初の行のbreak-before値、
最後の行のbreak-after値は
フレックスコンテナに伝播されます。
注: break伝播 (text-decorationの伝播と同様) は算出値には影響しません。
-
rowフレックスコンテナでは、
フレックスアイテム上のbreak-before・break-after値はフレックス行に伝播されます。
最初の行のbreak-before値、
最後の行のbreak-after値は
フレックスコンテナに伝播されます。
-
自動最小サイズが直接ゼロになる場合は
内容ベース最小サイズでなく、
非確定にはならないことを明記。
要素の内在サイズ計算時 (例:要素のmin-contentサイズ)、
この値内容ベース最小サイズ により、その軸のサイズが非確定になる (たとえばwidthプロパティが確定サイズでも)。 - 自動最小サイズの編集改善。 (Issue 2385)
- その他細かな編集修正および明確化(他のCSSモジュール更新に合わせた語彙の修正等を含む)。
2016年5月26日CR以降の変更点
コメント対応状況も公開されています。
主要な変更・バグ修正
-
フレックス係数が本来意図されていたフレックスアイテムサイズの絶対比を正しく表現できるようにするため、
アイテムのflex base
size算出時、content-boxサイズのゼロ下限を廃止。
この比率にはflex base sizeがゼロとなる必要があるが、
これまではマージン・ボーダー・パディングもゼロの場合のみ可能だった。
(仮主サイズや最終サイズ算出時にはmin/maxサイズ制約とともにゼロ下限は残る。)
(Issue 316)
flex base size算出時、 アイテムのmin/max主サイズプロパティは無視される(クランプされない)。 さらに、box-sizing適用時にcontent-boxサイズをゼロで下限する計算も無視される。 (たとえばサイズゼロ・パディング正・box-sizing: border-box指定時は 外側flex base sizeがゼロになり、内側flex base sizeは負になる。)
仮主サイズは、アイテムのflex base sizeを min/max主サイズプロパティでクランプ (およびcontent-boxサイズのゼロ下限) したものです。
min/max違反の修正。 非凍結アイテムの目標主サイズをmin/max主サイズプロパティでクランプ し、content-boxサイズをゼロ下限で切り詰める 。 アイテムの目標主サイズがこれで小さくなった場合max違反、 大きくなった場合min違反。
-
shrink-to-fitコンテナ内の空のフレックスアイテムが
指定サイズがあってもゼロに潰れないように、
max-content寄与値算出時に指定サイズを考慮するよう修正。
(Issue 1435)
主サイズのmax-content寄与値は 大きい方(outer max-contentサイズと指定サイズ(width/height、適切な方、確定値の場合)) であり、 flex base sizeを最大値(伸長不可の場合)、 または最小値(縮小不可の場合)としてクランプし、 さらにmin/max主サイズプロパティでクランプします。
-
少なくとも2つの実装が、flex basisが非確定でも
パーセンテージが解決されるようになっていたため、
確定flex basis必須という条件を削除。
(Issue 1679)
フレックスアイテムが 確定なflex basisを持ち、フレックスコンテナが 確定な主サイズを持つ場合、そのフレックスアイテムの フレックス処理後の主サイズは確定とみなす (同じ行内のフレックスアイテムの非確定indefinite サイズに依存する場合もある)。 -
実装容易化のため、auto値のalign-selfは常に自身に算出されるよう修正。
関連する絶対位置要素用修正も参照。
(Issue 440, Issue 644)
算出値: autoは親のalign-items値に算出される。それ以外は指定値通り絶対配置要素ではautoは自身になる。 他の要素ではauto(align-self)は親のalign-items値(親なしの場合はstretch)に算出される。 - 直交フローのフレックスアイテムやベースラインを持たない フレックスアイテムが 境界ボックスからアライメントベースラインを合成するよう変更。 (Issue 373)
-
交差軸ベースライン集合定義の主軸/交差軸の誤り修正。
(Issue 792)
それ以外の場合、フレックスコンテナは
主軸交差軸 のfirst/lastベースライン集合を持たない… -
フレックスアイテムとしてのテーブルに関する削除済み記述を復元。
匿名ボックス変更も参照。
(Issue 547)
display: tableのフレックスアイテムの場合、 テーブルラッパーボックスがフレックスアイテムとなり、 orderやalign-selfプロパティが適用される。 キャプションボックスの内容は テーブルラッパーボックスのmin-content/max-contentサイズ算出に寄与。 ただしwidth/height同様、 flexロングハンドは テーブルボックスには以下のように適用される: フレックスアイテムの最終サイズは、 テーブルラッパーボックスの端とテーブルボックスの内容端の距離を テーブルボックスのborder+padding領域とみなし、 テーブルボックスがフレックスアイテムであるかのようにレイアウトして算出。
-
絶対配置フレックスコンテナ子のstatic位置算出時、auto
marginをゼロ扱いすることを明確化。
(Issue 665)
この目的では、 align-self: autoはstartと同様に扱い、 autoマージンはゼロ扱い となる。
-
max主サイズプロパティによるクランプ時、
min主サイズプロパティで下限することを明記。
(Issue 361)
各行内で、 フレックスアイテムの max-content flex fractionの最大値を求める。 各アイテムのflex base sizeに flex grow factor (負値の場合はscaled flex shrink factor)と max-content flex fractionの積を加算し、 アイテムサイズをmaxおよびmin主サイズプロパティでクランプ
byします。 -
絶対配置子にorder非適用の編集漏れを追加。
(Issue 1439)
適用対象: フレックスアイテム およびフレックスコンテナの絶対配置子orderプロパティは
フレックスコンテナの子すべてフレックスアイテム の表示順を制御し、 ordinal groupに割り当てる。 …特に指定がない限り、将来の仕様でなければ このプロパティは
フレックスコンテナの子でないボックスフレックスアイテム には効果がありません。 -
フレックスコンテナのfirst/lastベースライン決定時に
flex-directionを考慮するよう修正。
(Issue 995)
このため、 フレックスコンテナのベースラインは以下のように決定されます (order およびflex-directionを考慮 ):
…
-
フレックスコンテナの
first/last開始側/終了側 フレックス行上の ベースライン整列参加する フレックスアイテムがいる場合、 フレックスコンテナのfirst/last主軸ベースライン集合は… -
それ以外で、フレックスコンテナに少なくとも1つフレックスアイテムがいる場合、
フレックスコンテナのfirst/last主軸ベースライン集合は
生成され、
アライメントベースラインの
first/last開始側/終了側 フレックスアイテムから… - それ以外の場合、フレックスコンテナはfirst/last主軸ベースライン集合を持たない…
…
-
フレックスコンテナに少なくとも1つフレックスアイテムがいる場合、
フレックスコンテナのfirst/last交差軸ベースライン集合は
生成され、
アライメントベースラインの
first/last開始側/終了側 フレックスアイテムから…
-
フレックスコンテナの
-
align-content: space-betweenの単一flex line時の挙動を
startと同一と定義。
(Issue 718)
行はフレックスコンテナ内で均等分配される。 余った空きスペースが負の場合 またはフレックスコンテナ内にflex lineが1つしかない場合 この値はflex-startと同一となる。
- 軸対応表の誤り修正。 (Issue 205)
- 自動最小サイズの定義(指定サイズもアスペクト比もないボックス)を復元。 前回書き直しで失われていたもの。 (Issue 671)
明確化
- 主サイズと交差サイズが、フレックスアイテムだけでなくフレックスコンテナにも定義されていることを確認した。 (Issue 981)
-
空間ナビゲーションに関する注の最後の明確化文を微調整。
(Issue 1677)
ブラウザ、支援技術、拡張機能を含むユーザーエージェントは、空間ナビゲーション機能を提供する場合がある。 このセクションは、そのような空間ナビゲーションモードで要素の並び順を決定する際に、order プロパティを尊重することを妨げるものではなく、 実際、その種の機能が動作するには考慮する必要がある。
しかし、逐次ナビゲーションの決定においてorderを用いながら、 それ以外では(フレックスレイアウトを含むがそれに限られないCSSの様々なレイアウト機能によって表現される)要素間の空間的関係を考慮しない UA は、非適合である。ただし、空間ナビゲーション機能において考慮すべき CSS プロパティは order だけ(ましてや主要なもの)ではない。 適切に実装された空間ナビゲーション機能は、空間的関係を変更し得る CSS のすべてのレイアウト機能を考慮する必要がある。 - その他の些細な編集上の改善。
2016年3月1日CR以降の変更点
Disposition of Comments も公開されています。
主要な変更とバグ修正
-
内在的な自動最小サイズを計算する際のパーセンテージの扱いを定義。
(Issue 3)
要素の内在サイズ(例:要素のmin-content サイズ)を計算する目的においては、 この値により、その軸の要素サイズは非確定となる (たとえば、そのwidth プロパティが確定サイズを指定していても)。 これは、当該サイズを基準に算出されるパーセンテージが auto として扱われることを意味する。
それでもなお、 いくつかの場合にパーセンテージの再解決のために追加のレイアウトパスが必要になる可能性はあるが、 この値(min-content、max-content、および fit-content([CSS-SIZING-3] で定義)と同様) は、アイテム内のパーセンテージサイズの解決を妨げるものではない。
- definite と indefinite の参照を、このモジュール内での内包定義ではなく、より正確な [CSS-SIZING-3] の定義に切り替え。 (Issue 10)
- フレックスボックスの絶対配置子は、order プロパティに反応しないように変更。 (Issue 12)
- § 8.5 Flex Container Baselines を更新し、ベースライン集合とラストベースライン整列に対応。 (Issue 13))
明確化
-
§ 9.8
確定サイズと非確定サイズ における確定性の追加ケースへの相互参照を追加。
(Issue 2)
フレックス行の交差サイズが決定されたら、 自動サイズのフレックスコンテナ内のアイテムもレイアウトの目的では 確定とみなされる。ステップ11参照。
-
解決不能なパーセンテージのflex-basis値が
content に変換される際の文言を改善。
(Issue 6)
auto と content (上記定義)以外のすべての値に対し、flex-basis は横書きモードにおける width と同様に解決される [CSS2]、 ただし、width において auto に解決される値は、 flex-basis においては代わりに content に解決される。 例えば、flex-basis のパーセンテージ値は フレックスアイテムの包含ブロック(すなわちその フレックスコンテナ)を基準に解決される。 その包含ブロックのサイズが非確定である場合、
主サイズ が auto(この場合 content として扱われる)になるのと同じ結果となるflex-basis の使用値は content となる 。 -
確定のflex-basisを持つ非柔軟アイテムには、確定サイズがあることを明確化。
(Issue 8, Issue 11)
フレックスアイテムは、 flex-grow と flex-shrink の両値が 0 のとき 完全非柔軟であり、 それ以外は柔軟である。
完全非柔軟なアイテムで、 確定の flex-basis を持つものの主サイズは、 定義上 確定である。
-
auto 値の定義を理解しやすく言い換え。
(Issue 9)
主軸において overflow がvisibleな フレックスアイテムにおいて、 そのアイテムの主軸最小サイズプロパティに指定された場合、
以下の表が最小サイズを示す …自動最小サイズを指定する。一般に、自動最小サイズは … 以下で定義される。
- 絶対配置子の静的位置を決定するセクションの表現をわずかに言い換え、分かりやすくした。
- アニメーション可能行の表記を調整し、キーワードのアニメーション性を明確化。
- その他の些細な編集上の改善。
2015年5月14日LCWD以降の変更点
Disposition of Comments も公開されています。
主要な変更とバグ修正
-
省略時の flex ショートハンドの 変更(flex-basis を省略したときの値)を 0 に差し戻し。
これは内在サイズの問題を解決するための苦肉の策であり、
§ 9.9 Intrinsic Sizes の正しい実装があれば不要(かつ悪影響)なため。
(Issue 13)
flex ショートハンドから省略された場合、その指定値は 0
%となる。 -
フレックスアイテムの決定を、(存在する場合でも)匿名ラッパーボックスではなく各要素自体に対して行うように変更。
(Issue 6)
display のいくつかの値は、元のボックスの周囲に匿名ボックスの生成を引き起こす。 フレックスコンテナの直接の子である最も外側のボックスが フレックスアイテム となる。 例えば、display: table-cell を持つ隣接する2つの子要素がある場合、 それらの周囲に生成される匿名のテーブルラッパーボックス [CSS2] が フレックスアイテム となる。
display: table のフレックスアイテムの場合、 テーブルラッパーボックスが フレックスアイテム となり、 order および align-self がそれに適用される。 いかなるキャプションボックスの内容も、 テーブルラッパーボックスの min-content / max-content サイズの計算に寄与する。 ただし、width と height と同様に、 flex のロングハンドはテーブルボックスには次のように適用される: フレックスアイテム の最終サイズは、 テーブルラッパーボックスの端とテーブルボックスの内容端の距離が テーブルボックスの border+padding 領域の一部であるかのようにレイアウトを行い、 テーブルボックスが フレックスアイテム であるかのように計算される。
注:一部の display の値は、通常、元のボックスの周囲に匿名ボックスの生成を引き起こす。 そのようなボックスが フレックスアイテム の場合は、まずブロック化されるため、 匿名ボックスの生成は起こらない。 例えば、フレックスアイテム が 2 つ隣接しており、 両方が display: table-cell の場合でも、 単一の匿名テーブルに包まれる代わりに、 2 つの別個の display: block の フレックスアイテム となる。
-
ボックスの min-width: auto によるサイズ調整は、
内部のパーセンテージサイズ決定時に参照されることを定義。
(Issue 3)
サイズ決定のループを防ぐため、 auto の min-height および max-height は、 ボックス内容のパーセンテージサイズの解決に影響しない。 例えば、パーセンテージ高さのブロックで、そのフレックスアイテムの親が height: 120em; min-height: auto の場合、フレックスアイテムの使用サイズに min-height が与える影響に関わらず、 height: 120em を基準に自身をサイズ決定する。いくつかの場合でパーセンテージの再解決のために追加のレイアウトパスが必要になり得るが、 min-width および min-height の auto 値は (min-content、 max-content、 および fit-content([CSS-SIZING-3] 定義)と同様)、 アイテム内のパーセンテージサイズの解決を妨げない。
-
非柔軟アイテムを扱えるように内在サイズ決定規則を修正。
(Issue 1)
min-content/max-content 寄与値(主サイズ) は、 フレックスアイテムの外側
仮主サイズ(それぞれ min-content/max-content 制約の下でサイズ決定されたとき)min-content/max-content 寄与値(主サイズ) は、 フレックスアイテムの 外側 min-content/max-content サイズであり、 伸長不可なら flex base size を最大値として、 縮小不可ならそれを最小値としてクランプし、 さらに min / max 主サイズプロパティでクランプする 。 -
フレックスコンテナの主軸内在サイズの誤りを修正。
(Issue 1)
max-content の 主サイズ は、フレックスコンテナが その max-content 寄与値(各 フレックスアイテムの)を維持できる範囲で取りうる最小サイズである:
-
各 フレックスアイテムについて、
その 外側 flex base size を
その max-content 寄与値から差し引く
。 次に、その結果を flex-grow 係数 で割る(下限 1)か、 結果が負の場合は scaled flex shrink 係数 で割る (必要なら flex-shrink 係数 は 1 で下限)。 その結果が 0 でない場合、 結果が正なら flex-grow 係数(下限 1)で割り、 結果が負なら scaled flex shrink 係数 で割る。 このとき flex-shrink 係数 は 1 で下限しておく。 これが当該アイテムの max-content flex fraction である。
-
各 フレックスアイテムについて、
その 外側 flex base size を
その max-content 寄与値から差し引く
-
フレックスコンテナの交差軸内在サイズの誤りを修正し、
マルチラインのカラムフレックスコンテナに対する一般的な min-content サイズのヒューリスティックを規定。
(Issue 12)
min-content / max-content の 交差サイズ は、 与えられた主軸の利用可能スペースと無限の交差軸の利用可能スペースに対してレイアウトを行った後の フレックスコンテナの 交差サイズ である。
単一行 の フレックスコンテナにおける min-content / max-content の 交差サイズ は、 その フレックスアイテム の min-content 寄与値 / max-content 寄与値 の最大値である(それぞれ)。
複数行 の フレックスコンテナの場合、 min-content / max-content の 交差サイズ は、 フレックスコンテナを 交差軸の min-content 制約 / max-content 制約 の下でサイズ決定したときに得られる 各フレックス行の交差サイズの合計である(それぞれ)。 ただし、フレックスコンテナが flex-flow: column wrap; の場合は、 まず min-content / max-content の 交差サイズ寄与値の最大値を フレックスアイテム 全体から(それぞれ)求め、 レイアウト中、各 フレックスアイテム に対して その値を交差軸の利用可能スペースとして用いる。
column wrap の フレックスコンテナに対するこのヒューリスティックは、 フレックスコンテナがとるべきサイズの妥当な近似を与える。 各フレックスアイテムは min(アイテム自身の max-content, 全アイテム中の min-content の最大値) に落ち着き、 各 フレックス行 は その行の最大の フレックスアイテム より大きくならない。 一部のケースで完全に適合するわけではないが、 完全に正しく行うのは非常に高コストであり、実用上は十分に機能する。
-
著者の意図した提示順をすべての表示モードで保持するため、
著者が明示的に異同期化を望む場合を除き、
プレゼンテーション順と DOM 順を同期させるよう著作ツールに明確な適合要件を追加。
(Issue 8)
著者の意図した順序をすべての提示モードで保持するために、 WYSIWYG エディタや Web ベースの著作支援を含む著作ツールは、 基盤となる文書ソースを並べ替えなければならず、 著者が明示的に、 視覚的順序と 異同期(スピーチやナビゲーションの順序を決定する文書順)にする意図を示さない限り、 並べ替えに order を用いてはならない。
例えば、ツールはフレックスアイテムのドラッグ&ドロップによる並べ替えと、 画面サイズ範囲ごとの代替レイアウト用メディアクエリの両方を提供するかもしれない。ほとんどの場合、並べ替えはすべての画面範囲に影響し、ナビゲーションおよびスピーチの順序にも影響すべきであるため、 ツールは DOM レイヤーでドラッグ&ドロップの並べ替えを行うだろう。 ただし場合によっては、著者が画面サイズごとに異なる視覚的順序を望むこともある。 ツールは、メディアクエリと order を組み合わせてこの機能を提供できるが、 最も小さい画面サイズの順序は基盤となる DOM 順序に結び付け (これは論理的な線形提示順である可能性が最も高いため)、 他のサイズ範囲では order によって視覚的提示順を決定する。
このツールは適合である。一方、ドラッグ&ドロップの並べ替えに常に order だけを使用するツール (その実装がどれほど簡便であっても)は非適合である。
-
将来の [CSS-ALIGN-3]
における拡張との一貫性のため、
絶対配置要素上では align-self および
justify-self の auto 値は自身に算出されると定義。
(Issue 5)
絶対配置要素では、 auto は自身に算出される。 その他の要素では、
すべての要素で、align-self の auto 値は、親要素の align-items の値に算出され、 親がない場合は stretch になる。 -
パーセンテージのマージンとパディングをそれぞれの軸に対して相対とする変更を差し戻し、
両方の挙動を許容するようにした。
(Issue 11, Issue 16)
フレックスアイテム上のパーセンテージのマージンとパディングは常にそれぞれの次元に対して解決され、 ブロックとは異なり、包含ブロックのインライン次元に対して常に解決されるわけではない。
フレックスアイテム上のパーセンテージのマージンとパディングは、次のいずれかで解決されます:
- 自身の軸(left/right のパーセンテージは width、top/bottom は height を基準)、または、
- インライン軸(left/right/top/bottom のパーセンテージはすべて width を基準)
ユーザーエージェントはこれら二つの挙動のいずれか一方を選択しなければなりません。
注:この差異は望ましくありませんが、実装間でも CSSWG 内でも合意がない現状を正確に反映しています。 CSSWG は将来的にブラウザがいずれかの挙動に収束することを意図しており、その時点で仕様が改訂されます。
著者はフレックスアイテム上のパディングやマージンにパーセンテージを使用することを極力避けるべきです。 ブラウザによって挙動が異なるためです。
-
フレックスアイテムのサイズ決定における min/max 制約の扱いを追加。
- フレックスアイテムの主軸および交差軸の利用可能スペースを決定する。 各次元について、 フレックスコンテナの内容ボックスのその次元が 確定サイズであれば、それを使用する。 フレックスコンテナが min または max-content 制約の下でサイズ決定されている場合、 その次元の利用可能スペースはその制約値とする。 それ以外の場合は、当該次元においてフレックスコンテナに利用可能なスペースから フレックスコンテナのマージン、ボーダー、パディングを差し引いた値を用いる。
-
フレックスコンテナの分割ルールにおける否定の誤りを修正:
以前の定義は、常に break-inside: avoid の挙動を示唆していた。
(Issue 5)
-
フレックスコンテナの最初の断片がページ上端にない場合、
かつ
一部のいずれの フレックスアイテムも収まらないページ残余スペースに収まらない場合、 断片全体を次ページに移動する。
-
フレックスコンテナの最初の断片がページ上端にない場合、
かつ
明確化
- 例中の誤り修正を含む、軽微な編集上の改善。
2014年9月25日LCWD以降の変更点
Disposition of Comments も公開されています。
主要な変更とバグ修正
- flex-basis: auto を元の意味に戻し、 自動的な内容ベースのサイズ決定を明示するための flex-basis: content キーワードを追加。 (Issue 10)
-
align-content の適用可否を、結果の行数ではなく折り返し可能性に依存させるよう変更。
(Issue 4)
フレックスコンテナに複数行がある場合、複数行 の フレックスコンテナ (たとえ 1 行のみでも)では、 各行の交差サイズは必要最小サイズ […](たとえ 複数行 のフレックスコンテナであっても)1 行しかない場合は、単一行 の フレックスコンテナでは、 行の 交差サイズ はフレックスコンテナの 交差サイズ と等しくなり、 align-content は効果を持たない。行を整列できるだけの 交差軸の空きスペースを持ち得るのは
複数行のフレックスコンテナ複数行 の フレックスコンテナ のみである。 というのも、単一行のフレックスコンテナ単一行 のフレックスコンテナ では唯一の行が自動的に空間を埋めるように伸びるからである。フレックスコンテナが
1 行だけ(たとえ複数行フレックスコンテナであっても)単一行 で、かつ 確定した 交差サイズを持つ場合、 フレックス行 の 交差サイズ は、フレックスコンテナの内側の 交差サイズ となる。フレックスコンテナが
1 行しかない場合(複数行フレックスコンテナであっても)、単一行の場合、 行の交差サイズは、コンテナの算出された min および max の交差サイズプロパティの範囲にクランプされる。 -
強制改ページの挙動を断定するテキストを削除し、断片化セクションへの参照に置き換え。
これにより仕様内の矛盾を解消。
(Issue 18)
連続するアイテムを一つずつ収集し、 次に収集するアイテムがフレックスコンテナの内側の主サイズに収まらなくなるまで続ける ( あるいは強制改ページに遭遇するまで 。§ 10 Fragmenting Flex Layout を参照) 。 […]
CSS2.1 の page-break-before / page-break-after、または CSS3 の break-before / break-after([CSS3-BREAK]) が分割を指定する場所では、改ページ(分割)が強制される。 -
flex-shrink 係数 は
flex base size
の外側ではなく内側に乗じるよう変更。
(Issue 9)
行上の未凍結アイテムごとに、 その flex-shrink 係数にその
外側内側 flex base size を掛け、 それを scaled flex shrink factor として記録する。 -
“neither” の欠落していた “n” を復活。
(Issue 6)
フレックスアイテムの 交差サイズプロパティが auto に算出され、 かつ n either(いずれかでも)交差軸のマージンが auto の場合、 フレックスアイテムは stretch される。
-
フレックスアイテムのフレックス後主サイズを確定と扱うには、フレックスコンテナの主サイズも確定であることが必要であることを明記。
(Issue 20)
[…もし] フレックスアイテムが 確定の flex-basis を持ち、 フレックスコンテナの 確定の 主サイズ も存在するなら、 フレックスアイテム の 主サイズ は 確定として扱われなければならない …
-
flex-basis が
content であることを、
指定サイズの定義要件から除外。
指定サイズが内在サイズより小さい場合は常に指定サイズが優先されるべきであり、
これは特に、例えば
<img src="…" width=40 height=40 title="100x100 image">
のような著者の期待を維持するために重要。 (Issue 25)アイテムの
算出された flex-basis が content であり、算出された 主サイズプロパティ が 確定である場合、 指定サイズ はそのサイズとなる - (display: table-cell など)匿名ブロックの生成が フレックスアイテムのブロック化の前 に発生するという要件を削除。 (代わりに、絶対配置や float の挙動と一貫するよう、すべての子はただちにブロック化される。)
明確化
-
flex base size がクランプされないことを明確化。
(Issue 21)
flex base size を決定する際には、 アイテムの min および max の主サイズプロパティは無視され (クランプは行われない)。
仮主サイズは、アイテムの flex base size を その min および max の主サイズプロパティに従ってクランプしたものです。
- テーブルラッパーボックスに関する注の規範的ステータスを復元。 前の草案で誤って変更されていた。 (Issue 2)
- display プロパティのロングハンドへの参照を削除。 CSS Display Level 3 から削除されるため。
-
不要なレイアウトパスを示唆しないよう文言を変更。
(Issue 22)
それ以外の場合、
レイアウトサイズ決定 を行い、 アイテムの使用 利用可能スペース に対して、 主サイズの代わりに使用 flex-basis を用いてサイズを決定します。 content の値は max-content として扱います。 - height: auto の定義において「clamped size」を「specified size」に改名。
- そのほか些細な修正。
2014年3月25日 LCWD以降の変更点
コメント対応状況も公開されています。
主要な変更と バグ修正
2014年3月25日のLast Call Working Draft以降に、 以下の重要な変更が行われました。
-
min-width: auto
の定義における誤り(否定の欠落、軸の未指定)を修正。
(Issues 11, 18, 30)
-
min-width: auto
の定義を拡張・改稿し、内在アスペクト比を持つアイテムの特別な扱いを追加。
(Issues 16 および 28)
フレックスアイテムで、 その overflow が visible でない場合、 最小サイズは次の表で与えられます:[表を参照]
このキーワードは、最小サイズとして次の小さい方を指定する:- min-content サイズ
- 算出された width/height(その値が 確定である場合)
-
min-width:
auto を調整し、flex-basis が主サイズプロパティから取得された場合にのみ、
算出された主サイズを最小値として適用。
(Issue 19)
… は次の場合に定義される: アイテムの算出 flex-basis が auto であり、 算出された主サイズプロパティが確定である …
-
ボックスの min-width: auto によるサイズ調整は、
内部のパーセンテージサイズ決定時には参照されないことを定義。
(Issue 27)
この変更は後に、逆の定義で差し戻されました。
サイズ決定のループを防ぐため、 auto の min-height および max-height は、 ボックス内容のパーセンテージサイズの解決には考慮されません。 例えば、パーセンテージ高さのブロックで、そのフレックスアイテムの親が height: 120em; min-height: auto の場合、フレックスアイテムの使用サイズに min-height が与える影響に関わらず、 height: 120em を基準にサイズ決定します。
- flex-basis に追加の main-size キーワードを導入し、 「主サイズプロパティからの参照」と「自動サイズ決定」の挙動をそれぞれ明示的に指定可能に。 (Issue 20) この変更は後に、代替提案(content キーワードの導入)によって差し戻されました。
-
フレックスアイテムで
確定の flex basis を持つものは、
主軸でも 確定と見なされるよう定義。
これにより、アイテム自体が柔軟であっても、パーセンテージサイズの子要素を解決可能に。
(Issue 26)
パーセンテージをフレックスアイテムの主サイズに対して解決する場合、 そのフレックスアイテムが確定の flex-basis を持つなら、 そのパーセンテージを解決する目的では主サイズを確定として扱い、 パーセンテージはフレックスアイテムのフレックス後の主サイズ(すなわち、以下のレイアウトアルゴリズムが当該 フレックスコンテナに対して完了し、アイテムの最終サイズが決まった後のサイズ)に対して解決しなければならない。
-
単一行のフレックスボックスの行の 交差サイズを、
コンテナ自身の min/max でクランプ(コンテナのサイズが非確定でも)。
(Issue 9)
-
フレックス行の使用交差サイズは、
直前の2ステップで得られた数値と 0 のうち最大のもの。
フレックスコンテナにフレックス行が 1 つしかない場合 (それが複数行のフレックスコンテナであっても)、 その行の交差サイズは、コンテナの算出された min および max の交差サイズプロパティの範囲にクランプする。 CSS 2.1 の min/max-width/height の定義がより広く適用されれば、 この挙動は自動的に導かれるはずである。
-
フレックス行の使用交差サイズは、
直前の2ステップで得られた数値と 0 のうち最大のもの。
- 新しい 柔軟長の解決 セクションの各種誤りを修正 (2014年3月の「flex: 0」と「flex: 1」の連続性確保のための書き直し参照) し、編集構成を旧Candidate Recommendation に合わせて差し戻し。 (Issues 3, 4, 8, 10, 15)
- フレックスコンテナの max-content サイズ決定 を、単なるアイテムの max-content サイズ合計ではなく、 フレックスの挙動を反映するよう「フレックス分率」ごとに正規化して算出するよう修正。 (Issue 39)
- flex プロパティを常にアニメーション可能とするよう更新。 0 と非 0 の不連続性が解消されたため。 (Issue 5)
明確化
2014年3月25日のLast Call Working Draft以降に、 次の重要な明確化も行われました。
-
フレックスコンテナの絶対配置子の静的位置がどのように計算されるかを、
CSS2.1 の概念と用語により密接に結びつけた説明を導入して明確化。
(Issue 12)
そのフレックスコンテナの絶対配置子の 静的位置はまず絶対配置子を除いてフレックスレイアウトを完全に行い、 その後各絶対配置子を配置することで計算される子が配置されるように決定され ます。これは、子自身とフレックスコンテナの双方が使用サイズの固定サイズボックスであると仮定し、 その子がフレックスコンテナ内の唯一のフレックスアイテムであるかのように配置する、というものです。言い換えると、フレックスコンテナの絶対配置子の静的位置は、 フレックスレイアウトの後に決定されます。子の static-position rectangle をフレックスコンテナの内容ボックスに設定し、 その矩形内で絶対配置の子を、 フレックスコンテナの justify-content の値と、 子自身の align-self の値に従って整列します。
-
order の、
フレックスコンテナの絶対配置子への適用を明確化。
(この挙動は後に撤回されました。)
フレックスコンテナの絶対配置子はフレックスレイアウトには参加しません
(並べ替えステップを除く)。 ただし、並べ替えステップ(order 参照)には参加し、 描画順に影響します。order プロパティは、フレックスコンテナ内で
フレックスアイテムフレックスコンテナの子 が現れる順序を制御します…将来の仕様で別途規定されない限り、 このプロパティは
フレックスアイテムでないフレックスコンテナの子でない ボックスには影響しません。注:フレックスコンテナの絶対配置子はフレックスレイアウトには参加しませんが、 任意のフレックスアイテムの子と共に並べ替えられます。
-
特別な挙動(確定性など)のために、
stretched なフレックスアイテムとは何かを明確化。
(Issue 25)
フレックスアイテムの 交差サイズ プロパティが auto に算出され、 かつ交差軸のいずれかのマージンが auto の場合、そのフレックスアイテムは stretched です。その
その使用値は …
2012年9月18日 Candidate Recommendation 以降の変更点
コメント対応状況も公開されています。
主要な変更と バグ修正
2012年9月18日のCandidate Recommendation 以降に、次の重要な変更が行われました:
-
新しい auto 初期値の
min-width/min-height の挙動を変更:
- overflow が visible かどうかを考慮。 overflow が明示的に扱われる場合、 全コンテンツを表示する十分なサイズを強制するのは混乱を招き不必要なため。
- 指定された width/height を考慮し、 暗黙の最小値が指定サイズを上回らないようにする。
- フレックスアイテムでは自身に算出されるようにする(min-content には算出しない)。 上記の変更により両者は同等ではなくなったため。
- auto
-
フレックスアイテムの主軸最小サイズプロパティの値として使用される場合、 このキーワードは最小値を min-content サイズとし、 アイテムがコンテンツを収められる十分な大きさになることを助けます。
これは、定義している仕様([CSS-SIZING-3])が十分に成熟した段階で、 min-content キーワードに算出されることを意図しています。
フレックスアイテムで、 その overflow が visible でない場合、 このキーワードは最小サイズとして次の小さい方を指定します:
- min-content サイズ
- 算出された width/height(その値が 確定である場合)
-
フレックスアイテム上のパーセンテージのマージン/パディングは、
ブロックのように包含ブロックのインライン次元ではなく、それぞれの次元に対して解決されると規定。
(Issue 16)
フレックスアイテム上のパーセンテージのマージンとパディングは、常にそれぞれの次元に対して解決されます。 ブロックとは異なり、包含ブロックのインライン次元に対して常に解決されるわけではありません。
-
単一行フレックスコンテナのサイズの確定性を、
伸長されたアイテムにも伝播。
(Issue 3)
伸長された フレックスアイテム を扱う特別なケースとして、 単一行 の フレックスコンテナが確定の 交差サイズを持つなら、 align-self: stretch の任意の フレックスアイテムの外側の 交差サイズはフレックスコンテナの内側の 交差サイズ(アイテムの min/max 交差サイズでクランプ)となり、 確定と見なされます。
-
伸長された自動高さのフレックスアイテム内のパーセンテージが解決されるよう、
再レイアウトパスを要求。
(Issue 3)
フレックスアイテムが align-self: stretch の場合、 その使用サイズを確定の 交差サイズとして扱い、 パーセンテージサイズの子が解決できるように、内容のレイアウトをやり直します。
このステップは、アイテムが内在アスペクト比を持つ場合でも、 フレックスアイテムの主サイズには影響しないことに注意してください。
-
内在アスペクト比が
主サイズ計算に反映されるように。
(Issue 8)
フレックスアイテムが … を満たす場合:
- 内在アスペクト比を持つ
- flex-basis が auto
- 確定の 交差サイズ を持つ
このとき、flex base size は、その内側の 交差サイズ と フレックスアイテムの内在アスペクト比から計算されます。
-
仮主サイズが
主サイズの計算で
交差サイズに依存するときの定義。
(Issue 23)
主サイズの決定に 交差サイズが必要(例:フレックスアイテムの 主サイズがブロック軸にあるとき)で、 その フレックスアイテムの 交差サイズが auto であり 確定でない場合、 この計算では fit-content を フレックスアイテムの 交差サイズとして用います。
-
フレックスコンテナの内在サイズを定義。
フレックスコンテナの主サイズを、主サイズプロパティを用いて決定する。
この計算では、フレックスコンテナの min-content 主サイズはアイテムの min-content サイズ寄与値の最大、 フレックスコンテナの max-content 主サイズはアイテムの max-content サイズ寄与値の合計。 アイテムの min-content/max-content 主サイズ寄与値は、 それぞれ min-content/max-content 制約のもとでサイズ決定されたときの外側仮主サイズ。この計算では、フレックスアイテム上の ‘auto’ マージンは ‘0’ として扱います。max-content の 主サイズは、 フレックスコンテナの max-content 寄与値の合計(主軸における)です。 min-content の 主サイズは、 単一行のフレックスコンテナでは アイテムの min-content 寄与値の合計(主軸における)、 複数行のコンテナではその最大値です。
min-content の 交差サイズ および max-content の 交差サイズは、 与えられた 主軸の利用可能スペース、 および無限の 交差軸の利用可能スペースに対してレイアウトを実行した後の フレックスコンテナの 交差サイズです。
min-content/max-content 寄与値(主サイズ) は、 フレックスアイテムが 仮主サイズとして持つ外側サイズで、 それぞれ min-content/max-content 制約の下でサイズ決定された場合です。
本セクションの用語の定義は、[CSS-SIZING-3] を参照してください。
-
フレックス行サイズ決定の抜けを修正し、
単一行のフレックスボックスが確定サイズを持たない場合に、
コンテンツに合わせてサイズ決定されるように。
フレックスコンテナに フレックス行 が 1 つだけ(複数行のフレックスコンテナであっても) かつ 確定の 交差サイズを持つ 場合、 フレックス行の 交差サイズ は フレックスコンテナの内側の 交差サイズです。
-
フレックス行のサイズは 0 で下限される。
(Issue 2)
フレックス行の使用交差サイズは、
より大きい最大 の値 と 0 のいずれかです(直前の2ステップで得られた数値のうち)。 -
フレックスアイテムは、ブロックではなくインラインブロックのように描画される。
(Issue 18)
フレックスアイテムは、
通常フローのブロックレベル要素インラインブロック [CSS2] とまったく同じように描画されます。 -
flex-basis を省略した
flex のショートハンド成分は、
0px ではなく 0% に解決されるように。
非確定サイズに対して解決されるパーセンテージは auto のように振る舞うため、
shrink-wrap されたフレックスコンテナでより良い挙動となります。
(Issue 20)
flex のショートハンドから省略された場合、その指定値は 0%
長さの 0です。 -
解決不能なパーセンテージの
flex base size は
auto と同様に扱うと定義。
flex-basis のパーセンテージ値は、 フレックスアイテムの包含ブロック(すなわちフレックスコンテナ)に対して解決されます。 その包含ブロックのサイズが 非確定の場合、その結果は
未定義主サイズ が auto の場合と同じ です。 -
グリッドレイアウトと一貫するよう、
フレックスコンテナの絶対配置子の静的位置を単純化。
(Issue 6)
フレックスコンテナの flex container の絶対配置子は、並べ替えステップ以外にはフレックスレイアウトに参加しません。
ただし、left と right の両方、または top と bottom の両方が auto の場合は、 それらのプロパティの使用値は、次のように静的位置から計算されます:
left と right の両方が auto の場合、 フレックスアイテム は その main-start または cross-start の辺 (横方向の軸にある方) が 静的位置 に一致するように配置されます。 top と bottom の両方が auto の場合、 フレックスアイテム は その main-start または cross-start の辺(縦方向の軸にある方)が 静的位置 に一致するように配置されます。
主軸において、
- 同じ フレックス行上に後続のインフローの フレックスアイテム がある場合、 静的位置はその フレックスアイテム の外側の main-start 辺です。
- それ以外で、同じ フレックス行上に先行するインフローの フレックスアイテムがある場合、 静的位置はその フレックスアイテム の外側の main-end 辺です。
- それ以外の場合、 静的位置は、 justify-content の値によって フレックスコンテナ上で決定され、 静的位置がサイズゼロのフレックスアイテムであるかのように扱われます。
交差軸において、
- 先行するインフローの フレックスアイテム がある場合、 静的位置は、そのアイテムがいる フレックス行 の cross-start 辺です。
- それ以外の場合、 静的位置は、最初の フレックス行の cross-start 辺です。
静的位置は、おおむねフレックスレイアウトに参加する 匿名の 0×0 の flex-start 整列のフレックスアイテムの位置に一致することを意図しています。 主な違いは、仮想アイテムの周囲では justify-content: space-around や justify-content: space-between によるパッキングスペースが抑制される点です: 後続に実際のアイテムがあるときはそれとの間で、 そうでなければ(あるなら)直前のアイテムとの間で抑制されます。
静的位置は、まず絶対配置子を除いてフレックスレイアウト全体を行い、 その後、それぞれの絶対配置子を 唯一の フレックスアイテム があるかのように フレックスコンテナ 内に配置して計算します。 子と フレックスコンテナ が、 それぞれ使用サイズの固定サイズボックスであると仮定します。
例えば、デフォルトでは、絶対配置の子の静的位置は main-start/cross-start の角に整列し、 これは justify-content と align-content のデフォルト値に対応します。 しかし、justify-content:center を フレックスコンテナに設定すると、 主軸方向で中央寄せになります。 - 柔軟長の解決 のアルゴリズムを変更し、 フレックス係数の合計が 0 に近づくときの挙動が連続的になるように(合計 ≥ 1 の場合は変更なし)。 (Issue 30) 旧セクションを 新セクションに置き換え。
明確化
以下の重要な明確化も行われました:
-
用語の混乱を避けるため、
フレックスコンテナの絶対配置の子を「フレックスアイテム」とは呼ばないことを明確化。(??)
Name: order Applies to: flex items および フレックスコンテナの絶対配置の子 フレックスアイテム およびフレックスコンテナの絶対配置の子 を、その order に従って並べ替えます。
-
float が算出された display に影響し(フレックスアイテムの決定より前に実行されるボックス修復ルールに影響し得る)ことを明確化。
(Issue 7)
float と clear は フレックスアイテム に影響せず 、フロー外にもなりません。 ただし、float プロパティは display プロパティの算出値に影響することで ボックス生成に影響し得ます。
-
「空白」の意味を明確化。
(Issue 26)
ただし、匿名のフレックスアイテムが white space (すなわち white-space プロパティの影響を受け得る文字) のみを含む場合、display:none であるかのように描画されません。
- テーブル匿名ボックス生成が、内部テーブル要素の算出値変換の代わりに起こることを明確化。
-
display-inside /
display-outside(display の新しいロングハンド:CSS Display Module Level 3 で定義)と、
フレックスアイテム決定の相互作用を明確化。
フレックスコンテナを生成する要素のインフローの子の 指定された display-outside が inline-level の場合、 それは block-level に算出されます。 (これは、任意のインラインの display 値を、ブロックの同等物に実質的に変換します。)
- overflow がフレックスコンテナに適用されることを明確化。
- ::first-line および ::first-letter 疑似要素は、 (フレックスコンテナがブロックコンテナでないため)フレックスコンテナには適用されないことを明確化。
-
stretch は交差サイズプロパティの
算出値が auto であるかをチェックすることを明確化。
これにより、(確定サイズに対して解決されないため)auto として振る舞うパーセンテージの交差サイズは
stretch されません。
(Issue 5)
- stretch
-
交差サイズプロパティ が フレックスアイテムにおいて
iscomputes to auto の場合、 その使用値は …
各フレックスアイテムの使用交差サイズを決定する。 フレックスアイテムが align-self: stretch の場合、 その交差サイズプロパティの 算出 値が auto であり、…
-
フレックスコンテナの主サイズの決定には、
参加しているフォーマッティングコンテキストの規則が用いられることを明確化。
フレックスコンテナの主サイズを決定する — それが参加するフォーマッティングコンテキストの規則を用いる —
— 主サイズプロパティを用いる —。 - 描画時には、 生の文書順ではなく order によって変更された文書順が用いられることを明確化。 (これはすでに order セクションに記載されていましたが、 描画順に関するセクションには明示されていませんでした。)
-
行分割を明確化し、負のサイズのフレックスアイテムや行末のゼロサイズアイテムを正確に扱うように。
(Issue 1)
それ以外の場合、 最初の未収集アイテムから開始して、 連続するアイテムを 1 つずつ収集し、 次に収集する 次のアイテムが フレックスコンテナの内側の主サイズに収まらなくなる最初の時点まで続ける、 あるいは強制分割に遭遇するまで続ける。 もし最初の未収集アイテムが収まらない場合は、 そのアイテムだけを行に収集する
収まるだけのフレックスアイテムを連続して、または強制分割に遭遇するまで (少なくとも 1 つは収集する)、 フレックスコンテナの内側主サイズに収集してフレックス行を作る。注:
主サイズがゼロのアイテムは、 フレックスコンテナの最初のアイテムであるか、 強制分割の直後でない限り、行頭には来ません。「できるだけ多く収集する」行は、それらゼロサイズのフレックスアイテム を、直前の行の末尾に収集します。 直前の非ゼロのアイテムがちょうど行を「埋めた」場合でも同様です。 -
フレックスコンテナの交差サイズは、
フレックスコンテナ自身の min/max プロパティで依然としてクランプされることを明確化。
(Issue 24)
プライバシーに関する考慮事項
本仕様に関して新たなプライバシーに関する考慮事項は報告されていません。
セキュリティに関する考慮事項
本仕様に関して新たなセキュリティに関する考慮事項は報告されていません。
テスト
the order property, now in css-display-3
- order-interpolation.html (ライブテスト) (ソース)
- flexbox-anonymous-items-001.html (ライブテスト) (ソース)
- flexbox_order-abspos-space-around.html (ライブテスト) (ソース)
- flexbox_order-box.html (ライブテスト) (ソース)
- flexbox-order-from-lowest.html (visual test) (ソース)
- flexbox_order.html (ライブテスト) (ソース)
- flexbox_order-noninteger-invalid.html (ライブテスト) (ソース)
- flexbox-order-only-flexitems.html (ライブテスト) (ソース)
- flexible-order.html (ライブテスト) (ソース)
- flex-item-z-ordering-001.html (ライブテスト) (ソース)
- flex-item-z-ordering-002.html (ライブテスト) (ソース)
- flex-order.html (ライブテスト) (ソース)
- flexbox_computedstyle_order.html (ライブテスト) (ソース)
- flexbox_computedstyle_order-inherit.html (ライブテスト) (ソース)
- flexbox_computedstyle_order-integer.html (ライブテスト) (ソース)
- flexbox_computedstyle_order-invalid.html (ライブテスト) (ソース)
- flexbox_computedstyle_order-negative.html (ライブテスト) (ソース)
- order-001.htm (visual test) (ソース)
- order-abs-children-painting-order-different-container.html (ライブテスト) (ソース)
- order-abs-children-painting-order.html (ライブテスト) (ソース)
- order-with-column-reverse.html (ライブテスト) (ソース)
- order-with-row-reverse.html (ライブテスト) (ソース)
- order-painting.html (ライブテスト) (ソース)
- order_value.html (ライブテスト) (ソース)
- order-computed.html (ライブテスト) (ソース)
- order-invalid.html (ライブテスト) (ソース)
- order-valid.html (ライブテスト) (ソース)
print stuff
- break-nested-float-in-flex-item-001-print.html (ライブテスト) (ソース)
- break-nested-float-in-flex-item-002-print.html (ライブテスト) (ソース)
- flexbox-break-request-horiz-001a.html (ライブテスト) (ソース)
- flexbox-break-request-horiz-001b.html (ライブテスト) (ソース)
- flexbox-break-request-horiz-002a.html (ライブテスト) (ソース)
- flexbox-break-request-horiz-002b.html (ライブテスト) (ソース)
- flexbox-break-request-vert-001a.html (ライブテスト) (ソース)
- flexbox-break-request-vert-001b.html (ライブテスト) (ソース)
- flexbox-break-request-vert-002a.html (ライブテスト) (ソース)
- flexbox-break-request-vert-002b.html (ライブテスト) (ソース)
- inline-flexbox-vertical-rl-image-flexitem-crash-print.html (ライブテスト) (ソース)
non-specific crashers
- contain-size-layout-abspos-flex-container-crash.html (ライブテスト) (ソース)
- frame-flex-item-crash.html (ライブテスト) (ソース)
- frameset-crash.html (ライブテスト) (ソース)
- grandchild-span-height.html (ライブテスト) (ソース)
- min-height-min-content-crash.html (ライブテスト) (ソース)
- mixed-containing-blocks-crash.html (ライブテスト) (ソース)
- negative-available-size-crash.html (ライブテスト) (ソース)
- negative-flex-margins-crash.html (ライブテスト) (ソース)
- negative-flex-rounding-crash.html (ライブテスト) (ソース)
- negative-item-margins-002-crash.html (ライブテスト) (ソース)
- negative-item-margins-crash.html (ライブテスト) (ソース)
- orthogonal-flex-item-crash.html (ライブテスト) (ソース)
- position-absolute-scrollbar-freeze.html (ライブテスト) (ソース)
- position-relative-with-scrollable-with-abspos-crash.html (ライブテスト) (ソース)
- relayout-input.html (ライブテスト) (ソース)
- remove-out-of-flow-child-crash.html (ライブテスト) (ソース)
- zero-content-size-with-scrollbar-crash.html (ライブテスト) (ソース)
need quirks mode
- fixed-table-layout-with-percentage-width-in-flex-item.html (ライブテスト) (ソース)
- percentage-size-quirks-002.html (ライブテスト) (ソース)
- percentage-size-quirks.html (ライブテスト) (ソース)
- quirks-auto-block-size-with-percentage-item.html (ライブテスト) (ソース)
css box 3 tests
- percentage-padding-001.html (ライブテスト) (ソース)
- percentage-padding-002.html (ライブテスト) (ソース)
- percentage-padding-003.html (ライブテスト) (ソース)
- percentage-padding-004.html (ライブテスト) (ソース)
- percentage-padding-005.html (ライブテスト) (ソース)
unsure/nonspecific
- remove-wrapped-001.html (ライブテスト) (ソース)
- remove-wrapped-002.html (ライブテスト) (ソース)
- scrollbars-auto-min-content-sizing.html (ライブテスト) (ソース)
- select-element-multiple.html (ライブテスト) (ソース)
- shrinking-column-flexbox.html (ライブテスト) (ソース)
- table-as-item-large-intrinsic-size.html (ライブテスト) (ソース)
- table-with-float-paint.html (ライブテスト) (ソース)