Flexレイアウトの完全ガイド

Flexレイアウトの概要

2009年にW3Cが発表したFlexレイアウトは、柔軟で応答性のあるWebページ構築を実現するための新たなレイアウトモデルです。現在ではすべての主要ブラウザがサポートしており、安全に利用できます。

Flexレイアウトの基本原理

Flexible Boxの略称であるFlexは、フレキシブルなボックスモデルを提供します。任意のHTML要素をFlexコンテナとして設定可能です。

.flexContainer {
  display: flex;
}

重要な用語定義

Flexレイアウトには2つの主要な要素があります:

1. フレックスコンテナ

  • Flexレイアウトを適用した要素を指し、通常「コンテナ」と呼ばれます
  • デフォルトでは水平方向(X軸)のメイン軸と垂直方向(Y軸)のクロス軸が存在します
  • 内部の要素はデフォルトで水平方向に配置され、自動的に折り返しはしません

2. フレックスアイテム

コンテナ内の直下の子要素は自動的にFlexアイテムとなり、「アイテム」と呼ばれます。

コンテナのプロパティ設定

1. アイテムの配置方向 - flexDirection

.flexContainer {
  flexDirection: row | rowReverse | column | columnReverse;
}
  • row: 水平方向(左から右)に配置(デフォルト)
  • rowReverse: 水平方向(右から左)に配置
  • column: 垂直方向(上から下)に配置
  • columnReverse: 垂直方向(下から上)に配置

2. 自動折り返し制御 - flexWrap

デフォルトではすべてのアイテムが1行に並びますが、必要に応じて折り返しを設定できます。

.flexContainer {
  flexWrap: noWrap | wrap | wrapReverse;
}
  • noWrap: 折り返さない(デフォルト)
  • wrap: 折り返し、最初の行が上部に配置
  • wrapReverse: 折り返し、最初の行が下部に配置

3. 配置と折り返しのショートハンド - flexFlow

flexDirectionとflexWrapの組み合わせショートハンドで、デフォルト値は「row noWrap」です。

.flexContainer {
  flexFlow: <flexDirection> <flexWrap>;
}

4. メイン軸方向の配置 - justifyContent

水平軸(X軸)または垂直軸(Y軸)に沿った配置を制御します。

.flexContainer {
  justifyContent: flexStart | flexEnd | center | spaceBetween | spaceAround;
}
  • flexStart: 左揃え(デフォルト)
  • flexEnd: 右揃え
  • center: 中央揃え
  • spaceBetween: 両端揃え、アイテム間のスペースは均等
  • spaceAround: 周囲に均等なスペースを配置

5. クロス軸方向の配置 - alignItems

メイン軸がX軸の場合は垂直方向、Y軸の場合は水平方向の配置を制御します。

.flexContainer {
  alignItems: stretch | flexStart | flexEnd | center | baseline;
}
  • stretch: 高さが指定されていない場合、コンテナ全体を埋める(デフォルト)
  • flexStart: コンテナの上部に揃える
  • flexEnd: コンテナの下部に揃える
  • center: コンテナの中央に揃える
  • baseline: テキストのベースラインで揃える

6. 複数行の配置 - alignContent

複数行が存在する場合の行全体の配置方法を定義します。単一行の場合には効果がありません。

.flexContainer {
  alignContent: flexStart | flexEnd | center | spaceBetween | spaceAround | stretch;
}

アイテムのプロパティ設定

1. 表示順序 - order

orderプロパティでアイテムの表示順序を指定します。数値が小さいほど前に配置されます。

.flexItem {
  order: <整数>;
}

2. 空き領域の拡大割合 - flexGrow

空き領域がある場合の拡大比率を定義します。

.flexItem {
  flexGrow: <数値>; /* デフォルトは0 */
}
  • デフォルト0: 空き領域があっても拡大しない
  • すべてが1の場合: 空き領域を均等に分配
  • 特定アイテムが2の場合: 他のアイテムの2倍の空間を占有

3. 空き領域の縮小割合 - flexShrink

スペースが不足した際の縮小比率を定義します。

.flexItem {
  flexShrink: <数値>; /* デフォルトは1 */
}
  • デフォルト1: スペース不足時に縮小
  • すべてが1の場合: 等比率で縮小
  • 特定アイテムが0の場合: 縮小しない

4. 初期サイズ - flexBasis

余白を分配する前のアイテムの初期サイズを定義します。

.flexItem {
  flexBasis: <長さ> | <パーセンテージ> | auto; /* デフォルトはauto */
}
  • auto: アイテムの元のサイズを使用
  • 長さ: 固定サイズを指定(例: 300px)
  • パーセンテージ: 親コンテナに対する割合

5. 伸縮とサイズのショートハンド - flex

flexGrow、flexShrink、flexBasisのショートハンドプロパティです。

.flexItem {
  flex: none | [ <flexGrow> <flexShrink>? || <flexBasis> ]
}
  • デフォルト: 0 1 auto
  • 便利なショートカット: auto (1 1 auto) と none (0 0 auto)

6. 個別配置 - alignSelf

特定のアイテムに対してalignItemsとは異なる配置を指定できます。

.flexItem {
  alignSelf: auto | flexStart | flexEnd | center | baseline | stretch;
}
  • auto: 親要素のalignItemsプロパティを継承

タグ: CSS flexbox Layout responsive-design web-development

6月8日 20:04 投稿