CSS ・ レスポンシブ

@media

画面幅に応じた切り替え

画面の幅や向き、ダークモードの設定など、条件に合うときだけCSSを適用します。レスポンシブデザインの基本です。

種類
@規則(at-rule)
よく使う条件
min-width・max-width
書く場所
スタイルシートの最上位またはルールの中
01

サンプルコード

HTML
1<div class="cards">
2 <div class="card">A</div>
3 <div class="card">B</div>
4 <div class="card">C</div>
5</div>
CSS
1.cards {
2 display: grid;
3 gap: 8px;
4}
5.card {
6 padding: 16px;
7 background: #b68235;
8 color: #fff;
9 text-align: center;
10}
11@media (min-width: 600px) {
12 .cards {
13 grid-template-columns: repeat(3, 1fr);
14 }
15}
02

実行結果

ブラウザでの表示プレビューの幅が600px以上なら3列、未満なら1列になります
03

解説

@media は、指定した条件を満たすときだけ、中に書いたCSSを適用する仕組みです。条件の部分を「メディアクエリ」と呼びます。

メディアクエリは、画面の解像度(幅や高さ)・向き・印刷時など、様々な条件によってスタイルの適用範囲を決められる機能 です。例えば「スマホを縦にしているときは文字を赤に、横にすると青に」「画面の幅が768px以下になったときに要素Aを出す」といったことができます。

昔の CSS(CSS2)では、画面かプリンターかといった 媒体(メディアタイプ) までしか判断できませんでしたが、CSS3 からは画面の幅などの 媒体の特性(メディア特性) まで判断できるようになりました。

上の例では、表示領域の幅が600px以上のときだけ3列に並べ、それより狭いときは縦に並べています。プレビューの幅や、スマートフォンでこのページを開いて確かめてみましょう。

スマートフォン向けのスタイルを基本に書き、min-width で大きな画面向けのスタイルを追加していく方法を「モバイルファースト」と呼びます。反対に、PC 向けのスタイルを基本に書き、max-width で小さな画面向けのスタイルを追加していく方法を「PCファースト」と呼びます。

CSS を切り替えるタイミング(画面幅)のことを ブレイクポイント と呼びます。PC とスマホの表示を切り替える場合、画面幅が何 px になったときに切り替えるかを定義する必要があります。上の例では 600px がブレイクポイントです。

04

応用例・注意点

よく使う条件

条件説明
(min-width: 760px)幅が760px以上
(max-width: 759px)幅が759px以下
(width >= 760px)範囲の新しい書き方
(prefers-color-scheme: dark)OSがダークモード
(prefers-reduced-motion: reduce)動きを減らす設定
(hover: hover)マウスなどホバーできる環境

基本の書き方(メディアタイプ and メディア特性)

「@media メディアタイプ and (メディア特性) { 指定したいCSS }」の形で書きます。この例は、画面幅が768px以下になると .acthouse の文字を赤にします。

CSS
1/* @media デバイスの種類 and (メディア特性) { 指定したいCSS } */
2@media screen and (max-width: 768px) {
3 .acthouse {
4 color: #f00;
5 }
6}

複数の条件をすべて満たすとき(and)

プリンター以外のデバイス、かつ768px以上の画面に対して適用したい場合です。

CSS
1@media screen and (min-width: 768px) {
2 /* 内容 */
3}

どれか1つの条件に当てはまるとき(,)

横幅が768px以内、または縦長のデバイスに適用したい場合です。カンマで区切った条件のどれか1つに当てはまれば適用されます。

CSS
1@media (max-width: 768px), (orientation: portrait) {
2 .acthouse {
3 color: green;
4 }
5}

ダークモードに対応する

OSの設定に合わせて配色を切り替えます。

CSS
1:root {
2 --bg: #fff;
3 --text: #222;
4}
5@media (prefers-color-scheme: dark) {
6 :root {
7 --bg: #1a1918;
8 --text: #e4e0da;
9 }
10}

注意点

  1. 01スマートフォンで正しく判定させるには、HTMLに <meta name="viewport" content="width=device-width, initial-scale=1"> が必要です。
  2. 02ブレークポイント(切り替える幅)は、端末の種類ではなく、レイアウトが崩れ始める幅を基準に決めます。
  3. 03ブレイクポイントの定義は、制作会社や制作者によって様々です。画面サイズが大きいデバイスもどんどん発売されるため、一定期間でブレイクポイントの見直しをしたほうがよいです。
  4. 04メディアクエリは HTML の link タグの media 属性にも書けます(詳しくは link のページ)。
05

メディアクエリの書き方とブレイクポイントの指定

デバイスの種類(メディアタイプ)

メディアタイプとは、「どのメディアに CSS を適用させるか」 を指定するものです。以下の3種類があります。省略すると all と同じ扱いになります。

メディアタイプ対象
allすべてのデバイス
printプリンター(印刷時)
screenプリンター以外のデバイス(PC、スマホや iPad など)

