AI先生のロボットキャラクター
第2章 - セクション3

Flexboxの主要プロパティを使いこなそう

justify-content、align-items、flex-growで柔軟なレイアウト

女子生徒のアイコン

Flexboxの基本はわかりました!でも、もっと細かく配置を調整したいときはどうすればいいんですか?

AI先生のアイコン

いいね、次のステップに進む準備ができたね。Flexboxには、要素の配置を細かくコントロールできる強力なプロパティがたくさんあるんだ。

男子生徒のアイコン

例えば、ボタンを右端に寄せたり、真ん中に集めたりとかですか?

AI先生のアイコン

その通り。justify-contentalign-itemsを使えば、主軸方向や交差軸方向の配置を自由に調整できるよ。それにflex-growなどで要素の伸縮も制御できるんだ。まずは配置の制御から見ていこう。

主軸方向の配置(justify-content)

justify-contentは、フレックスアイテムを主軸方向(デフォルトでは横方向)にどう配置するかを指定するプロパティです。ナビゲーションメニューやボタン配置など、要素の横並びレイアウトで頻繁に使用します。

justify-contentの主な値

justify-contentの配置パターン
主軸方向(横方向)の配置を制御
flex-start(デフォルト)
1
2
3
flex-end
1
2
3
center
1
2
3
space-between
1
2
3
space-around
1
2
3
space-evenly
1
2
3
  • flex-start アイテムを主軸の開始位置に寄せる(デフォルト)
  • flex-end アイテムを主軸の終了位置に寄せる
  • center アイテムを主軸の中央に配置
  • space-between アイテムを両端揃えで均等配置(最初と最後は端に配置)
  • space-around アイテムの両側に均等な余白を配置
  • space-evenly すべての余白を均等に配置

実際に試してみよう

以下のコードエディタで、.containerクラスのjustify-contentの値を変更して、アイテムの配置がどのように変わるか試してみてください。

CSSコード:
プレビュー:
justify-contentの使い分け

以下のようなシチュエーションで使い分けると効果的です。

  • flex-start 一般的なリスト表示やメニュー
  • flex-end ログインボタンなど右寄せしたい要素
  • center ロゴやタイトルの中央配置
  • space-between ヘッダーのロゴとメニューなど両端配置
  • space-evenly アイコンや画像の均等配置

交差軸方向の配置(align-items)

align-itemsは、フレックスアイテムを交差軸方向(主軸が横なら縦方向)にどう配置するかを指定するプロパティです。高さが異なる要素を綺麗に揃えたり、カード内のコンテンツを縦方向で整列させる際に活用します。

align-itemsの主な値

align-itemsの配置パターン
交差軸方向(縦方向)の配置を制御
stretch(デフォルト)
1
2
3
flex-start
1
2
3
flex-end
1
2
3
center
1
2
3
baseline
1
2
3
  • stretch アイテムをコンテナーの高さいっぱいに伸ばす(デフォルト)
  • flex-start アイテムを交差軸の開始位置に揃える
  • flex-end アイテムを交差軸の終了位置に揃える
  • center アイテムを交差軸の中央に配置
  • baseline テキストのベースライン(文字の底辺の基準線)を揃える。異なるフォントサイズでも文字が自然に並ぶ

実際に試してみよう

以下のコードエディタで、.containerクラスのalign-itemsの値を変更して、アイテムの垂直方向の配置がどのように変わるか試してみてください。

CSSコード:
プレビュー:
justify-contentとalign-itemsの組み合わせ

この2つを組み合わせることで、要素を上下左右の好きな位置に配置できます。例えば、justify-content: centeralign-items: centerで完全な中央配置が実現できます。

複数行の配置(align-content)

align-contentは、フレックスアイテムが複数行に折り返されたときの行全体の配置を制御します。

まず、アイテムを複数行に折り返すにはflex-wrap: wrapをコンテナーに指定します。

flex-wrapプロパティとは

flex-wrapプロパティは、フレックスコンテナー内のアイテムがコンテナーの幅を超えたときに折り返すかどうかを指定します。


このプロパティを使うことで、アイテムがコンテナーの幅を超えたときに次の行へ折り返されるようになります。

  • nowrap 折り返さない(デフォルト)
  • wrap 折り返す
  • wrap-reverse 逆方向に折り返す

この複数行レイアウトで、align-contentを使えば行全体の垂直方向の配置を美しく整えることができます。

女子生徒のアイコン

align-itemsalign-contentの違いがよくわからないです…

AI先生のアイコン

align-itemsは各アイテム個別の配置、align-contentは行全体の配置を制御するんだ。複数行がある場合にのみ効果があるよ。

