レスポンシブデザイン

画面サイズに応じてレイアウトを自動調整し、あらゆるデバイスで最適な表示を実現する手法

CSSUI

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

レスポンシブデザイン (Responsive Design) は、CSS メディアクエリと柔軟なレイアウトで、画面サイズ (スマートフォン、タブレット、デスクトップ) に応じて表示を自動調整する手法である。Ethan Marcotte が 2010 年に提唱した。

viewport メタタグ

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

メディアクエリ

/* モバイルファースト: 小さい画面をデフォルトに */
.container { padding: 1rem; }

/* タブレット以上 */
@media (min-width: 768px) {
  .container { padding: 2rem; max-width: 768px; margin: 0 auto; }
}

/* デスクトップ */
@media (min-width: 1024px) {
  .container { max-width: 1200px; }
}

ブレークポイント

デバイス Tailwind
モバイル < 640px デフォルト
タブレット ≥ 768px md:
デスクトップ ≥ 1024px lg:
ワイド ≥ 1280px xl:

Flexbox + Grid

/* Flexbox: 1列 → 3列 */
.cards { display: flex; flex-wrap: wrap; gap: 1rem; }
.card { flex: 1 1 100%; }
@media (min-width: 768px) { .card { flex: 1 1 calc(33.3% - 1rem); } }

/* Grid: auto-fit で自動調整 */
.grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1rem; }

レスポンシブ画像

<!-- srcset で画面サイズに応じた画像を配信 -->
<img
  src="photo-800.webp"
  srcset="photo-400.webp 400w, photo-800.webp 800w, photo-1200.webp 1200w"
  sizes="(max-width: 768px) 100vw, 50vw"
  alt="Photo"
/>

Container Queries (CSS 2023)

メディアクエリはビューポート幅に基づくが、Container Queries は親コンテナの幅に基づく。

.card-container { container-type: inline-size; }

@container (min-width: 400px) {
  .card { display: flex; }
}

モバイルファースト vs デスクトップファースト

アプローチ メディアクエリ 推奨
モバイルファースト min-width ✅ (モバイルトラフィックが多い)
デスクトップファースト max-width 管理画面など

テスト

Chrome DevTools のデバイスモードで各画面サイズをシミュレートする。実機テストも重要。

レスポンシブデザインの関連書籍も参考になる。

関連用語