クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

画面幅に合わせるレイアウト

このレッスンのあとで: 画面の幅に合わせて、ページが切り替わるように書ける。

55分のレッスンコマンド2件モバイルウェブのラボ:ブラウザーで作るレスポンシブでインストールできるウェブアプリ

レスポンシブデザインとは

レスポンシブデザインは、画面の幅に合わせて、ページの見た目を変える作り方です。スマホでも大学のパソコンでも、同じページが読みやすく見えます。

このレッスンでは、ビューポートとメディアクエリ、モバイルファーストの考え方を学びます。学食のメニューのページを例に使います。

このレッスンのゴール

メモ

画面の幅に合わせて、ページが切り替わるように書ける。

重要な言葉

ことばいみれい
ビューポートブラウザがページを描く、画面の中の領域
メディアクエリ画面の条件が合うときだけ働く CSS の書き方@media (min-width: 600px)
ブレークポイントレイアウトを切り替える、画面の幅600px
モバイルファーストスマホ向けを先に書き、広い画面向けを足す作り方
レスポンシブ画面の大きさに合わせて、見た目が変わること

学生が入力するセルは、このプレビューでは空白です。

ビューポートの設定がないと小さく見える

スマホのブラウザは、設定がないと、広いパソコン向けの画面だと思い込んで、縮めて表示します。文字が小さくなって、読めません。

次の1行を <head> に書くと、画面の実際の幅で描かれます。width=device-width は幅を画面に合わせ、initial-scale=1 は最初の拡大縮小をしない指定です。

viewport のメタタグ

コード: web
<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 px6002列
768 px6002列
900 px600 と 9003列
1200 px600 と 9003列

学生が入力するセルは、このプレビューでは空白です。

学食メニューの CSS

コード: web
/* スマホは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 のタグを書かずに、メディアクエリだけを書く間違いが多いです。スマホが広い画面のつもりで描くので、狙った切り替えが起きません。

このラボとソースについて: モバイルウェブのラボ:ブラウザーで作るレスポンシブでインストールできるウェブアプリ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。