Web制作コラム

レスポンシブデザインとは|1つのHTMLで画面幅に合わせる仕組み

用語・技術解説

パソコンとスマホで同じHTMLを使い、見せ方だけを変える作り方です。仕組みと、実務でのブレークポイントの決め方をまとめます。

レスポンシブデザインとは、1つのHTMLを画面の幅に応じて並べ替えて見せる作り方です。パソコン用とスマホ用でページを分けるのではなく、同じ中身に対してCSSの指定だけを切り替えます。

仕組みは2つだけ

1. viewport の指定

これが無いと、スマホはパソコン用の幅でページを描いて全体を縮小します。文字が読めないほど小さくなるのはこのためです。

head の中

<meta name="viewport" content="width=device-width, initial-scale=1">

2. メディアクエリ

画面幅の条件を付けて、その幅のときだけ効くCSSを書きます。下の例では、画面幅が834px以下のときだけ1列に変わります。

CSS

.cards { display: grid; grid-template-columns: repeat(3, 1fr); }

@media (max-width: 834px) {
  .cards { grid-template-columns: 1fr; }
}

ブレークポイントは端末名で決めない

端末の種類に合わせて何段も作ると、新しい機種が出るたびに見直すことになります。実務では、レイアウトが破綻する幅で切るのが基本です。多くのサイトは次の2か所で足ります。

  • 834px … タブレット縦を含む、横並びが苦しくなる幅
  • 640px前後 … スマホ。ここで1列にする

段を増やすほど確認する組み合わせが増えます。3段で足りるなら3段にしてください。

幅を固定しない書き方にしておく

メディアクエリの数を減らす一番の方法は、そもそも幅を px で固定しないことです。

  • 要素の幅は % や grid に任せ、px で決め打ちしない
  • 画像は max-width: 100% を基本にする
  • 余白も画面幅に応じて変わる指定を使う
  • 表やコードは、横スクロールできる入れ物に入れる

モバイルファーストとPCファースト

レスポンシブには、どちらを基本として書くかという2つの流派があります。メディアクエリを min-width で書くか max-width で書くかの違いです。同じ見た目を作れますが、書き方の向きが逆になります。

モバイルファースト|スマホを基本にして、広い画面で足す

メディアクエリの外に書くCSSをスマホ向けにします。そして、パソコンで見せ方が変わる箇所だけを min-width の中に書きます。

CSS(モバイルファースト)

/* ここは全画面共通 = スマホの見た目 */
.cards {
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
}

/* 画面が 768px 以上のときだけ上書きする */
@media (min-width: 768px) {
  .cards { grid-template-columns: repeat(3, 1fr); }
}

スマホでは追加のCSSを読む必要がなく、指定の数も少なく済みます。新規に作る案件では、こちらを基本にするのが一般的です。

PCファースト|パソコンを基本にして、狭い画面で上書きする

逆に、メディアクエリの外をパソコン向けに書き、スマホで変わる箇所を max-width の中に書きます。

CSS(PCファースト)

/* ここは全画面共通 = パソコンの見た目 */
.cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

/* 画面が 767px 以下のときだけ上書きする */
@media (max-width: 767px) {
  .cards {
    grid-template-columns: 1fr;
    gap: 16px;
  }
}

すでにパソコン向けに作られているサイトへ、後からスマホ対応を足す場合はこちらになります。既存のCSSを書き換えずに済むためです。

境界の値を重ねない

min-width: 768px と max-width: 767px のように、1px ずらして組にします。両方を 768px で書くと、ちょうど 768px のときに2つとも当たり、後に書いたほうが勝つという分かりにくい状態になります。

境界の値は案件ごとに決めてかまいません。このサイトは 835px で切っています。大事なのは、サイト全体で同じ値を使うことです。ファイルごとに 768 と 834 が混ざると、どの幅で何が起きるか追えなくなります。

どちらを選ぶか

  • モバイルファースト … 新規制作、スマホからの閲覧が多いサイト。指定が少なく、スマホが軽くなります
  • PCファースト … 既存のパソコン向けサイトにスマホ対応を足す場合、管理画面や業務システムのようにパソコンが主役のもの
  • 既存サイトの改修 … 今そのサイトがどちらで書かれているかに合わせます。自分の流儀を持ち込まないほうが後が楽です

いちばん避けたいのは、1つのサイトの中で min-width と max-width が混ざることです。同じ要素に両方から指定が飛んでくると、どこで上書きされているのか追えなくなり、直すたびに別の幅が崩れます。どちらでも構わないので、統一してください。

スマホから考えると崩れにくい

パソコンの見た目を作ってからスマホに押し込めると、入りきらない要素の置き場所に困ります。先にスマホの1列の並びを決め、広い画面で横に展開していくほうが無理がありません。情報の優先順位も自然に決まります。

これは書き方の話ではなく、設計の順番の話です。デザインの段階でスマホの並びが決まっていれば、モバイルファーストで素直に書けます。逆に、パソコンのデザインだけを渡されてスマホは任せます、という進め方だと、どちらの書き方を選んでも作業が増えます。

確認は実機で

ブラウザのスマホ表示は幅を変えているだけです。アドレスバーの動き、入力欄をタップしたときの自動拡大、スクロールの挙動は再現されません。必ず実機で見てください。

ページを分ける選択肢もある

スマホとパソコンで見せる内容そのものを変えたい場合は、ページを分ける方法もあります。どちらを選ぶかは別の記事にまとめています。

当社はレスポンシブでの構築を標準にしています。スマホでの崩れを直したい、既存サイトをスマホ対応にしたいというご依頼にも対応しています。

「用語・技術解説」のコラム

この記事と同じカテゴリの記事です。

一覧に戻る

SERVICES

WordPressとECサイトの制作、
まとめてご相談いただけます

WordPress

WordPress制作・構築代行

デザインデータやコーディング済みHTMLを、オリジナルテーマとして構築します。プラグイン開発も対応。

構築基本費用 50,000円

詳しく見る
コーディング

コーディング代行

デザインデータをHTML/CSSに起こします。WordPress化まで通しでも、コーディングだけでも承ります。

1ページ 15,000円〜

詳しく見る
React

Reactコーディング代行

デザインデータをReactのコンポーネントとして実装します。既存アプリへの画面追加・UI改修だけでも承ります。

1ページ 18,000円〜

詳しく見る
Next.js

Next.js制作・コーディング代行

検索エンジンに読まれるHTMLを返せるNext.jsで構築します。静的書き出しでレンタルサーバーでも公開できます。

1ページ 18,000円〜

詳しく見る
EC / WordPress

WelcartでのECサイト構築

WordPress専用のネットショップ構築プラグイン。機能面まで踏み込んだカスタマイズができます。

デザイン制作+構築 一式 120万円〜

詳しく見る
EC / EC-CUBE

EC-CUBEでのECサイト構築

国産オープンソースのECパッケージ。決済・受注・在庫まわりを業務に合わせて作り込めます。

デザイン制作+構築 一式 120万円〜

詳しく見る
EC / ASPカート

ECサイト制作代行

Shopify・MakeShop・カラーミーなどのカートに、オリジナルデザインを組み込みます。

構築基本費用 100,000円

詳しく見る

制作のご相談も承っています

デザインデータと画面数をお知らせいただければ、お見積りと納期をご提示します。