レッスン12: どんな画面でもキレイに見せる!レスポンシブデザイン入門
スマートフォン、タブレット、PCなど、どんな画面サイズでも美しく表示されるレスポンシブデザインの基本を学びます。
🎯 学習目標
- レスポンシブデザインの必要性と仕組みを理解する
- ビューポートとmetaタグの役割を理解する
- メディアクエリの基本的な書き方を覚える
- 実際にレスポンシブなレイアウトを作成できる
📚 レッスン
1. レスポンシブデザインとは
レスポンシブデザインとは、スマートフォン、タブレット、パソコンなど、さまざまな画面サイズに自動的に対応して、どんな端末でも読みやすく美しく表示されるWebデザインの手法です。
なぜレスポンシブデザインが必要なの?
- 多様な端末:今では多くの人がスマホでWebサイトを見る
- ユーザビリティ:画面サイズに関係なく使いやすいサイトにしたい
- SEO効果:Googleもモバイル対応サイトを評価している
- 保守性:1つのHTML・CSSで全ての端末に対応できる
2. ビューポートの設定
レスポンシブデザインを作る第一歩は、ビューポートの設定です。ビューポートとは「ブラウザがWebページを表示する領域」のことです。
必須のmetaタグ
<meta name="viewport" content="width=device-width, initial-scale=1.0">
各設定の意味
設定 | 意味 |
---|---|
width=device-width |
ページの幅を端末の画面幅に合わせる |
initial-scale=1.0 |
最初の表示倍率を100%にする |
3. メディアクエリの基本
メディアクエリは「画面サイズが○○pxより小さい(大きい)ときだけ、このCSSを適用する」という条件付きのスタイル指定ができる機能です。
基本的な書き方
/* 通常のスタイル(全ての画面サイズに適用) */
.box {
width: 300px;
background-color: lightblue;
padding: 20px;
}
/* スマートフォン(幅600px以下)のときだけ適用 */
@media screen and (max-width: 600px) {
.box {
width: 100%;
background-color: lightcoral;
font-size: 14px;
}
}
min-widthとmax-width
メディアクエリでは、min-width
とmax-width
という2つの重要な条件指定があります。これらを理解することで、効果的なレスポンシブデザインが可能になります。
min-width: 600px
→ 「最小幅が600px以上」 → 大きい画面で適用max-width: 600px
→ 「最大幅が600px以下」 → 小さい画面で適用
条件 | 意味 | 使用例 |
---|---|---|
min-width |
「指定した幅以上」のとき適用 |
|
max-width |
「指定した幅以下」のとき適用 |
|
📐 モバイルファーストvsデスクトップファースト
/* 基本スタイル(スマホ用) */
.box { width: 100%; }
/* タブレット以上 */
@media (min-width: 768px) {
.box { width: 50%; }
}
/* PC以上 */
@media (min-width: 1024px) {
.box { width: 33.33%; }
}
/* 基本スタイル(PC用) */
.box { width: 33.33%; }
/* タブレット以下 */
@media (max-width: 1023px) {
.box { width: 50%; }
}
/* スマホ以下 */
@media (max-width: 767px) {
.box { width: 100%; }
}
ブレイクポイント
ブレイクポイントとは?
ブレイクポイントとは、レスポンシブデザインで「この画面サイズを境にレイアウトを変更する」という境界線のことです。簡単に言うと、「スマホ用・タブレット用・PC用に切り替わるポイント」です。
一般的なブレイクポイント
📱モバイルファースト方式(推奨)
モバイルファースト方式では、最初にスマートフォン用のスタイルを定義し、画面が大きくなるにつれてスタイルを追加していきます。
/* スマートフォン(デフォルト、320px〜) */
.container {
width: 100%;
padding: 10px;
}
/* タブレット(768px以上) */
@media (min-width: 768px) {
.container {
width: 750px;
margin: 0 auto;
}
}
/* デスクトップ(1024px以上) */
@media (min-width: 1024px) {
.container {
width: 1000px;
}
}
/* 大画面(1200px以上) */
@media (min-width: 1200px) {
.container {
width: 1170px;
}
}
📺 デモ:メディアクエリの動作確認
このボックスをチェック!
ブラウザの幅を変えてみてください
💡 ブラウザのウィンドウを狭くすると、ボックスの色とサイズが変わります!
4. レスポンシブレイアウトを作るコツ
① 幅を%で指定する
固定のpx
値ではなく、%
やvw
といった相対単位を使います。
%での幅指定は、親要素に対する相対的なサイズを表します。例えば
width: 90%
は「親要素の幅の90%」という意味です。
これにより、画面サイズに応じて自動的にサイズが調整されるため、どんなデバイスでも適切な大きさで表示されます。
/* ❌ 固定幅(レスポンシブじゃない) */
.container {
width: 800px;
}
/* ✅ 相対幅(レスポンシブ) */
.container {
width: 90%;
max-width: 800px;
}
相対単位のメリット:
- 自動調整:画面サイズに合わせて自動的にサイズが変わる
- 比率の維持:異なるデバイスでも一定の比率でレイアウトを維持できる
- 柔軟性:ユーザーのブラウザサイズ変更にも対応できる
よく使われる相対単位:
単位 | 説明 | 使用例 |
---|---|---|
% |
親要素に対する割合 | width: 50%; |
vw |
ビューポート幅の1% | width: 100vw; |
vh |
ビューポート高さの1% | height: 50vh; |
em |
親要素のフォントサイズを基準 | margin: 2em; |
rem |
ルート要素のフォントサイズを基準 | font-size: 1.2rem; |
② 画像を柔軟にする
画像は大きなサイズで用意されていることが多く、小さな画面に表示するとはみ出してしまいます。レスポンシブデザインでは画像も画面サイズに合わせて自動的にリサイズする必要があります。
スマートフォンなどの小さな画面では、大きな画像がそのまま表示されると、横にスクロールしなければならなくなり、ユーザビリティが低下します。画像を親要素に収まるようにすることで、どんな画面サイズでも見やすくなります。
img {
max-width: 100%;
height: auto;
}
このCSSの効果
- max-width: 100% - 画像が親要素の幅を超えないようにする(はみ出し防止)
- height: auto - 幅に合わせて高さを自動調整し、アスペクト比(縦横比)を維持する
📺 デモ:柔軟な画像

