更新日
#17 スマホ対応(レスポンシブ対応)の概要を理解しよう
【予告】本講座の最後で課題にチャレンジします!

少し難しい内容ですが、最後には課題にチャレンジすることでしっかり身につけられるので、そのつもりで集中して読んでいきましょう!
WEBサイト制作を仕事としたいのであれば、様々なデバイスに対応して作れるようにならなければなりません。
たとえば、以下のAppleのページでは、パソコンとスマホでは画面の横幅と縦幅の違いに合わせて、WEBページの見た目が全然違いますよね。


このように、スマホが普及した現代では、ほぼ全てのWEBサイトでマルチデバイス(様々な幅の端末)での対応が求めれます。
では、このAppleのサイトはパソコンとスマホ用でそれぞれ別々のWEBページを作っているのでしょうか?
答えはNoです。
(少ないですが、パソコンとスマホで別々のサイトを用意している会社もあります)
以下は実際のWEBサイトの動きを録画したものですが、画面幅に合わせて画像が小さくなったり、メニューが切り替わったりしていますよね。

このようにデバイスの幅に合わせてCSSの見た目を切り替えることを「レスポンシブ対応」と呼びます。
メディアクエリを使用したレスポンシブ対応の手順
まずは以下の例を見てみましょう。デバイスの横幅が変わるタイミングで見た目が変わっています。

具体的には以下のタイミングで切り替わっているので注目してみてください。
- 1440pxでは黒文字で大文字
- 1024pxより小さくなると「青文字」で「文字サイズが少し小さくなる」
- 768pxより小さくなると「赤文字」「赤ボーダー」「文字がさらに小さくなる」
これは、実際にCSSで「1024pxより小さくなった時だけこのCSSを適用する」「768pxより小さくなった時だけこのCSSを適用する」という指示をスタイルシートに書いています。
メディアクエリ(media query)
それでは実際のコードをもとに解説します。
ブラウザの横幅によってCSSを適用させるには「メディアクエリ」を使用します。

メディアクエリは非常にシンプルです。
@media screen and (max-width: 〇〇px) { }
という定型文の中にいつも通りCSSを記述するだけです。
/*これは全ての横幅で適用される*/
p{
font-size: 60px;
}
/*これは1024px以下で適用される*/
@media screen and (max-width: 1024px) {
p{
font-size: 40px;
}
}
このコードの場合は、「max-width : 1024px(Maxの横幅が1024px)」と書いてあるので、
0〜1024px(Max)まではp
のfont-size
は40px
となり、それ以上は60px
となります。
CSSは上書きされるので優先したいコードを下に書きます
CSSは同じ要素に対して、同じプロパティが書かれていた場合、通常下に書いてあるコードが優先されます。そのため、メディアクエリを書く時は通常のCSSの下に書くと意識しましょう。
NGな例
@media screen and (max-width: 1024px) {
p{
color : black;
}
}
p{
color : red;
}
この場合、1024px以下でcolor:red
が上書きされて優先されてしまいます。
OKな例
p{
color : red;
}
@media screen and (max-width: 1024px) {
p{
color : black;
}
}
この場合、1024px以下でcolor : black
が正しく上書きされて優先されます。
メディアクエリは複数書くことができる
以下の例では、1024pxと768pxの2段階で見た目が変わっていますよね。
これは切り替えたい横幅ごとに複数のメディアクエリを記述してあるからです。

p{
font-size: 60px;
font-weight: bold;
}
@media screen and (max-width: 1024px) {
p{
font-size: 40px;
color:#0B78D7;
}
}
@media screen and (max-width: 768px) {
p{
border:solid 4px #FF6658;
color:#FF6658;
font-size: 30px;
}
}
この例の具体的なコードはこのようになります。
- 1024px以下では
font-size:40px
、color:#0B78D7
- 768px以下では
font-size:30px
、color:#FF6658
、border:solid 4px #FF6658;
- それ以外(1025px〜)は
font-size: 60px
デバイスごとに横幅が異なる
レスポンシブ対応は「横幅」を基準としていますが、その理由はデバイスごとに横幅が全く異なるからです。
以下の画像にある通り、私たちが使用しているデバイスにも「px」という単位が使用されています。

