BLOG

Web制作スクールブログ

FlexboxとCSS Gridの違いとは?使い分け方をわかりやすく解説

Webサイトのレイアウトを組むときによく使われるのが、FlexboxとCSS Gridです。
どちらも要素を配置するためのCSSレイアウトですが、「何が違うの?」「どちらを使えばいいの?」と迷う方も多いのではないでしょうか。

私自身、以前はFlexboxを中心に使い、実制作でも多くのレイアウトをFlexboxで組んでいました。Flexboxを理解すれば、一般的なWebサイトで必要になるレイアウトの多くに対応できると感じています。一方で、制作を重ねる中でCSS Gridも取り入れるようになり、それぞれの得意なレイアウトに合わせて使い分けることで、よりシンプルに、整ったレイアウトを組めるケースがあることが分かりました。

また、実際のWeb制作ではFlexboxとCSS Gridのどちらか一方だけを選ぶのではなく、外側のレイアウトにはGrid、内部の要素配置にはFlexboxというように、組み合わせて使うこともあります。

この記事では、FlexboxとCSS Gridの基本的な違いから、それぞれに向いているレイアウト、実制作での使い分け方までわかりやすく解説します。

FlexboxとCSS Gridの違い

FlexboxとCSS Gridは、どちらもWebページのレイアウトを作るために使われるCSSの機能です。
どちらを使っても同じようなレイアウトを作れるケースは多いため、はじめのうちは「結局どちらを使えばいいの?」と迷いやすいかもしれません。

大きな違いとして、Flexboxは要素を横方向または縦方向に並べることを得意とし、CSS Gridは行と列を使ってレイアウト全体の枠組みを作ることを得意としています。

Flexboxは要素を並べるのが得意

Flexboxは、複数の要素を横並びにしたり、縦に並べたりするときに便利です。
たとえば、以下のようなレイアウトでは、Flexboxを使うとシンプルに実装できます。

  • 画像とテキストを横に並べる
  • ナビゲーションを横並びにする
  • ボタンを中央に配置する
  • カードの中でアイコンとテキストを並べる

また、flex-wrapを使えば要素を折り返すこともできるため、Flexboxだけでも多くのWebサイトのレイアウトを作ることができます。

CSS Gridは「列」を作るレイアウトが得意

CSS Gridは、複数の要素を一定の列数で整えて並べたいときに便利です。
たとえば、以下のようなレイアウトではCSS Gridが使いやすいでしょう。

  • カード一覧を3列や4列で並べる
  • 制作実績や商品などの一覧を等間隔で並べる
  • 画像ギャラリーを複数列で配置する
  • サービスや特徴など、同じ形式の要素を複数列に並べる

特に、複数の要素を「3列にする」「4列にする」というように、列を基準としてレイアウトを整えたい場合にCSS Gridの便利さが分かりやすくなります。

FlexboxとCSS Gridのレイアウトの違いを比較した図

たとえば、カードを3列で並べる場合を考えてみましょう。
Flexboxでも3列のカードレイアウトを作ることはできますが、カードの横幅を揃えながらgapで間隔を空ける場合、要素の横幅を計算して指定する必要が出てくることがあります。
3列の場合、カード同士の間には2つのgapが入るため、その分を差し引いて横幅を3等分しています。

/*-- flexbox レイアウト --*/
.card-list {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
}

.card {
  width: calc((100% - 48px) / 3);
}

一方、CSS Gridでは「3列にする」と指定すれば、列の幅を自動的に均等に分けることができます。
この場合、gapを考慮したうえで残った横幅を3列に分けてくれるため、カードごとの横幅を自分で計算する必要がありません。

/*-- Grid レイアウト --*/
.card-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

5つのカードを並べた場合でも、

□ □ □
□ □

のように3列の幅を保ったまま配置できます。

FlexboxとCSS Gridは「できる・できない」ではなく、得意なことが違う

Flexboxでも複数列のレイアウトを作ることはできますし、CSS Gridでも横並びのレイアウトを作ることができます。そのため、「このレイアウトは必ずFlexbox」「これは必ずGrid」と決まっているわけではありません。

使い分けを考えるときは、次のような考え方から始めると分かりやすいでしょう。

  • 要素同士を横・縦に並べたい → Flexbox
  • 複数の列や行を揃えて配置したい → CSS Grid

特にカード一覧のように、「3列」というレイアウトの枠組みを先に決めたい場合はCSS Gridが便利です。一方で、カード内部の画像・タイトル・ボタンなどを配置する場合はFlexboxが使いやすいこともあります。

実際のWeb制作では、どちらか一方だけを使うのではなく、それぞれの得意な部分を組み合わせてレイアウトを作ることもよくあります。

FlexboxとCSS Gridはどう使い分ける?

FlexboxとCSS Gridは、どちらか一方だけを使えばよいものではありません。
同じようなレイアウトをどちらでも作れる場合があるため、実際のWeb制作では「どちらの方が作りたいレイアウトをシンプルに表現できるか」を考えて選びます。

FlexboxとCSS Gridの使い分けに迷った場合は、作りたいレイアウトの特徴から考えると判断しやすくなります。まずは、以下の表を目安にしてみましょう。

※表は横にスクロールできます。

FlexboxとCSS Gridの使い分けの目安
作りたいレイアウト 選びやすい方法 理由

ナビゲーションや画像+テキストなど、横・縦方向に要素を並べる

Flexbox 1方向の要素配置や位置調整がしやすい

3列・4列のカード一覧など、複数の列を揃える

CSS Grid 列幅やgapをまとめて管理しやすい

要素が複数の行・列をまたぐ複雑なレイアウト

