作ったページをスマホで開いたら、横にならべたカードがぎゅうぎゅうに潰れていた——スマホ対応の悩みは、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タグ。これが無いと、スマホはページ全体を縮小表示してしまい、せっかくのメディアクエリが発動しません。
このレッスンのまとめ
@media (max-width: 600px) { … }で、画面の幅が条件に合うときだけ効くCSSを書ける- いちばん多い使い方は、横ならび(flex)をスマホで縦積み(column)に切りかえること
- 前提としてHTMLのheadに
viewportのmetaタグが必要