CSS

メディアクエリ

初級

読み方:メディアクエリ|英語:Media Query

@media を使って画面幅に応じてCSSを切り替える仕組みだよ。

やさしい説明

メディアクエリとは、画面サイズに応じてCSSを切り替える仕組みです。レスポンシブデザインの核となる技術です。

「もし画面幅が768px以下なら、このスタイルを適用してね」という条件分岐をCSSで書けます。

書き方は @media (条件) { スタイル } です。max-width(〜以下)や min-width(〜以上)で画面幅を条件にするのが一般的です。

具体例・使い方

/* PC用(デフォルト) */
.nav { display: flex; gap: 16px; }
.sidebar { display: block; }

/* スマホ用(768px以下で切り替え) */
@media (max-width: 768px) {
  .nav { flex-direction: column; }
  .sidebar { display: none; }  /* スマホではサイドバーを非表示 */
}

/* タブレット以上(768px以上で適用) */
@media (min-width: 768px) {
  .container { max-width: 1200px; margin: 0 auto; }
}

モバイルファーストの書き方

/* モバイルファースト: スマホ用をベースに書き、
   min-widthで大きい画面のスタイルを追加する */

/* スマホ(デフォルト) */
.card { width: 100%; }

/* タブレット(600px以上) */
@media (min-width: 600px) {
  .card { width: 48%; }
}

/* PC(1024px以上) */
@media (min-width: 1024px) {
  .card { width: 31%; }
}

現代のWeb開発では「モバイルファースト」が推奨されています。スマホ用をベースに書いて min-width で拡張するアプローチです。Googleもモバイルファーストを推奨しています。

よく使うブレークポイント

  • 480px — 小さなスマホ(縦向き)
  • 768px — タブレット・スマホ横向きの境界(最もよく使う)
  • 1024px — タブレット横向き・ノートPC
  • 1280px — デスクトップPC

TailwindCSSのブレークポイントは sm: 640pxmd: 768pxlg: 1024pxxl: 1280px です。フレームワークに合わせるのが実務では一般的です。

いつ使う?

  • ナビメニューをスマホでハンバーガーメニューに変えるとき
  • PCでは3列、スマホでは1列のグリッドレイアウトに切り替えるとき
  • スマホでは非表示にするサイドバーの制御
  • 画面サイズに応じたフォントサイズの調整

間違いやすいポイント

❌ max-widthを使うときの順番を間違える

max-widthを使う場合は「大きい値→小さい値」の順に書きます。逆だと後のスタイルに上書きされてしまいます。

/* ❌ 順番が逆(スマホ用が先に来て上書きされる) */
@media (max-width: 480px) { .text { font-size: 14px; } }
@media (max-width: 768px) { .text { font-size: 16px; } }

/* ✅ 大きい値→小さい値の順 */
@media (max-width: 768px) { .text { font-size: 16px; } }
@media (max-width: 480px) { .text { font-size: 14px; } }

❌ viewportメタタグを忘れる

HTMLの <head><meta name="viewport" content="width=device-width, initial-scale=1"> がないと、スマホでメディアクエリが正しく効きません。

よくある疑問

Q: ブレークポイントはいくつ設定すべき?

A: 一般的には768px(タブレット)と1024px(デスクトップ)の2つで十分です。コンテンツに合わせて調整しましょう。

Q: メディアクエリの書き方は?

A: @media (min-width: 768px) { .card { width: 50%; } } のように書きます。768px以上の画面幅でカードの幅が50%になります。

Q: メディアクエリが効かないときは?

A: ①viewport metaタグがあるか確認 ②CSSの記述順(後に書いたものが優先)を確認 ③ブラウザの幅を実際に変えて確認、の3つをチェックしましょう。

関連用語

  • レスポンシブ — メディアクエリを使って実現するデザイン手法
  • セレクタ — メディアクエリ内で使うCSSセレクタ
  • プロパティ — メディアクエリで切り替えるCSSの設定項目

📖 関連レッスン

レッスンを見る →

関連ブログ記事

⚠️ 関連するエラー

❓ 関連するQ&A