メディア特性(min-width と max-width)

メディア特性とは、画面の高さや幅を指定する条件 のことです。まずは次の2パターンを覚えておけば OK です。

書き方意味使う場面
(min-width: 768px)768px以上 と条件定義。ブレイクポイントは768pxとなり、768px以上のデバイスに適用されるスマホを基準 として、大きいサイズのデバイスのメディアクエリを設定する場合(モバイルファースト)
(max-width: 768px)768px以下 と条件定義。ブレイクポイントは768pxとなり、768px以下のデバイスに適用されるPC サイトを基準 とする場合(PCファースト)

ブレイクポイント指定の例(モバイルファースト)

スマホ用の色を基本に書き、min-width で大きい画面用の色に上書きしていきます。767px以下では文字が赤、768px〜1023pxでは黄色、1024px以上では緑になります。

HTML
1<p class="acthouse">ACT HOUSE</p>
CSS
1.acthouse {
2 color: red;
3}
4
5@media screen and (min-width: 768px) {
6 .acthouse {
7 color: yellow;
8 }
9}
10
11@media screen and (min-width: 1024px) {
12 .acthouse {
13 color: green;
14 }
15}
ブラウザでの表示

コードと表示の対応

  1. .acthouse { color: red; }メディアクエリの外に書いたスタイルが基本です。どの幅でもまず赤になり、767px以下 ではそのまま赤です。
  2. @media screen and (min-width: 768px)768px以上 で黄色に上書きします。1024px以上では次の指定がさらに上書きするので、黄色になるのは 768px〜1023px です。
  3. @media screen and (min-width: 1024px)1024px以上 で緑に上書きします。min-width は小さい値から順に書くのがポイントです。

ブレイクポイント指定の例(PCファースト)

PC 用の色を基本に書き、max-width で小さい画面用の色に上書きしていきます。1025px以上では文字が赤、769px〜1024pxでは緑、768px以下では黄色になります。

HTML
1<p class="acthouse">ACT HOUSE</p>
CSS
1.acthouse {
2 color: red;
3}
4
5@media screen and (max-width: 1024px) {
6 .acthouse {
7 color: green;
8 }
9}
10
11@media screen and (max-width: 768px) {
12 .acthouse {
13 color: yellow;
14 }
15}
ブラウザでの表示

コードと表示の対応

  1. .acthouse { color: red; }基本のスタイルです。1025px以上 では赤のままです。
  2. @media screen and (max-width: 1024px)1024px以下 で緑に上書きします。768px以下では次の指定がさらに上書きするので、緑になるのは 769px〜1024px です。
  3. @media screen and (max-width: 768px)768px以下 で黄色に上書きします。max-width は大きい値から順に書くのがポイントです。

ブレイクポイントとメディアクエリの違い

  • ブレイクポイントは 「境界線」(768px・1024px などの切り替わる幅)
  • メディアクエリは 「範囲」(768px以上・768px以下など、CSS を当てる幅の範囲)

複数条件

複数の条件をすべて満たすときに適用したい場合は 「and」 を使い、いずれかの条件に当てはまる場合は 「,」(カンマ) で区切ります。その他、「not」 や 「only」 でも条件を指定できます。

書き方意味例
and前後の条件を すべて 満たすときscreen and (min-width: 768px)
,区切った条件の どれか1つ に当てはまるとき(max-width: 768px), (orientation: portrait)
not条件全体を 否定 する(当てはまらないとき)not print(印刷以外)
only古いブラウザにメディアクエリを無視させるための書き方only screen and (min-width: 768px)

only は、メディアクエリに対応していない古いブラウザ向けの書き方です。今のブラウザでは書いても書かなくても同じ動きなので、既存のコードで見かけたら意味がわかれば十分です。

その他のメディア特性

幅(width)以外にも、メディア特性には次のような種類があります。min- / max- を付けて「以上」「以下」を指定できるものもあります(min-height など)。

メディア特性意味
widthブラウザの表示領域の幅
heightブラウザの表示領域の高さ
device-widthデバイス画面の幅
device-heightデバイス画面の高さ
orientationブラウザの表示領域の向き(portrait=縦長/landscape=横長)
aspect-ratioブラウザの表示領域のアスペクト比
device-aspect-ratioデバイスの画面のアスペクト比
colorデバイスのビット数(1色あたり)
color-indexデバイスのカラールックアップテーブルの項目数
monochromeモノクロデバイスのビット数
resolutionデバイスの解像度
scanテレビのスキャン方式
gridグリッドかビットマップかを参照

device- で始まる特性は使わない

  • device-width・device-height・device-aspect-ratio は、今は 非推奨 です。ブラウザの表示領域ではなく端末の画面そのものを見るため、ブラウザを縮めたときなどに思った通りに切り替わりません。
  • 画面幅で切り替えるときは width(min-width・max-width)を使います。
↑↓ 選択Enter 移動Esc 閉じるCtrl K⌘K で開閉