作ったページをスマホで開いたら、横にならべたカードがぎゅうぎゅうに潰れていた——スマホ対応の悩みは、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タグ。これが無いと、スマホはページ全体を縮小表示してしまい、せっかくのメディアクエリが発動しません。
境目は2つ組み合わせて範囲にできる
min-widthとmax-widthをandでつなぐと、「〜以上、かつ〜以下」という範囲だけに効くメディアクエリが書けます。
@media (min-width: 501px) and (max-width: 900px) {
.cards {
flex-direction: column;
}
}「幅が501px以上900px以下のときだけ」という意味になり、スマホ・タブレット・パソコンで別々のCSSを用意したいときに使います。
このレッスンのまとめ
@media (max-width: 600px) { … }で、画面の幅が条件に合うときだけ効くCSSを書ける- いちばん多い使い方は、横ならび(flex)をスマホで縦積み(column)に切りかえること
- 前提としてHTMLのheadに
viewportのmetaタグが必要