フレックスボックスの配置制御
フレックスボックスの配置制御は、justify-content と align-items の2つの主要なプロパティによって行われます。
軸と配置の関係
フレックスボックスでは、配置を制御する際に主軸(main axis) と 交差軸(cross axis) を意識することが重要です。
- justify-content: 主軸方向(通常は水平方向)のアイテム配置を制御
- align-items: 交差軸方向(通常は垂直方向)のアイテム配置を制御
justify-content: 主軸方向の配置
justify-content プロパティは、フレックスアイテムを主軸方向にどのように配置するかを指定します。 余剰スペースがある場合の分配方法を制御できます。
.flex-container {
display: flex;
justify-content: center; /* アイテムを中央に配置 */
}
justify-content の値
flex-start(デフォルト)
アイテムを主軸の開始位置に配置します。
.flex-container {
justify-content: flex-start;
}
flex-end
アイテムを主軸の終了位置に配置します。
.flex-container {
justify-content: flex-end;
}
center
アイテムを主軸の中央に配置します。
.flex-container {
justify-content: center;
}
space-between
最初のアイテムを開始位置に、最後のアイテムを終了位置に配置し、残りのアイテムを等間隔で配置します。
.flex-container {
justify-content: space-between;
}
space-around
各アイテムの周りに等しいスペースを配置します。アイテム間のスペースは、端のスペースの2倍になります。
.flex-container {
justify-content: space-around;
}
space-evenly
すべてのスペース(アイテム間、端)を等しく配置します。
.flex-container {
justify-content: space-evenly;
}
align-items: 交差軸方向の配置
align-items プロパティは、フレックスアイテムを交差軸方向にどのように配置するかを指定します。 アイテムの高さが異なる場合の配置方法を制御できます。
.flex-container {
display: flex;
align-items: center; /* アイテムを交差軸の中央に配置 */
}
align-items の値
stretch(デフォルト)
アイテムをコンテナの高さいっぱいに伸ばします。
.flex-container {
align-items: stretch;
}
(複数行)
flex-start
アイテムを交差軸の開始位置に配置します。
.flex-container {
align-items: flex-start;
}
(高さ異なる)
flex-end
アイテムを交差軸の終了位置に配置します。
.flex-container {
align-items: flex-end;
}
(高さ異なる)
center
アイテムを交差軸の中央に配置します。
.flex-container {
align-items: center;
}
(高さ異なる)
baseline
アイテムのベースライン(文字のベースライン)を揃えて配置します。
.flex-container {
align-items: baseline;
}
flex-direction との関係
justify-content は主軸の方向の配置、align-items は交差軸の方向の配置を制御しますので、 flex-direction の値によって影響を与える方向が変わります。
試してみよう
flex-direction、justify-content と align-items の組み合わせを試してみましょう。
(高さ異なる)
(小さめ)
演習課題
課題1: 水平中央配置
3つの要素を横一列に並べ、コンテナの中央に配置してください。
要件:
- 3つの要素が水平方向に並んでいる
- 要素全体がコンテナの中央に配置されている
- 要素間に適度な余白がある
解答例を見る
.container {
height: 200px;
background-color: #f0f0f0;
border: 2px solid #ccc;
display: flex;
justify-content: center;
align-items: center;
gap: 20px;
}
課題2: 完全中央配置
1つの要素をコンテナの完全な中央(水平・垂直ともに中央)に配置してください。
解答例を見る
.container {
height: 200px;
background-color: #f0f0f0;
border: 2px solid #ccc;
display: flex;
justify-content: center;
align-items: center;
}
課題3: 縦並び配置
3つの要素を縦一列に並べ、中央に配置してください。
解答例を見る
.container {
height: 300px;
background-color: #f0f0f0;
border: 2px solid #ccc;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 15px;
}