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

ビューポートとメディアクエリ

viewportの意味とmedia queryの基本構文を理解し、画面幅ごとにCSSを切り替える方法を身につけます。

男子生徒のアイコン

前回、レスポンシブデザインの全体像は分かりました。でも実際に画面幅で切り替えるには、何を使うんですか?

AI先生のアイコン

そこで登場するのが viewport と media query だよ。viewportは「ブラウザがどんな幅の画面としてページを見るか」、media queryは「その幅に応じてどのCSSを使うか」を決める仕組みなんだ。

女子生徒のアイコン

2つがセットなんですね。なんとなく聞いたことはありますが、まだ結びついていません。

AI先生のアイコン

今日はそこを丁寧につなげよう。最初に viewport を整えて、その上で media query で見た目を変える。この順番で考えると整理しやすいよ。

viewportとは何か

viewport は、ブラウザがページを表示するときの「見える範囲」や「表示の基準になる幅」のことです。スマホでもPCでも同じHTMLを開けますが、ブラウザはまず「このページをどの幅として扱うか」を決めます。

スマホ向けのページで viewport の設定が適切でないと、ブラウザがPC向けページのように縮小して表示してしまい、文字が小さく見えることがあります。

よく使うviewport設定

HTMLのheadに入れる基本設定
<meta name="viewport" content="width=device-width, initial-scale=1.0">

この設定の意味は次の通りです。

  • width=device-width
    • 端末の実際の画面幅を基準に表示します
  • initial-scale=1.0
    • 最初の拡大率を100%にします

viewport を適切に設定すると、スマホでも「スマホの幅らしい見え方」でCSSが効きやすくなります。media query もこの前提があると、狙ったとおりに切り替わりやすくなります。

viewport 未設定
スマホでも PC 幅のように縮小されやすい
文字が小さい / 全体が縮んで見える
viewport 設定済み
端末の幅を基準に自然な大きさで表示
文字の大きさも並び方もスマホ向けに見やすい

viewport を忘れるとどう見えるか

viewport を入れ忘れると、CSS がまったく効かないわけではありません。ただし、ブラウザが「PC向けの広いページを縮小して見せよう」とするので、次のような違和感が出やすくなります。

  • 文字だけ妙に小さい
    • フォントサイズ指定は同じでも、全体が縮んで見えます
  • 横並びのまま詰まって見える
    • 本来スマホ向けにしたい並びが、縮小表示でごまかされやすいです
  • media query の効き方が読みにくい
    • CSS自体は当たっていても、見た目の基準がずれて判断しづらくなります
  • 検証時に原因を見失いやすい
    • CSSが壊れたのではなく、表示の土台がずれている場合があります

まずは meta name="viewport" を確認してから media query を調整する、という順番で見ると切り分けしやすくなります。

media queryでCSSを切り替える

media query は、「もし画面幅がこの条件なら、このCSSを使う」という書き方です。レスポンシブ対応で最もよく使うのは、画面幅による条件分岐です。

基本構文

media queryの基本形
@media (max-width: 768px) {
    .box {
        padding: 16px;
    }
}

この例では、画面幅が768px以下のときだけ .boxpadding: 16px; が適用されます。

よく使う考え方

  • max-width
    • 指定した幅以下のときに効くので、PCからスマホへ狭くなる場面で使いやすいです
  • min-width
    • 指定した幅以上のときに効くので、広い画面で追加の調整を入れたいときに便利です
  • 条件を増やせる
    • 幅だけでなく、向きや印刷用なども条件にできます
  • 通常のCSSが先
    • まず基本の見た目を書き、必要な部分だけ media query で上書きします
男子生徒のアイコン

つまり、普段のCSSに「この幅なら追加でこうする」を足していく感じですね。

AI先生のアイコン

そういうこと。最初から全部分岐させるより、基本の見た目を作ってから必要な変化だけ追加するほうが分かりやすいよ。

画面幅で切り替える実例

ここでは、PCでは横並び、スマホでは縦並びに変える例を見ます。レスポンシブ対応ではとてもよく出てくるパターンです。

HTML
<section class="news-list">
    <article class="news-card">新着記事</article>
    <article class="news-card">人気記事</article>
    <article class="news-card">おすすめ記事</article>
</section>
CSS
.news-list {
    display: flex;
    gap: 16px;
}

.news-card {
    flex: 1;
    padding: 20px;
    border-radius: 12px;
    background: #ecfeff;
}

@media (max-width: 700px) {
    .news-list {
        flex-direction: column;
    }
}
プレビュー:

※プレビューの右下にあるアイコンをドラッグして、実際の画面幅を動かして切り替えを確認できます。

PCサイズでは .news-list が横並びになり、狭い画面では flex-direction: column; に切り替わって縦積みになります。こうした「並び方の切り替え」は、レスポンシブ対応の定番です。

media query が効かないときの見方