CSS Grid 行や列をまたぐ配置を直接指定しやすい

カード一覧とカード内部など、役割が異なる配置

Grid+Flexbox 外側と内側で、それぞれ得意な方法を使える

あくまで使い分けの目安であり、同じレイアウトをFlexboxとCSS Gridのどちらでも作れるケースは多くあります。

要素を横や縦に並べたいならFlexbox

要素同士を横方向または縦方向に並べたり、位置を揃えたりしたい場合は、Flexboxが使いやすいケースが多くあります。

たとえば、画像とテキストを横に並べる、ナビゲーションを横並びにする、カード内部のアイコンやボタンの位置を整える、といったレイアウトです。

「いくつかの要素をどのように並べるか」を考える場合は、まずFlexboxを検討すると分かりやすいでしょう。

Flexboxで要素を横並び・縦並びに配置する例

Flexboxの基本的な使い方や各プロパティなどについて、さらに詳しく知りたい方は、当社株式会社アステリズムのWeb制作事業「applism」のFlexbox解説記事も参考にしてください。

【flexbox】折り返し指定&余白の調整をする方法【CSS】デモあり
flexboxで横並びにした要素の折り返し指定をするには、CSSで親要素にflex-wrap:wrap;を指定します。その他、flexboxで子要素を折り返した際の余白の指定の仕方についても紹介しています。


複数の行や列を揃えたいならCSS Grid

カード一覧など、複数の要素を「3列」「4列」のような決まった列に沿って配置したい場合は、CSS Gridが便利です。

CSS Gridでは先に列の構造を作れるため、カードごとの横幅を細かく計算しなくても、一定の幅や間隔で整ったレイアウトを作りやすくなります。

「要素をどう並べるか」よりも、「どのような列や行の中に配置するか」を考えたい場合は、CSS Gridを検討してみましょう。

CSS Gridで複数の行や列を揃えて配置する例

迷ったときは「どちらがシンプルに書けるか」で考える

FlexboxとCSS Gridの使い分けに、絶対的な正解があるわけではありません。
Flexboxで問題なく作れるレイアウトを、無理にCSS Gridへ書き換える必要もありません。

反対に、Flexboxでカードの横幅を計算したり、要素ごとに細かな調整が必要になっている場合は、CSS Gridを使うことでCSSをシンプルにできることがあります。

「Flexboxで作れるか」「Gridで作れるか」ではなく、作りたいレイアウトに対して、どちらを使うと分かりやすく管理しやすいかを考えることが大切です。

FlexboxとCSS Gridは組み合わせて使える

FlexboxとCSS Gridは、どちらか一方だけを使う必要はありません。
実際のWeb制作では、ページ全体やカード一覧の配置にはCSS Gridを使い、その中の細かな要素配置にはFlexboxを使うというように、それぞれを組み合わせることがあります。

外側をCSS Grid、内側をFlexboxにする

たとえば、複数のカードを3列で並べるレイアウトを考えてみましょう。

カード一覧全体はCSS Gridを使って3列にすると、カードの横幅や間隔を揃えやすくなります。
一方、それぞれのカードの中では、「アイコンとタイトルを横に並べる」「テキストとボタンの位置を整える」「ボタンをカードの下部に配置する」といった細かなレイアウトが必要になることがあります。このようなカード内部の要素配置には、Flexboxが便利です。

つまり、「カード一覧の「枠組み」にはCSS Grid」「カード内部の「要素の並び」にはFlexbox」というように、役割を分けて使うことができます。

にゃんこす
にゃんこす

にゃんこすも、実制作では外側のレイアウトをCSS Gridで組み、その中の要素配置をFlexboxで整える方法をよく使っています。最初は少しややこしくても、両方使えるようになると便利🐱🐾

どちらか一方に決める必要はない

FlexboxとCSS Gridは、どちらが優れているという関係ではありません。
それぞれ得意なレイアウトが異なるため、作りたいデザインに合わせて使い分けたり、必要に応じて組み合わせたりすることが大切です。

「Flexboxで作るか、Gridで作るか」と最初から一つに決めるのではなく、
レイアウト全体の構造はGrid細かな要素配置はFlexboxというように、レイアウトの役割ごとに考えると使いやすくなります。

まとめ

FlexboxとCSS Gridは、どちらもWebサイトのレイアウトを作るために便利なCSSの機能です。Flexboxは、要素を横方向や縦方向に並べたり、位置を整えたりするレイアウトが得意です。一方、CSS Gridは、カード一覧のように複数の行や列を揃えて配置したいときに便利です。

どちらか一方だけを使えばよいわけではなく、以下のように作りたいレイアウトに合わせて使い分けることが大切です。

  • 要素の並びを整えたい場合はFlexbox
  • 行や列の枠組みを作りたい場合はCSS Grid
  • 必要に応じて両方を組み合わせる

Web制作では、同じ見た目を複数の方法で実装できることも少なくありません。
そのため、プロパティの書き方を覚えるだけではなく、「なぜこのレイアウトではFlexboxを使うのか」「なぜGridの方が管理しやすいのか」といった判断の考え方を身につけることも重要です。

AppRizzでは、HTML・CSSの基本だけでなく、実際のWeb制作を想定しながら、レイアウトの考え方や使い分けについても実践的に学ぶことができます。

独学でコードは書けるようになってきたものの、実制作でどの方法を選べばよいか迷う方は、ぜひAppRizzの学習内容もチェックしてみてください。

あと一歩を埋めて、あなたのスキルを
仕事に変えませんか?

まずは無料カウンセリングへ

オンラインで開催中

※無理な勧誘などは一切ありませんので、ご安心ください。

お気軽にお問い合わせ・ご相談ください

にゃんこす