CHAPTER 3 · 12 LESSONS · 156 問

画面幅に合わせる

スマホでもPCでも崩れないページにする。同じHTMLのまま見せ方を変える方法。

Web ページには、紙と決定的に違うところがある。見る人の画面の大きさが分からないということだ。5インチのスマホかもしれないし、27インチのモニタかもしれない。同じページが、10倍近く幅の違う画面で開かれる。

紙なら「A4」と決めてその中で設計できる。Web ではそれができない。だからページのほうが、開かれた画面に合わせて姿を変える必要がある。これが レスポンシブ と呼ばれる考え方だよ。

やり方の中心が メディアクエリ だ。「画面幅が○○px より狭いときは、この指定を使う」と条件をつけて CSS を書ける。狭いときは縦に積み、広いときは横に並べる。HTML は1つのまま、見せ方だけを切り替えるのがポイントだよ。スマホ用のページを別に作るわけではない。

切り替える幅の目安を ブレークポイント と呼ぶ。よく使われるのはタブレットとPCの境目あたりだけれど、機種ごとに合わせようとするときりがない。レイアウトが崩れて見える幅を実際に確かめて、そこで切るのが現実的だよ。

もうひとつ重要なのが、どちらを基準に書くか。狭い画面を基準にして、広いときに足していく書き方を「モバイルファースト」と呼ぶ。この教材はその立場を取っている。理由は単純で、狭い画面のほうが制約が厳しいからだ。狭いほうを先に成立させておけば、広い画面は余裕を配るだけで済む。逆をやると、狭い画面に押し込む段階で行き詰まる。

章の後半では、幅を追いかける 指定を扱う。画面幅の何割、という指定のしかたや、大きくなりすぎないよう上限を決める指定だ。文字の大きさも画面に応じて変えられる。段階的に切り替えるのではなく、なめらかに追従させるやり方だよ。

作ったものを確かめる方法も覚えておこう。ブラウザの幅を実際に狭めて、崩れる瞬間を探す。横スクロールが出たら、それは何かがはみ出しているサインだ。スマホで横スクロールが出るページはとても使いづらいので、必ずつぶしておきたい。

はみ出しの原因でいちばん多いのが、幅を固定した要素だ。「幅300px」と書いた箱は、画面が280pxしかなくても300pxのまま居座る。だから横スクロールが出る。幅は固定せず、「画面に対して何割」や「最大でもここまで」という形で指定するほうが安全だよ。長い文字列や大きな画像がはみ出すこともあるので、そこも確かめておこう。

もうひとつ忘れがちなのが、画面の幅をブラウザに伝える指定だ。これを書き忘れると、スマホはページをPC幅とみなして全体を縮小表示する。文字が小さすぎて読めないページは、たいていこれが原因だよ。HTML の先頭に1行書くだけなので、忘れずに入れておこう。

この章は、実務でいちばん時間を使うところでもある。「PCでは完璧なのにスマホで崩れる」は、Web 制作で最もよく起きる問題だよ。ここを押さえておくと、そのたびに困らずに済む。

画像の扱いも忘れずに。大きな画像をそのまま置くと、狭い画面ではみ出す。「親の幅を超えない」という指定をひとつ入れておくだけで防げるので、癖にしておこう。

この教材では、書いたコードのプレビューの幅を切り替えられるようになっている。狭い幅と広い幅を行き来しながら、どこで崩れるかを自分の目で確かめてみよう。画面幅を変えたときに何が起きるかを見る習慣が、この章でいちばん持ち帰ってほしいものだよ。

そしていま、あなたはスマホでこの教材を読んでいるかもしれない。作る側に回っても、その視点は忘れないでほしい。使う人の多くは小さな画面で見ている。そこで気持ちよく使えることが、まず最初の目標だよ。

この章のレッスン

画面幅で切り替える

  1. 46せまい画面で崩れるのを見る同じHTMLでもスマホでは形が変わる。まずは幅を割合で書いて、はみ出しをやわらげよう。 問題へ
  2. 47せまいときだけ効くCSSを書く@media の枠でかこむと、決めた幅以下のときだけ効くルールになる。 問題へ
  3. 48幅ごとに並びを切り替える@media の中で displaywidth を書き変えて、横並びを縦積みに切り替えよう。 問題へ
  4. 49余白を幅の中に入れるbox-sizing: border-box; にすると、余白や枠線を含めた大きさが width になる。 問題へ

端末ごとのレイアウト

  1. 50幅ごとに変える前の下地を作る帯・入れ物・カードの3層と数え方の統一を先にそろえて、切り替えの土台を作ろう。 問題へ
  2. 51中くらいの幅から手をつける広い幅の形から @media (max-width: 700px) で3列を2列にし、段階的にせまくしていこう。 問題へ
  3. 52はみ出しの原因を見つけて直す固定した幅・余白の数え方・縮まない画像。はみ出す原因を3つに切り分けて順番に直そう。 問題へ
  4. 53スマホ幅で縦に積む@media (max-width: 480px) の中で display: block;width: 100%; に戻して、カードを縦一列にしよう。 問題へ
  5. 54スマホ幅の細部を仕上げる積み替えたあとの余白・そろえ・線を整えて、せまい幅のページを仕上げよう。 問題へ

文字と幅を追従させる

  1. 55文字の大きさも幅で変えるメディアクエリの中で font-size を書きかえて、狭い画面でも見出しが収まるようにしよう。 問題へ
  2. 56広がりすぎないように上限をつけるmax-width で幅の上限を決めて、大きい画面でも中身が間延びしないようにしよう。 問題へ
  3. 57幅によって出すものを入れかえるdisplay: none;display: block; を幅で切り替えて、狭い画面ではメニューの見せ方ごと変えよう。 問題へ

つぎは「ならべ方をあやつる」。横並び・折り返し・中央そろえを短い指定で作る。今のレイアウトの主役。