画面幅が小さくなると横スクロールが必要になる

画面幅に合わせて自動的にサイズ調整される
💡 ブラウザのウィンドウサイズを変更して、両方の画像の動作の違いを確認してみてください。
③ Flexboxでレイアウトを切り替える
パソコンでは横並び、スマホでは縦並びにするにはFlexboxを使うと簡単に切り替えることができます。
FlexboxはCSSの機能の一つで、要素の配置や並び方を柔軟に制御できます。特にレスポンシブデザインでは、画面サイズに応じてレイアウトを簡単に変更できる強力なツールです。
.container {
display: flex;
gap: 20px;
}
.box {
flex: 1;
padding: 20px;
background: #e0e0e0;
}
/* スマートフォンでは縦並びに */
@media screen and (max-width: 600px) {
.container {
flex-direction: column;
}
}
コードの解説:
プロパティ | 説明 |
---|---|
display: flex; |
要素をFlexコンテナにする(Flexboxを有効にする) |
gap: 20px; |
Flex項目間の間隔を20pxに設定 |
flex: 1; |
子要素(box)が利用可能なスペースを均等に分け合う |
flex-direction: column; |
Flex項目を縦方向(列)に並べる(デフォルトはrow で横並び) |
レスポンシブ対応のポイント:
- デフォルトでは
flex-direction: row;
(横並び)になっている - 小さな画面(600px以下)では
flex-direction: column;
(縦並び)に切り替える - これだけで、PC用とスマホ用のレイアウトを簡単に切り替えられる
📺 デモ:2カラムレイアウト
Box 1
パソコンでは横並び
Box 2
スマホでは縦並び
💡 ブラウザの幅を変えて、レイアウトの変化を確認してみてください!
今日のまとめ
- レスポンシブデザインは、どんな画面サイズでも美しく表示される手法
- ビューポートの設定(
<meta name="viewport">
)が必須 - メディアクエリで画面サイズに応じてスタイルを切り替える
- 幅は%で指定し、Flexboxで柔軟なレイアウトを作る
✍️ 演習問題
学んだ内容を使って、実際にレスポンシブなページを作ってみましょう。
演習1:2カラムレイアウト
パソコンでは横並び、スマホでは縦並びになるレイアウトを作ってみましょう。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>レスポンシブレイアウト</title>
<style>
.container {
display: flex;
gap: 20px;
padding: 20px;
}
.box {
flex: 1;
padding: 20px;
background: #e0e0e0;
border-radius: 8px;
text-align: center;
}
/* スマートフォン用のスタイルを設定します */
@media screen and (max-width: 600px) {
}
</style>
</head>
<body>
<div class="container">
<div class="box">
<h3>コンテンツ1</h3>
<p>ここに内容を書きます。パソコンでは横並び、スマホでは縦並びになります。</p>
</div>
<div class="box">
<h3>コンテンツ2</h3>
<p>レスポンシブデザインの基本的な考え方を実践してみましょう。</p>
</div>
</div>
</body>
</html>
やってみよう
- 上記のコードを右側のエディタに貼り付ける
- 画面が小さいと縦並び、画面が大きいと横並びにするCSSを追加する
- エディタの「Defaultボタン」と「Largeボタン」をクリックして大きさを変えて、動作を確認する
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>レスポンシブレイアウト</title>
<style>
.container {
display: flex;
gap: 20px;
padding: 20px;
}
.box {
flex: 1;
padding: 20px;
background: #e0e0e0;
border-radius: 8px;
text-align: center;
}
/* スマートフォン用のスタイルを設定します */
@media screen and (max-width: 600px) {
.container {
flex-direction: column;
}
}
</style>
</head>
<body>
<div class="container">
<div class="box">
<h3>コンテンツ1</h3>
<p>ここに内容を書きます。パソコンでは横並び、スマホでは縦並びになります。</p>
</div>
<div class="box">
<h3>コンテンツ2</h3>
<p>レスポンシブデザインの基本的な考え方を実践してみましょう。</p>
</div>
</div>
</body>
</html>
解説:
- メディアクエリの使い方:画面幅が600px以下のときに
@media screen and (max-width: 600px) { }
内のスタイルが適用されます。 - flex-direction: column:このプロパティを追加することで、小さな画面では要素が縦方向に積み重なるようになります。デフォルトでは
row
(横並び)です。 - レスポンシブデザインのポイント:
- 大きな画面では、
display: flex
のデフォルト動作により要素が横に並びます - 小さな画面では、メディアクエリで
flex-direction: column
に変更することで縦並びになります flex: 1
により、各ボックスが利用可能なスペースを均等に分け合います
- 大きな画面では、
- 実際の動作:ブラウザの幅を変えると、600px以下では縦並び、それより大きいと横並びになります。これはスマートフォンとパソコンでの表示の違いを再現しています。
このような方法でFlexboxとメディアクエリを組み合わせると、さまざまなデバイスに対応したレスポンシブなレイアウトを簡単に作成できます。
✅ 理解度チェック
📚 リファレンス
レスポンシブデザインで使用する主要なCSSプロパティと概念:
- @media:条件付きでCSSを適用するルール
- viewport:ブラウザの表示領域の設定
- max-width/min-width:要素の最大・最小幅の指定
- flex-direction:Flexboxの並び方向を制御
詳細については、CSSリファレンスをご覧ください。
📘 次回予告
次回(レッスン13)は今まで学んだ内容の総仕上げ!ポートフォリオページのデザインを行います。これまで学んだCSSの知識を使って、実際のWebサイトを作成してみましょう。