align-contentの主な値

  • flex-start 行を交差軸の開始位置に寄せる
  • flex-end 行を交差軸の終了位置に寄せる
  • center 行を交差軸の中央に配置
  • space-between 行を均等配置(最初と最後は端に配置)
  • space-around 行の両側に均等な余白を配置
  • stretch 行をコンテナーの高さいっぱいに伸ばす(デフォルト)

実際に試してみよう

複数行レイアウトで、align-contentの値を変更して行全体の配置がどのように変わるか試してみてください。

CSSコード:
プレビュー:
align-contentとalign-itemsの違い

この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の値を変更して、余白の配分がどのように変わるか試してみてください。

CSSコード:
プレビュー:

flex-shrink(縮む比率)

flex-shrinkは、コンテナーのスペースが不足した場合に、各アイテムがどれだけ縮むかを指定します。

  • flex-shrink: 0 縮まない
  • flex-shrink: 1 スペース不足時に縮む(デフォルト)
  • flex-shrink: 2 他のアイテムの2倍縮む

実際に試してみよう

各アイテムのflex-shrinkの値を変更して、縮み方の違いを確認してみてください。

CSSコード:
プレビュー:
flex-growと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の値を変更して、初期サイズの違いを確認してみてください。

CSSコード:
プレビュー:
flex-basisとwidth/heightの違い

最も重要な違いは、flex-basisflex-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-growflex-shrinkflex-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ショートハンドを使ったサイドバーとメインコンテンツの配置を試してみてください。

CSSコード:
プレビュー:
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の値を変更して、個別に垂直位置を調整できることを確認してみてください。

CSSコード:
プレビュー:
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>
CSSコード:
プレビュー:
orderの使いどころ

アクセシビリティを考慮しつつ、表示順序を変更したい場合に役立ちます。

  • レスポンシブデザイン スマホとPCで要素の表示順序を変えたいとき
  • 視覚的な順序変更のみ HTMLの構造は変わらないため、アクセシビリティには注意が必要
  • タブキー順序は変わらない キーボード操作時はHTML順のまま
男子生徒のアイコン

orderを使えば、スマホで見るときとPCで見るときで、メニューの位置を変えられるんですね!

AI先生のアイコン

そうだね。でも注意点として、スクリーンリーダーやキーボード操作では元のHTML順序が使われるから、アクセシビリティを考慮する必要があるよ。

理解度チェッククイズ

AI先生のアイコン

それでは、今日学んだ内容を確認するクイズに挑戦してみよう!

Flexboxプロパティミニクイズ

次のコードで、アイテムを横方向の中央に配置するために使うプロパティは?
.container {
  display: flex;
  ___: center;
}
justify-content
align-items
align-content
align-self
`flex-grow: 2`と`flex-grow: 1`が指定された2つのアイテムがある場合、余白の分配はどうなりますか?
1:2の比率で分配される
2:1の比率で分配される
均等に分配される
flex-grow: 2のアイテムのみが伸びる
次のコードで、複数行に折り返されたアイテムの行全体を垂直方向の中央に配置するには?
.container {
  display: flex;
  flex-wrap: wrap;
  height: 300px;
  ___: center;
}
align-items
justify-content
align-content
vertical-align
`flex-basis`と`width`の最も重要な違いは何ですか?
widthの方が優先度が高い
flex-basisはパーセント指定できない
flex-basisは交差軸方向も制御できる
flex-basisはflex-grow/flex-shrinkと連動する
次のコードで、item-2だけを他のアイテムより前に表示するには?
.item-1 { order: 0; }
.item-2 { order: ___; }
.item-3 { order: 0; }
0
-1
1
999
`flex: 1`は何の省略形ですか?
flex: 1 0 auto
flex: 0 1 auto
flex: 1 1 0
flex: 1 1 auto

まとめ

女子生徒のアイコン

justify-contentalign-itemsの組み合わせで、要素を好きな位置に配置できるんですね!複数行の場合はalign-contentも使えるし。

男子生徒のアイコン

flex-growflex-shrinkを使えば、レスポンシブなレイアウトが簡単に作れそうです。flexショートハンドで書くとコードもすっきりしますね。

AI先生のアイコン

その通り。Flexboxのプロパティを理解すれば、複雑なレイアウトも直感的に実装できるようになるよ。次は実際にこれらのプロパティを組み合わせて、実用的なレイアウトパターンを作ってみよう。

Flexboxの主要プロパティまとめ
  • 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を変えずに表示順序を変更(アクセシビリティ注意)

次回は、これらのプロパティを活用した実践的なレイアウトパターン(ヘッダー、カードグリッド、サイドバーレイアウトなど)を学びます。

学習チェック

このレッスンを理解できたら「完了」をクリックしてください。
後で見直したい場合は「未完了に戻す」で進捗をリセットできます。

レッスン完了!🎉

お疲れさまでした!