主軸方向の配置(justify-content)
justify-contentは、フレックスアイテムを主軸方向(デフォルトでは横方向)にどう配置するかを指定するプロパティです。ナビゲーションメニューやボタン配置など、要素の横並びレイアウトで頻繁に使用します。
justify-contentの主な値
- flex-start アイテムを主軸の開始位置に寄せる(デフォルト)
- flex-end アイテムを主軸の終了位置に寄せる
- center アイテムを主軸の中央に配置
- space-between アイテムを両端揃えで均等配置(最初と最後は端に配置)
- space-around アイテムの両側に均等な余白を配置
- space-evenly すべての余白を均等に配置
実際に試してみよう
以下のコードエディタで、.containerクラスのjustify-contentの値を変更して、アイテムの配置がどのように変わるか試してみてください。
以下のようなシチュエーションで使い分けると効果的です。
- flex-start 一般的なリスト表示やメニュー
- flex-end ログインボタンなど右寄せしたい要素
- center ロゴやタイトルの中央配置
- space-between ヘッダーのロゴとメニューなど両端配置
- space-evenly アイコンや画像の均等配置
交差軸方向の配置(align-items)
align-itemsは、フレックスアイテムを交差軸方向(主軸が横なら縦方向)にどう配置するかを指定するプロパティです。高さが異なる要素を綺麗に揃えたり、カード内のコンテンツを縦方向で整列させる際に活用します。
align-itemsの主な値
- stretch アイテムをコンテナーの高さいっぱいに伸ばす(デフォルト)
- flex-start アイテムを交差軸の開始位置に揃える
- flex-end アイテムを交差軸の終了位置に揃える
- center アイテムを交差軸の中央に配置
- baseline テキストのベースライン(文字の底辺の基準線)を揃える。異なるフォントサイズでも文字が自然に並ぶ
実際に試してみよう
以下のコードエディタで、.containerクラスのalign-itemsの値を変更して、アイテムの垂直方向の配置がどのように変わるか試してみてください。
この2つを組み合わせることで、要素を上下左右の好きな位置に配置できます。例えば、justify-content: centerとalign-items: centerで完全な中央配置が実現できます。
複数行の配置(align-content)
align-contentは、フレックスアイテムが複数行に折り返されたときの行全体の配置を制御します。
まず、アイテムを複数行に折り返すにはflex-wrap: wrapをコンテナーに指定します。
flex-wrapプロパティは、フレックスコンテナー内のアイテムがコンテナーの幅を超えたときに折り返すかどうかを指定します。
このプロパティを使うことで、アイテムがコンテナーの幅を超えたときに次の行へ折り返されるようになります。
- nowrap 折り返さない(デフォルト)
- wrap 折り返す
- wrap-reverse 逆方向に折り返す
この複数行レイアウトで、align-contentを使えば行全体の垂直方向の配置を美しく整えることができます。
align-contentの主な値
- flex-start 行を交差軸の開始位置に寄せる
- flex-end 行を交差軸の終了位置に寄せる
- center 行を交差軸の中央に配置
- space-between 行を均等配置(最初と最後は端に配置)
- space-around 行の両側に均等な余白を配置
- stretch 行をコンテナーの高さいっぱいに伸ばす(デフォルト)
実際に試してみよう
複数行レイアウトで、align-contentの値を変更して行全体の配置がどのように変わるか試してみてください。
この2つのプロパティは適用される範囲が異なります。
- align-items 各行内でアイテムをどう配置するか(行ごとに適用)
- align-content 複数行全体をコンテナー内でどう配置するか(コンテナー全体で適用)
単一行レイアウトではalign-itemsのみが機能し、flex-wrap: wrapで複数行になる場合はalign-contentも考慮する必要があります。
アイテムの伸縮(flex-grow / flex-shrink)
Flexboxでは、アイテムが余白を埋めるように伸びたり、スペース不足時に縮んだりする動作を制御できます。レスポンシブデザインで特に重要な機能です。
flex-grow(伸びる比率)
flex-growは、コンテナーに余白がある場合に、各アイテムがどれだけ伸びるかを指定します。
- flex-grow: 0 伸びない(デフォルト)
- flex-grow: 1 余白を均等に埋める
- flex-grow: 2 他のアイテムの2倍伸びる
実際に試してみよう
各アイテムのflex-growの値を変更して、余白の配分がどのように変わるか試してみてください。
flex-shrink(縮む比率)
flex-shrinkは、コンテナーのスペースが不足した場合に、各アイテムがどれだけ縮むかを指定します。
- flex-shrink: 0 縮まない
- flex-shrink: 1 スペース不足時に縮む(デフォルト)
- flex-shrink: 2 他のアイテムの2倍縮む
実際に試してみよう
各アイテムのflex-shrinkの値を変更して、縮み方の違いを確認してみてください。
以下のようなシチュエーションでよく使われます。
- メインコンテンツとサイドバー メインコンテンツに
flex-grow: 1、サイドバーは固定幅 - ナビゲーションメニュー 検索ボックスに
flex-grow: 1で残りスペースを埋める - カードレイアウト すべてのカードに
flex: 1で均等幅に
アイテムの基本サイズ(flex-basis)
flex-basisは、アイテムの初期サイズを指定します。widthやheightの代わりに使用することで、より柔軟な制御が可能になります。flex-growやflex-shrinkと組み合わせて使うことで、レスポンシブなレイアウトを実現できます。
flex-basisの主な値
- flex-basis: auto アイテムの内容に基づいたサイズ(デフォルト)
- flex-basis: 200px 固定サイズを指定
- flex-basis: 0 内容を無視して伸縮比率のみで計算
- flex-basis: 50% パーセント指定も可能
実際に試してみよう
各アイテムのflex-basisの値を変更して、初期サイズの違いを確認してみてください。
最も重要な違いは、flex-basisがflex-grow / flex-shrinkの伸縮計算に影響する基準サイズ である点です。
flex-basis(Flexbox専用)
flex-grow/flex-shrinkと連動し、伸縮の基準となるサイズを指定- 主軸方向のみ制御(
flex-direction: rowなら幅、columnなら高さ) - 指定がある場合、
width/heightより優先される
width/height(汎用プロパティ)
flex-basis: autoの場合に、基準サイズとして参照されるflex-basisに値を指定すると、その値で上書きされる- 主軸・交差軸に関係なく、幅と高さを個別に制御可能
Flexboxで伸縮させたいレイアウトではflex-basis(またはflexショートハンド)を、固定サイズにしたい場合はwidth/heightを使います。
flex ショートハンド
flexプロパティは、flex-grow、flex-shrink、flex-basisを一度に指定できる便利なショートハンドです。実務ではこのショートハンドを使用することが推奨されます。
よく使う値
- flex: 1
flex: 1 1 0と同じ(均等に伸縮) - flex: auto
flex: 1 1 autoと同じ(内容に応じて伸縮) - flex: none
flex: 0 0 autoと同じ(伸縮しない) - flex: 0 0 200px 固定幅200px、伸縮しない
書き方と意味
/* 3つの値を指定 */
flex: <flex-grow> <flex-shrink> <flex-basis>;
/* よく使うパターン */
flex: 1; /* 余白を均等に分配 */
flex: 2; /* 他の要素の2倍のスペースを取る */
flex: 0 0 200px; /* 固定幅200px */ 実際のレイアウトでflexショートハンドを使ったサイドバーとメインコンテンツの配置を試してみてください。
- コードが短く読みやすい
- デフォルト値が適切に設定される
- ブラウザ間の互換性が高い
- 意図が明確になる
個別アイテムの配置(align-self)
align-selfを使うと、特定のアイテムだけ交差軸方向の配置を変更できます。コンテナーのalign-itemsを上書きして、個別に配置を調整したい場合に便利です。
align-selfの主な値
- align-self: auto コンテナーの
align-itemsに従う(デフォルト) - align-self: flex-start このアイテムだけ開始位置に配置
- align-self: flex-end このアイテムだけ終了位置に配置
- align-self: center このアイテムだけ中央に配置
- align-self: stretch このアイテムだけ引き伸ばす
実際に試してみよう
各アイテムのalign-selfの値を変更して、個別に垂直位置を調整できることを確認してみてください。
プロフィールカードで、アバター画像だけ上揃え、名前やテキストは中央揃えなど、カード内の要素を個別に配置したい場合に活用できます。
アイテムの順序(order)
orderプロパティを使うと、HTMLの順序を変えずに表示順序を変更できます。レスポンシブデザインで、デバイスごとに要素の表示順を変えたい場合に特に有効です。
orderの主な値
- order: 0 デフォルトの順序
- order: -1 前に表示
- order: 1 後ろに表示
- order: 2, 3… さらに後ろに表示
実際に試してみよう
各アイテムのorderの値を変更して、HTMLの順序と表示順序が異なることを確認してみてください。
<div class="container">
<div class="item item-1">Item 1</div>
<div class="item item-2">Item 2</div>
<div class="item item-3">Item 3</div>
<div class="item item-4">Item 4</div>
</div> アクセシビリティを考慮しつつ、表示順序を変更したい場合に役立ちます。
- レスポンシブデザイン スマホとPCで要素の表示順序を変えたいとき
- 視覚的な順序変更のみ HTMLの構造は変わらないため、アクセシビリティには注意が必要
- タブキー順序は変わらない キーボード操作時はHTML順のまま
理解度チェッククイズ
Flexboxプロパティミニクイズ
.container {
display: flex;
___: center;
} .container {
display: flex;
flex-wrap: wrap;
height: 300px;
___: center;
} .item-1 { order: 0; }
.item-2 { order: ___; }
.item-3 { order: 0; } まとめ
- justify-content 主軸方向の配置(flex-start, center, space-between等)
- align-items 交差軸方向の配置(stretch, center, baseline等)
- align-content 複数行全体の配置(flex-wrap時のみ有効)
- flex-grow 余白の伸びる比率(0でデフォルト、1以上で伸びる)
- flex-shrink スペース不足時の縮む比率(1がデフォルト)
- flex-basis 伸縮の基準サイズ(widthより優先、flex-grow/shrinkと連動)
- flexショートハンド
flex: 1などで3つの値を一度に指定 - align-self 個別アイテムの交差軸配置を上書き
- order HTMLを変えずに表示順序を変更(アクセシビリティ注意)
次回は、これらのプロパティを活用した実践的なレイアウトパターン(ヘッダー、カードグリッド、サイドバーレイアウトなど)を学びます。