CSS・並べる・配置する

スマホでも見やすく:メディアクエリ

パソコンではきれいなのに、スマホで見ると窮屈……。画面の幅に合わせて見た目を切りかえる「メディアクエリ」で解決しよう。

作ったページをスマホで開いたら、横にならべたカードがぎゅうぎゅうに潰れていた——スマホ対応の悩みは、Webづくりで必ず通る道です。画面の幅はパソコン・タブレット・スマホでバラバラ。そこで、画面の幅に合わせてCSSを切りかえる仕組みが用意されています。それがメディアクエリです。

書いてみよう

@media (max-width: 600px) {
  h1 {
    font-size: 24px;
  }
}
部分意味
@media「画面によって切りかえるよ」の合図
(max-width: 600px)条件:画面の幅が600px以下のとき
{ } の中条件に合うときだけ効くCSS

読み下すと「画面の幅が600px以下なら、h1の文字を24pxにする」。広い画面ではふつうのCSSが効き、スマホサイズになった瞬間、この中のルールが上書きします。

いちばん多い使い方:横ならびを縦積みに

メディアクエリの出番でいちばん多いのが、広い画面では横ならび、スマホでは縦積みという切りかえです。Flexboxと組み合わせます。

.cards {
  display: flex;
  gap: 16px;
}

@media (max-width: 500px) {
  .cards {
    flex-direction: column;
  }
}

ふだんはdisplay: flexで横ならび。幅500px以下になったらflex-direction: columnで縦にならべ直す——たった1行の上書きで、スマホでも読みやすくなります。

動きを見てみよう

この枠の中でメディアクエリが生きています。パソコンで見ると横ならび、スマホで見ると縦積み——いま読んでいる画面の幅で、見え方が変わっているはずです。

効かせるための前提:viewport

メディアクエリを正しく効かせるには、HTML側に「スマホでは画面の幅どおりに表示してね」という指定が必要です。それがheadに書いたviewportのmetaタグ。これが無いと、スマホはページ全体を縮小表示してしまい、せっかくのメディアクエリが発動しません。

HTMLheadの中身をそろえようviewportのmetaタグを書いた回。「おまじない」の正体はスマホ対応のスイッチでした

このレッスンのまとめ

  1. @media (max-width: 600px) { … }で、画面の幅が条件に合うときだけ効くCSSを書ける
  2. いちばん多い使い方は、横ならび(flex)をスマホで縦積み(column)に切りかえること
  3. 前提としてHTMLのheadにviewportのmetaタグが必要

やってみよう

今回学んだ「メディアクエリ」は、しまちゃんのページには使いません(1カラム中心の、もともとスマホでも崩れにくい作りにしています)。カードを何枚も横にならべるような、広い画面向けのレイアウトを作ったときのための道具です。覚えておいて、必要になったら使いましょう。

よくある質問

メディアクエリが効かないときは?
まず、HTMLのheadにviewportのmetaタグが入っているか確認しましょう。これが無いとスマホがページを縮小表示してしまい、メディアクエリの切りかえが期待どおりに動きません。次に、括弧の閉じ忘れや、既存のルールより上に書いていて上書きされていないかを確認します。
max-widthとmin-widthはどちらを使えばいい?
どちらでも作れますが、初心者はまず「パソコン向けをふつうに書き、max-widthでスマホ向けの上書きを足す」やり方が分かりやすいです。慣れてきたら、スマホから書き始めてmin-widthで広い画面向けを足す「モバイルファースト」も試してみましょう。