サイズ、スペース、単位
Taffy レイアウトは利用可能なスペースとサイズ制約で駆動されます。このモデルを理解することで、レイアウトを予測可能にします。
利用可能なスペース
computeLayout の 2 番目の引数が利用可能なスペースを定義します:
Loading Preview…
許可される値
number: 絶対サイズ(通常はピクセル)"min-content": 最小コンテンツサイズ"max-content": 最大コンテンツサイズ
"auto" はスタイル寸法に使う値で、AvailableSpace では使えません。
ボックスモデル
boxSizing のデフォルトは BoxSizing.BorderBox で、スタイル寸法に padding と border が含まれます。BoxSizing.ContentBox ではスタイル寸法がコンテンツボックスを指定し、最終的な Layout.size は引き続きボーダーボックスのサイズになります:
┌─────────────────────────┐ │ Margin │ │ ┌───────────────────┐ │ │ │ Border │ │ │ │ ┌─────────────┐ │ │ │ │ │ Padding │ │ │ │ │ │ Content │ │ │ │ │ └─────────────┘ │ │ │ └───────────────────┘ │ └─────────────────────────┘
- 計算結果の
Layout.sizeには padding + border が含まれる - margin は外部スペーシング
パーセンテージ
パーセントサイズは、そのレイアウトで与えられる包含領域を基準に解決されます。通常フローでは親のコンテンツボックス、Grid アイテムでは配置先のグリッド領域、絶対配置では親の配置領域が基準になります。基準寸法が未確定の場合は、数値に解決できない段階もあります。次の例は通常の Flexbox の子です:
Loading Preview…
margin、padding、border のパーセント値は、上下の辺も含めて包含領域の幅を基準にします。inset の上下は高さ、左右は幅を基準にするため、同じパーセントでもプロパティにより基準が異なります。
よくある落とし穴
- サイズ指定も測定コンテンツもない空のリーフは、利用可能なスペースを与えるだけではその大きさに広がらない
"auto"のサイズはレイアウトアルゴリズム、コンテンツ、他の制約で決まる- コンテンツ測定コールバックは
computeLayoutWithMeasure()で渡す。ノードの context は任意で、"max-content"だけではコールバックは登録されない