0Pricing
Frontend Academy · レッスン

Flexbox と Grid の組み合わせ

ページ全体のレイアウトには Grid、コンポーネント単位の配置には Flexbox を使い分け、それぞれのツールを選ぶべき場面を理解します。

「Flexbox と Grid の組み合わせ」はCoddyKit上の無料Frontend Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはFrontend Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Frontend Academyコースには全4レッスンが含まれています。

相補的なツール

FlexboxとGridは競合するものではなく、連携して使うように設計されています。一般的なパターンは、ページ全体の大まかな構造にCSS Gridを使い、各グリッド領域の内部でコンポーネントの内容を配置するためにFlexboxを使う方法です。

GridによるページレイアウトとFlexによるコンポーネント配置

Gridでページ全体の基本構造を定義します。各グリッド領域の内部では、コンポーネント単位の配置にFlexboxを使います。たとえば、ナビゲーションリンクを横一列に並べたり、カードの内容を縦方向に並べたりできます。

/* Page skeleton */
body {
  display: grid;
  grid-template-areas: 'header' 'main' 'footer';
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

/* Component inside grid area */
header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

カードグリッドのパターン

典型的なパターンは、カードのレイアウトにGridを使い、各カードの内部レイアウトにFlexを使う方法です。これによりカード同士をグリッド上で揃えながら、内部の要素(画像、タイトル、本文、フッター)を正しく縦に並べられます。

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 24px;
}
.card {
  display: flex;
  flex-direction: column;
  border-radius: 8px;
  overflow: hidden;
}
.card-body { flex: 1; }  /* push footer down */

ナビゲーションバーのパターン

一般的なナビゲーションバーでは、両方を組み合わせます。ナビゲーション自体をFlexコンテナーにして、ロゴとリンクを配置します。リンク部分を別のFlexコンテナーにすることもあります。メガメニューでは、複数列のレイアウトにGridを使う場合があります。

Holy Grailレイアウト

「Holy Grail」レイアウト(ヘッダー、3列の中央部分、フッター)は、現在ではGridで簡単に実現できます。左サイドバー、メイン領域、右サイドバーの3列をGridの列として定義し、それぞれの内部にはFlexboxを使います。

.page {
  display: grid;
  grid-template:
    'header header header' auto
    'left   main   right'  1fr
    'footer footer footer' auto
    / 200px 1fr 200px;
  min-height: 100vh;
}

すべてを中央揃え — GridとFlex

GridとFlexboxはどちらも、コンテンツを完全に中央揃えできます。Gridではplace-items: center(align-itemsとjustify-itemsの短縮記法)を使います。Flexではjustify-content: center; align-items: centerを使います。

.center-grid {
  display: grid;
  place-items: center; /* centers both axes */
  min-height: 100vh;
}

.center-flex {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
}

レスポンシブなサイドバーレイアウト

モバイルでは1列にして、ナビゲーションを上部に配置します。タブレット以上では、サイドバーとコンテンツを横並びにします。Gridならこの構成を宣言的に定義でき、メディアクエリでtemplate-areasを変更するだけです。

アイコンとテキストのパターン

アイコンをテキストの横に配置するのは、非常によくある小さなレイアウトです。1行に並べて整列するため、Flexboxが最適です。

.alert {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}
.alert-icon { flex-shrink: 0; width: 20px; }
.alert-body { flex: 1; }

どちらを選ぶか

Gridを使う場合:行と列の両方で考えるとき、トラックをまたいでアイテムを揃える必要があるとき、ページの基本構造を作るとき。Flexを使う場合:1方向で考えるとき、アイテムを縮小・拡大させたいとき、ボタンを横一列に並べたりアイテムを縦に積み重ねたりするときです。

過度に複雑にしない

複雑なグリッドよりも、max-widthとmargin: autoを設定したシンプルなブロック要素のほうが適している場合があります。すべてのレイアウトにGridが必要なわけではありません。目的を達成できる最もシンプルなツールを使いましょう。

レイアウトの問題を調査する

DevToolsでElementsパネルのgrid/flexバッジをクリックすると、グリッド線やFlexアイテムの輪郭を重ねて表示できます。見えないレイアウト構造を可視化できるため、配置のずれの原因を特定するうえで非常に役立ちます。

確認問題

ページレベルとコンポーネントレベルのレイアウトで、それぞれ最も一般的に使われるレイアウトツールの組み合わせはどれですか?

まとめ:GridとFlexの組み合わせ

GridとFlexboxは相補的なツールです。2次元のページ構造にはGridを使います。1次元のコンポーネント内部にはFlexboxを使います。グリッドにplace-items: centerを設定すると、すべてを中央揃えできます。カード本文にflex-direction: columnとflex: 1を設定すると、カードのフッターを下へ押し下げられます。DevToolsのオーバーレイバッジで問題を調査しましょう。

よくある質問

「Flexbox と Grid の組み合わせ」レッスンは無料ですか?

はい。「Flexbox と Grid の組み合わせ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Frontend Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Frontend Academyコースには全4レッスンが含まれています。

「Flexbox と Grid の組み合わせ」で何を学びますか?

ページ全体のレイアウトには Grid、コンポーネント単位の配置には Flexbox を使い分け、それぞれのツールを選ぶべき場面を理解します。 ブラウザで直接実行するハンズオンコードでFrontend Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Frontend Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのFrontend Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Flexbox と Grid の組み合わせ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このFrontend Academyレッスンでコードを書いて実行できますか?

はい。すべてのFrontend Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Flexbox徹底入門: 配置、折り返し、順序
  2. CSS Grid:template-areas・auto-fit・minmax
  3. Flexbox と Grid の組み合わせ
  4. テーマ設定のための CSS 変数
← Frontend Academyに戻る