レスポンシブ実装では、「書いたのに切り替わらない」と感じることがあります。そのときは次の順で確認すると原因を見つけやすいです。

  • 条件の向きを確認する
    • max-widthmin-width を逆にしていないか確かめます
  • 基本CSSが先にあるかを見る
    • 先に通常時の見た目を書き、あとで上書きする形になっているか確認します
  • 切り替えたいプロパティを確認する
    • displayflex-direction など、見た目に直結する指定を変えているか見ます
  • 実際に苦しくなる幅を縮めて探す
    • DevTools やプレビューで幅を動かし、どこで読みにくくなるかを観察します

どの幅で切り替えるか

ここで大事なのは、決め打ちの数字を暗記することではなく、レイアウトが苦しくなる幅を見つけることです。

  • 文字が読みにくくなったら
    • その少し手前で切り替えを考えます
  • カードが押しつぶされたら
    • 列数や並び方向を変えます
  • ナビゲーションが窮屈なら
    • 横並びから縦並びや折り返しに切り替えます
  • 端末名より表示を基準にする
    • iPhone用のような端末名より、このレイアウトが崩れる幅で判断します

min-widthとmax-widthの考え方

media query では max-widthmin-width のどちらもよく使います。

max-width

「この幅以下なら切り替える」という書き方です。広い画面向けの見た目を基本にして、狭い画面で調整を加えるときに分かりやすいです。

min-width

「この幅以上なら切り替える」という書き方です。スマホ向けのシンプルな見た目を先に作って、広い画面で機能や列数を増やすときに向いています。

max-widthとmin-widthの違い
/* 基本の見た目 */
.container {
    padding: 16px;
}

/* 768px以下で調整 */
@media (max-width: 768px) {
    .container {
        padding: 12px;
    }
}

/* 900px以上で調整 */
@media (min-width: 900px) {
    .container {
        padding: 32px;
    }
}

この段階では、max-width は「狭くなったときの調整」、min-width は「広くなったときの追加調整」と読み分けられれば十分です。モバイルファーストという設計の考え方は、次の実践記事でまとめて扱います。

media query なし
狭い画面でも横並びのまま
スマホ幅 360px
カードが細くなって読みにくい
@media
(max-width: 700px)
media query あり
狭い画面では縦積みに切り替え
スマホ幅 360px
1枚ずつ大きく読める
切り替え設計の判断軸
一般論として押さえるべき4つの観点
可読性
文字サイズ、行長、改行の自然さを優先して判断する
操作性
タップ領域やリンク間隔が狭すぎないか確認する
実装の簡潔性
条件分岐を増やしすぎず、意図が追える構造にする
運用再現性
別メンバーが見ても同じ判断ができる根拠を残す

理解度チェッククイズ

viewportとmedia query基礎クイズ

viewportを端末の画面幅に合わせる基本設定の主な役割はどれですか?
CSSファイルを自動生成する
端末の画面幅を基準に表示しやすくする
画像を自動で圧縮する
JavaScriptを無効化する
次のうち、画面幅が700px以下のときにだけ適用される書き方はどれですか?
@media (max-width: 700px)
@media (min-width: 700px)
@width 700px
@screen mobile only
ブレークポイントを決めるときの考え方として、より適切なのはどれですか?
すべてのサイトで同じ数値を使う
端末名だけを見て決める
レイアウトが読みにくくなる幅を観察して決める
なるべく1px単位で大量に分ける
viewport を入れ忘れたときに起こりやすい見え方はどれですか?
文字が極端に大きくなりすぎる
全体が縮んで文字が小さく見えやすい
画像だけが必ず非表示になる
HTMLが読み込まれなくなる
media query を書くときの基本的な考え方として適切なのはどれですか?
最初からすべての幅ごとに別CSSを書く
通常のCSSを作ってから必要な変化だけ条件付きで上書きする
media query の中にしかCSSを書かない
HTMLのタグ名だけで画面幅を判定する

まとめ

女子生徒のアイコン

viewportは表示の土台で、media queryはその上で見た目を切り替える仕組みなんですね。

男子生徒のアイコン

max-widthmin-width の違いも整理できました。基本のCSSを先に書いて、必要な変化だけ追加するのが分かりやすいです。

AI先生のアイコン

その理解で進めれば大丈夫。次は、相対単位や max-width を使って、そもそも崩れにくいサイズ指定を作る方法を見ていこう。切り替えだけでなく、自然に伸び縮みする設計が重要になるよ。

viewportとmedia queryのポイント
  • viewport
    • ブラウザがどの幅を基準にページを表示するかを決める設定です
  • media query
    • 画面幅などの条件に応じて CSS を切り替える仕組みです
  • 基本を先に書く
    • 通常の CSS を作り、必要な部分だけ条件付きで上書きします
  • 数値より観察
    • ブレークポイントは端末名より、レイアウトが苦しくなる幅で決めます

次回は、相対単位・max-width・レスポンシブ画像を使って、崩れにくいサイズ指定を学びます。

学習チェック

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

レッスン完了!🎉

お疲れさまでした!