そして、同じApple製品でもMacbookであれば1440px、iPhoneであればMacbookよりも小さく414pxとなっています。
全てのデバイスのサイズに対応する必要がある?
上記の説明でいけば、デバイスのサイズは10種類以上あるため、対応させたいデバイスの数だけメディアクエリを書く必要があるかと言えばそうではありません。
実際のレスポンシブ対応の流れをもとに確認してみましょう。
01
PCのコーディングはOK
まずPCのコーディングができており、大きなパソコンとノートパソコンで見た目が綺麗に見えているとします。この場合は当然メディアクエリは不要です。

02
タブレットサイズになるとメディアクエリが必要
PCのコーディングはOKでしたが、タブレットサイズまで小さくした時にパソコンと同じ見た目のままでは画像がはみ出てしまいました。
そのためメディアクエリを使って768px以下で画像が小さくなるようにします。

03
スマホではさらにメディアクエリが必要
タブレットに合わせて768px以下で調整しましたが、スマホサイズだとどうでしょうか?
当然スマホの方がデバイスサイズが小さいので画像がはみ出てしまいますね。
428pxと320pxどちらのサイズでも綺麗に見えるように480px以下でメディアクエリを設定します。

このように、メディアクエリを何pxごとに書くかは厳密に決まっておらず、
- 「1024px以下で書けば大きいタブレットと小さいタブレットどちらもカバーできるな」
- 「600px以下でメディアクエリを書けばどのスマホサイズでも綺麗に見せられるな」
というように、実際に使われている端末のサイズから大体の数値でメディアクエリを書きます。
このようにメディアクエリをどのpxで設定するかを「ブレークポイント」と呼びます。

ブレイクポイントを「何pxで書くべき論」は諸説あり絶対の正解はありません。
最終的には、仕事相手のデザインに合わせたり、入社した会社の方針に合わせることになります。
レスポンシブ対応の課題にチャレンジ
実際に手を動かして、以下のようにブラウザの幅でCSSが切り替わるレスポンシブ対応をしてみましょう。

課題の手順
❶環境の準備
以下に手順が記載してありますが、不安な方は「#09 CSSの課題|シンプルなWEBページを作ろう」の環境準備の動画を参考にしてみてください。
手順01
デスクトップに「webliker」>「kadai-responsive」という課題用のフォルダを作成する

HTMLの課題の時と同様にwebliker
というフォルダの中にkadai-responsive
というフォルダを作りましょう。
手順02
VS Codeで「index.html」を作成し「kadai-responsive」の中へ保存する

※必ず以下のHTMLをコピーしてください
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!--
通常:文字の色を青色
1000px以下:文字の色を緑色
600px以下:文字の色を赤色
-->
<p>この文字は通常は青色ですが、1000px以下で緑色に変わり、600px以下で赤色に変わります。</p>
<!--
通常:横幅を800px
1000px以下:横幅を400px
600px以下:横幅を200px
-->
<img src="img/dog.jpg" alt="犬">
</body>
</html>
手順03
VS Codeで「style.css」を作成し「kadai-responsive」の中へ保存する
@charset "UTF-8";
/* 1000px以上で適用されるCSS
--------------------------------------*/
p{
color: blue;
}
img{
width: 600px;
}
/* 1000px以下で適用されるCSS
--------------------------------------*/
/* 600px以下で適用されるCSS
--------------------------------------*/
- VS Codeで新規ファイルを作成し「左のコード」をコピペ
style.css
というCSSファイルを作成- デスクトップ >
webliekr
>kadai-responsive
へ保存

手順04
画像をダウンロードして読み込み

手順05
index.htmlを開いて表示をチェック

HTMLを開いてこの状態になっていればOKです。
❷実践|課題に取り組もう
今回は今までの課題と少し異なり、既に適用してあるp{ color: blue }
とimg{ width: 600px }
のCSSをブラウザを縮小させた時に以下のように変更してください。
- 1000px以下で文字の色を
color: green
に画像をwidth: 400px
に変更する - 600px以下で文字の色を
color: red
に画像をwidth: 200px
に変更する
課題の解答
正解のCSSのコードを確認する
@charset "UTF-8";
/* 1000px以上で適用されるCSS
--------------------------------------*/
p{
color: blue;
}
img{
width: 600px;
}
/* 1000px以下で適用されるCSS
--------------------------------------*/
@media screen and (max-width: 1000px) {
p{
color: green;
}
img{
width: 400px;
}
}
/* 600px以下で適用されるCSS
--------------------------------------*/
@media screen and (max-width: 600px) {
p{
color: red;
}
img{
width: 200px;
}
}
課題につまずいた方は正解を見た上で改めて本講座を読み直して再チャレンジしてみてくださいね!