レスポンシブデザインとは
レスポンシブデザインは、画面の幅に合わせて、ページの見た目を変える作り方です。スマホでも大学のパソコンでも、同じページが読みやすく見えます。
このレッスンでは、ビューポートとメディアクエリ、モバイルファーストの考え方を学びます。学食のメニューのページを例に使います。
このレッスンのゴール
メモ
画面の幅に合わせて、ページが切り替わるように書ける。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| ビューポート | ブラウザがページを描く、画面の中の領域 | |
| メディアクエリ | 画面の条件が合うときだけ働く CSS の書き方 | @media (min-width: 600px) |
| ブレークポイント | レイアウトを切り替える、画面の幅 | 600px |
| モバイルファースト | スマホ向けを先に書き、広い画面向けを足す作り方 | |
| レスポンシブ | 画面の大きさに合わせて、見た目が変わること |
学生が入力するセルは、このプレビューでは空白です。
ビューポートの設定がないと小さく見える
スマホのブラウザは、設定がないと、広いパソコン向けの画面だと思い込んで、縮めて表示します。文字が小さくなって、読めません。
次の1行を <head> に書くと、画面の実際の幅で描かれます。width=device-width は幅を画面に合わせ、initial-scale=1 は最初の拡大縮小をしない指定です。
viewport のメタタグ
<meta name="viewport" content="width=device-width, initial-scale=1">ラボのページを調べる
ラボの app フォルダのページが、この1行を持っているか調べます。スクリプトは、結果を英語の単語で出します。
found は見つかった、MISSING はない、True は含まれている、という意味です。
viewport の有無を調べる
docker exec jupyter python3 steps/viewport.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ラボの出力の読み方
| 出力の行 | 意味 |
|---|---|
| viewport meta tag: found | メタタグがある |
| content: width=device-width, initial-scale=1 | タグの中身はこの2つの値 |
| width=device-width in it: True | 幅を画面に合わせる指定が入っている |
学生が入力するセルは、このプレビューでは空白です。
メディアクエリは条件つきの CSS
メディアクエリは、画面の条件が合うときだけ働く CSS です。@media (min-width: 600px) は、幅が 600 px 以上のとき、中の規則を使う意味です。
広い画面向けの規則を、この形で足していきます。ブレークポイントは、規則が切り替わる幅です。
モバイルファーストは、スマホから書く
モバイルファーストでは、何も付けない規則がスマホ向けです。まず、狭い画面で読みやすく書きます。
その上に、広い画面向けの規則を min-width で足します。狭い画面の規則を消さなくてよいので、数が増えても整理しやすくなります。
例: 幅ごとに当てはまる規則
| 画面の幅 | 働く min-width | メニューの列 |
|---|---|---|
| 360 px | なし | 1列 |
| 600 px | 600 | 2列 |
| 768 px | 600 | 2列 |
| 900 px | 600 と 900 | 3列 |
| 1200 px | 600 と 900 | 3列 |
学生が入力するセルは、このプレビューでは空白です。
学食メニューの CSS
/* スマホは1列 */
.menu { display: grid; grid-template-columns: 1fr; gap: 8px; }
/* 幅が 600 px 以上なら2列 */
@media (min-width: 600px) {
.menu { grid-template-columns: 1fr 1fr; }
}
/* 幅が 900 px 以上なら3列 */
@media (min-width: 900px) {
.menu { grid-template-columns: 1fr 1fr 1fr; }
}ラボの切り替えの幅を数える
ラボの style.css に、メディアクエリがいくつあるか数えます。出力は、-> の右側に、幅か好みを書きます。
最後の1つは、幅ではありません。画面を暗い配色にしたいという、利用者の好みを聞く条件です。
メディアクエリを数える
docker exec jupyter python3 steps/breakpoints.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
自分のブラウザで確かめる
ラボのページの Preview のリンクを、自分のブラウザで開きます。ブラウザの幅を狭くすると、レイアウトが切り替わる幅が見つかります。
ブラウザの開発者ツールには、スマホの画面を真似る表示もあります。見え方は、機種やブラウザで少し変わります。
この講座で作るもの
この講座では、Web の技術だけでスマホ向けのアプリを作ります。ブラウザで動き、ホーム画面に追加でき、電波がなくても開けます。
エミュレーターやアプリストアなど、ネイティブアプリの道具は扱いません。ラボでは、習慣を記録する小さな Web アプリを使います。
よくある間違い
注意
viewport のタグを書かずに、メディアクエリだけを書く間違いが多いです。スマホが広い画面のつもりで描くので、狙った切り替えが起きません。