【第3回】HTML解説フォームとテーブルを美しくデザインしよう CSS編【2025年最新版】

公開 更新 約40分で読む著者:admin

第1回でHTMLの基礎、第2回でフォームとテーブルの作り方を学びました。しかし、HTMLだけで作ったWebページは、正直言って「味気ない」ですよね。白い背景に黒い文字、装飾のないボタン…まるで1990年代のWebサイトのようです。

今回は**CSS(Cascading Style Sheets)**を使って、フォームとテーブルを「プロが作ったようなデザイン」に変身させる方法を学びます。難しそうに聞こえるかもしれませんが、実は基本を押さえれば誰でもできます!


この記事で学べること

  • CSSって何?どうやって使うの?
  • フォームをおしゃれにする具体的な方法
  • テーブルを見やすくプロフェッショナルにする技術
  • スマートフォンでも綺麗に見えるレスポンシブデザイン
  • ボタンにカーソルを乗せるとふわっと浮く、そんなアニメーション
  • 実務で使える実践的なデザインパターン

所要時間: 約25分 難易度: ★★☆☆☆(初級〜中級)

前提知識: 第1回 HTML入門ガイドと第2回 フォーム・テーブル編を読んでいることを推奨します。


1. CSSとは?なぜ必要なのか

Webページを構成する3つの言語

Webページは、家づくりに例えるとわかりやすくなります:

言語役割家に例えると
HTML構造(骨組み)柱、壁、屋根などの骨組み
CSSデザイン(見た目)壁紙、塗装、装飾
JavaScript動き(機能)電気、水道、エアコン

HTMLだけで作ったページは、柱と壁だけの建物のようなもの。機能はしますが、見た目が良くありません。そこでCSSを使って「色」「サイズ」「配置」「アニメーション」などを加え、魅力的なデザインに仕上げます。

CSSでできること

  • 文字の色、サイズ、フォントの変更
  • 背景色やグラデーションの設定
  • ボタンや入力欄の装飾
  • レイアウトの調整(横並び、中央揃えなど)
  • ホバー時のアニメーション効果
  • スマートフォン対応(レスポンシブデザイン)

2. CSSの基本を理解しよう

CSSの書き方:3つの要素

CSSは、「誰に」「何を」「どうする」という3つの要素で構成されています。

CODE
h1 {
  color: blue;
  font-size: 24px;
}

分解してみましょう:

  1. h1(セレクタ) → 「誰に」:h1タグに対して
  2. color(プロパティ) → 「何を」:文字色を
  3. blue(値) → 「どうする」:青色にする

これを日本語にすると:**「h1タグの文字色を青色にする」**という意味になります。

実際に試してみよう

HTML(スタイルなし)

CODE
<h1>こんにちは</h1>
<p>これは段落です。</p>

このままだと、ブラウザのデフォルトスタイル(黒い文字、小さめのフォント)で表示されます。

CSS追加後

CODE
h1 {
  color: #3498db;        /* 青色 */
  font-size: 32px;       /* 大きく */
  text-align: center;    /* 中央揃え */
}

p {
  color: #555;           /* グレー */
  line-height: 1.8;      /* 行間を広く */
  font-size: 16px;
}

これで、見出しが大きく青色で中央に表示され、段落は読みやすいグレーの文字で表示されます。


3. CSSをHTMLに適用する3つの方法

方法1: 外部CSSファイル(最も推奨)

CSSを別ファイルに保存し、HTMLから読み込む方法です。実務では必ずこの方法を使います。

メリット:

  • 複数のHTMLページで同じCSSを共有できる
  • 管理しやすい(HTMLとCSSが分離)
  • ページの読み込みが早い(キャッシュが効く)

style.css(CSSファイル)

CODE
body {
  font-family: 'Hiragino Sans', sans-serif;
  background-color: #f5f5f5;
}

h1 {
  color: #2c3e50;
}

index.html(HTMLファイル)

CODE
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <link rel="stylesheet" href="style.css">
  <title>Webページ</title>
</head>
<body>
  <h1>こんにちは</h1>
</body>
</html>

ポイント: <link rel="stylesheet" href="style.css">でCSSファイルを読み込みます。

方法2: 内部CSS(1ページだけの場合)

HTMLの<head>内に<style>タグで直接記述します。

CODE
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>Webページ</title>
  <style>
    body {
      background-color: #f0f0f0;
    }
    
    h1 {
      color: #3498db;
      text-align: center;
    }
  </style>
</head>
<body>
  <h1>こんにちは</h1>
</body>
</html>

使う場面: WordPressの記事内で特別なスタイルを適用したい時など

方法3: インラインCSS(緊急時のみ)

HTML要素に直接style属性で記述します。基本的に避けるべき方法です。

CODE
<h1 style="color: red; font-size: 28px;">こんにちは</h1>

デメリット:

  • 再利用できない
  • 管理が大変
  • CSSの優先順位が最も高く、上書きしづらい

4. セレクタを理解しよう:「誰に」スタイルを適用するか

よく使う基本セレクタ

1. 要素セレクタ:すべての同じタグに適用

CODE
/* すべてのpタグに適用 */
p {
  color: #333;
  line-height: 1.8;
}

/* すべてのh2タグに適用 */
h2 {
  font-size: 24px;
  margin-bottom: 16px;
}

使い所: ページ全体の基本スタイルを設定する時

2. クラスセレクタ:特定のグループに適用(最重要!)

クラスは.クラス名で指定します。実務で最もよく使います。

HTML

CODE
<p>通常の段落</p>
<p class="highlight">強調したい段落</p>
<p class="highlight">こちらも強調</p>

CSS

CODE
.highlight {
  background-color: #fff3cd;  /* 黄色の背景 */
  border-left: 4px solid #ffc107;
  padding: 12px;
  font-weight: bold;
}

結果: class="highlight"が付いた段落だけが黄色背景になります。

命名のコツ:

  • 意味が分かる名前をつける(highlight, button-primary, card-titleなど)
  • 英語の単語を使う
  • 複数の単語は-(ハイフン)でつなぐ

3. IDセレクタ:ただ1つの要素に適用

IDは#ID名で指定します。ページ内で1回だけ使えます。

HTML

CODE
<div id="header">ヘッダー</div>

CSS

CODE
#header {
  background-color: #2c3e50;
  color: white;
  padding: 20px;
}

クラスとIDの使い分け:

  • 複数の要素に使う → クラス
  • 1つだけの特別な要素 → ID

便利な組み合わせセレクタ

子孫セレクタ:「〇〇の中の△△」

CODE
/* article内のすべてのpタグ */
article p {
  font-size: 16px;
  line-height: 1.8;
}

/* nav内のすべてのaタグ */
nav a {
  text-decoration: none;  /* 下線を消す */
  color: #333;
}

複数セレクタ:「〇〇と△△」

CODE
/* h1, h2, h3すべてに同じスタイル */
h1, h2, h3 {
  font-family: 'Georgia', serif;
  color: #2c3e50;
}

5. フォームをおしゃれにデザインしよう

第2回で作った基本的なフォームを、プロフェッショナルなデザインに変身させます。

Before: HTMLだけのフォーム

CODE
<form>
  <label for="name">お名前</label>
  <input type="text" id="name">
  
  <label for="email">メールアドレス</label>
  <input type="email" id="email">
  
  <button type="submit">送信</button>
</form>

このままだと、入力欄が小さく、ボタンも地味で、スマートフォンでは使いにくいです。

After: CSSで装飾したフォーム

以下のCSSを追加すると、見違えるほど良くなります。

CODE
/* フォーム全体のコンテナ */
.form-container {
  max-width: 500px;           /* 最大幅を500pxに */
  margin: 40px auto;          /* 上下40px、左右は中央揃え */
  background-color: white;    /* 白背景 */
  padding: 30px;              /* 内側の余白 */
  border-radius: 8px;         /* 角を丸く */
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);  /* 影をつける */
}

/* ラベル */
label {
  display: block;             /* ブロック要素にする */
  font-weight: bold;          /* 太字 */
  margin-bottom: 8px;         /* 下に余白 */
  color: #333;
}

/* 入力欄 */
input[type="text"],
input[type="email"],
textarea {
  width: 100%;                /* 幅いっぱいに */
  padding: 12px;              /* 内側の余白 */
  border: 2px solid #e0e0e0;  /* 枠線 */
  border-radius: 6px;         /* 角を丸く */
  font-size: 16px;            /* 文字サイズ */
  transition: border-color 0.3s;  /* 滑らかな変化 */
}

/* 入力欄にフォーカスした時 */
input:focus,
textarea:focus {
  outline: none;                              /* デフォルトの枠を消す */
  border-color: #3498db;                      /* 青い枠に */
  box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);  /* ぼんやり光る */
}

/* 送信ボタン */
button[type="submit"] {
  width: 100%;
  padding: 14px;
  background-color: #3498db;  /* 青背景 */
  color: white;
  border: none;
  border-radius: 6px;
  font-size: 16px;
  font-weight: bold;
  cursor: pointer;            /* カーソルを指マークに */
  transition: background-color 0.3s;
}

/* ボタンにマウスを乗せた時 */
button[type="submit]:hover {
  background-color: #2980b9;  /* 少し濃い青に */
}

解説:何が変わったか

  1. max-width: 500pxとmargin: auto → フォームを中央に配置
  2. padding → 要素の内側に余白を作る
  3. border-radius → 角を丸くして柔らかい印象に
  4. box-shadow → 影をつけて立体感を出す
  5. :focus → 入力欄をクリックした時の見た目
  6. :hover → マウスを乗せた時の見た目
  7. transition → 変化を滑らかにする

実践例:お問い合わせフォーム完全版

CODE
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>お問い合わせ</title>
  <style>
    body {
      font-family: 'Hiragino Sans', 'Yu Gothic', sans-serif;
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      min-height: 100vh;
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 20px;
    }
    
    .form-box {
      background: white;
      border-radius: 12px;
      box-shadow: 0 10px 40px rgba(0, 0, 0, 0.2);
      max-width: 500px;
      width: 100%;
      overflow: hidden;
    }
    
    .form-header {
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      color: white;
      padding: 30px;
      text-align: center;
    }
    
    .form-header h1 {
      margin: 0 0 10px 0;
      font-size: 24px;
    }
    
    .form-body {
      padding: 30px;
    }
    
    .form-group {
      margin-bottom: 20px;
    }
    
    label {
      display: block;
      font-weight: 600;
      margin-bottom: 8px;
      color: #333;
    }
    
    input,
    textarea {
      width: 100%;
      padding: 12px;
      border: 2px solid #e0e0e0;
      border-radius: 6px;
      font-size: 16px;
    }
    
    input:focus,
    textarea:focus {
      outline: none;
      border-color: #667eea;
    }
    
    textarea {
      min-height: 120px;
      resize: vertical;
    }
    
    .submit-btn {
      width: 100%;
      padding: 14px;
      background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
      color: white;
      border: none;
      border-radius: 6px;
      font-size: 16px;
      font-weight: bold;
      cursor: pointer;
    }
    
    .submit-btn:hover {
      transform: translateY(-2px);
      box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4);
    }
  </style>
</head>
<body>
  <div class="form-box">
    <div class="form-header">
      <h1>お問い合わせ</h1>
      <p>お気軽にご連絡ください</p>
    </div>
    <div class="form-body">
      <form>
        <div class="form-group">
          <label for="name">お名前</label>
          <input type="text" id="name" required>
        </div>
        <div class="form-group">
          <label for="email">メールアドレス</label>
          <input type="email" id="email" required>
        </div>
        <div class="form-group">
          <label for="message">お問い合わせ内容</label>
          <textarea id="message" required></textarea>
        </div>
        <button type="submit" class="submit-btn">送信する</button>
      </form>
    </div>
  </div>
</body>
</html>

このコードをコピーして、HTMLファイルとして保存し、ブラウザで開いてみてください。美しいグラデーションのフォームが表示されます!


6. テーブルを見やすくデザインしよう

Before: HTMLだけのテーブル

CODE
<table>
  <thead>
    <tr>
      <th>商品名</th>
      <th>価格</th>
      <th>在庫</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>ノートPC</td>
      <td>¥98,000</td>
      <td>在庫あり</td>
    </tr>
    <tr>
      <td>マウス</td>
      <td>¥2,980</td>
      <td>在庫あり</td>
    </tr>
  </tbody>
</table>

HTMLだけだと、線がなくて読みづらく、どこが見出しか分かりにくいです。

After: CSSで見やすくしたテーブル

CODE
table {
  width: 100%;
  border-collapse: collapse;  /* セルの枠線を重ねる */
  margin: 20px 0;
  background-color: white;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

/* ヘッダー行 */
thead tr {
  background-color: #3498db;
  color: white;
  text-align: left;
}

/* ヘッダーのセル */
th {
  padding: 15px 20px;
  font-weight: 600;
}

/* データのセル */
td {
  padding: 12px 20px;
  border-bottom: 1px solid #e0e0e0;
}

/* 偶数行に背景色(ストライプ) */
tbody tr:nth-child(even) {
  background-color: #f9f9f9;
}

/* 行にマウスを乗せた時 */
tbody tr:hover {
  background-color: #e3f2fd;
  cursor: pointer;
}

解説:見やすくするポイント

  1. border-collapse: collapse → セルの枠線を重ねて、二重線を防ぐ
  2. ヘッダーに色をつける → 見出しが一目でわかる
  3. nth-child(even) → 偶数行に背景色(ストライプ模様)
  4. :hover → マウスを乗せると背景色が変わる(インタラクティブ)
  5. padding → セル内に余白を作って読みやすく

実践例:価格表デザイン

CODE
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>料金プラン</title>
  <style>
    body {
      font-family: 'Hiragino Sans', 'Yu Gothic', sans-serif;
      background-color: #f5f7fa;
      padding: 40px 20px;
    }
    
    .pricing-table {
      display: flex;
      gap: 20px;
      max-width: 1000px;
      margin: 0 auto;
      flex-wrap: wrap;
    }
    
    .plan-card {
      background: white;
      border-radius: 12px;
      padding: 30px;
      flex: 1;
      min-width: 280px;
      box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
      text-align: center;
      transition: transform 0.3s;
    }
    
    .plan-card:hover {
      transform: translateY(-10px);
    }
    
    .plan-name {
      font-size: 24px;
      font-weight: bold;
      margin-bottom: 10px;
      color: #2c3e50;
    }
    
    .price {
      font-size: 42px;
      font-weight: bold;
      color: #3498db;
      margin: 20px 0;
    }
    
    .price span {
      font-size: 16px;
      color: #7f8c8d;
    }
    
    .features {
      list-style: none;
      padding: 0;
      margin: 20px 0;
    }
    
    .features li {
      padding: 10px 0;
      border-bottom: 1px solid #ecf0f1;
    }
    
    .plan-btn {
      width: 100%;
      padding: 12px;
      background-color: #3498db;
      color: white;
      border: none;
      border-radius: 6px;
      font-size: 16px;
      cursor: pointer;
    }
    
    .plan-btn:hover {
      background-color: #2980b9;
    }
  </style>
</head>
<body>
  <div class="pricing-table">
    <div class="plan-card">
      <div class="plan-name">無料プラン</div>
      <div class="price">¥0<span>/月</span></div>
      <ul class="features">
        <li>10GB ストレージ</li>
        <li>1ユーザー</li>
        <li>メールサポート</li>
      </ul>
      <button class="plan-btn">今すぐ始める</button>
    </div>
    
    <div class="plan-card">
      <div class="plan-name">スタンダード</div>
      <div class="price">¥1,980<span>/月</span></div>
      <ul class="features">
        <li>100GB ストレージ</li>
        <li>5ユーザー</li>
        <li>優先サポート</li>
      </ul>
      <button class="plan-btn">最も人気</button>
    </div>
    
    <div class="plan-card">
      <div class="plan-name">プレミアム</div>
      <div class="price">¥4,980<span>/月</span></div>
      <ul class="features">
        <li>1TB ストレージ</li>
        <li>無制限ユーザー</li>
        <li>24時間サポート</li>
      </ul>
      <button class="plan-btn">お問い合わせ</button>
    </div>
  </div>
</body>
</html>

7. レスポンシブデザイン:スマホでも綺麗に表示

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

レスポンシブデザインとは、パソコン、タブレット、スマートフォンなど、どのデバイスで見ても最適に表示されるデザインのことです。

現在、Webサイトの約60%以上がスマートフォンから閲覧されています。スマホ対応は必須です!

メディアクエリ:画面サイズで表示を変える

メディアクエリを使うと、「画面幅が〇〇px以下の時は△△のスタイル」という指定ができます。

CODE
/* 基本スタイル(すべての画面サイズ) */
.container {
  width: 100%;
  padding: 20px;
}

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

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

実例:レスポンシブフォーム

CODE
<style>
  .responsive-form {
    max-width: 1000px;
    margin: 0 auto;
    padding: 20px;
  }
  
  .form-row {
    display: flex;
    gap: 20px;
  }
  
  .form-field {
    flex: 1;
  }
  
  /* スマートフォン(767px以下) */
  @media (max-width: 767px) {
    .form-row {
      flex-direction: column;  /* 縦並びに変更 */
    }
    
    input, textarea {
      font-size: 16px;  /* iOSのズームを防ぐ */
    }
  }
</style>

<form class="responsive-form">
  <div class="form-row">
    <div class="form-field">
      <label>姓</label>
      <input type="text">
    </div>
    <div class="form-field">
      <label>名</label>
      <input type="text">
    </div>
  </div>
</form>

ポイント:

  • デスクトップ → 2列表示
  • スマートフォン → 1列表示(縦並び)
  • font-size: 16px以上にすると、iPhoneで自動ズームを防げる

8. アニメーションでインタラクティブに

ホバーエフェクト:マウスを乗せると変化

CODE
.button {
  background-color: #3498db;
  color: white;
  padding: 12px 24px;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  transition: all 0.3s ease;  /* 0.3秒かけて滑らかに変化 */
}

.button:hover {
  background-color: #2980b9;  /* 色が変わる */
  transform: translateY(-3px);  /* 3px浮き上がる */
  box-shadow: 0 4px 12px rgba(52, 152, 219, 0.4);  /* 影がつく */
}

transitionプロパティ: 変化を滑らかにする魔法のプロパティ。これがあるとプロっぽくなります!

ローディングアニメーション

CODE
@keyframes spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

.spinner {
  width: 40px;
  height: 40px;
  border: 4px solid #f3f3f3;
  border-top: 4px solid #3498db;
  border-radius: 50%;
  animation: spin 1s linear infinite;  /* 1秒で1回転、無限ループ */
}

9. よくある質問(FAQ)

Q1. CSSが反映されません。どうすればいいですか?

確認すべきポイント:

  1. HTMLファイルとCSSファイルが同じフォルダにあるか
  2. <link rel="stylesheet" href="style.css">が正しく書かれているか
  3. CSSファイル名のスペルミスはないか
  4. ブラウザのキャッシュをクリアする(Ctrl+F5またはCmd+Shift+R)
  5. ブラウザの開発者ツール(F12)でエラーがないか確認

よくある間違い:

CODE
<!-- ❌ 間違い -->
<link rel="stylesheet" href="styles.css">  <!-- ファイル名が違う -->

<!-- ✅ 正しい -->
<link rel="stylesheet" href="style.css">

Q2. 色の指定方法がたくさんあって混乱します

主な色指定方法:

CODE
.example {
  /* 1. 色名(簡単だが種類が限られる) */
  color: red;
  color: blue;
  color: green;
  
  /* 2. 16進数(#RRGGBB)- 最も一般的 */
  color: #3498db;  /* 青 */
  color: #e74c3c;  /* 赤 */
  color: #fff;     /* 白(#ffffffの短縮形) */
  
  /* 3. RGB(赤・緑・青の値で指定) */
  color: rgb(52, 152, 219);  /* 青 */
  
  /* 4. RGBA(透明度付き) */
  color: rgba(52, 152, 219, 0.5);  /* 半透明の青 */
}

おすすめ: 16進数カラーコードを使いましょう。デザインツールやカラーピッカーで簡単に取得できます。

Q3. padding と margin の違いは?

この2つは初心者が最も混乱するポイントです。図で理解しましょう:

CODE
┌─────────────────────────┐
│      margin(外側)      │  ← 要素の外側の余白
│  ┌───────────────────┐  │
│  │   border(枠線)   │  │
│  │  ┌─────────────┐  │  │
│  │  │   padding   │  │  │  ← 要素の内側の余白
│  │  │  ┌───────┐  │  │  │
│  │  │  │content│  │  │  │  ← 実際の内容
│  │  │  └───────┘  │  │  │
│  │  └─────────────┘  │  │
│  └───────────────────┘  │
└─────────────────────────┘

具体例:

CODE
.box {
  padding: 20px;   /* 内側に20pxの余白 */
  margin: 30px;    /* 外側に30pxの余白 */
  border: 2px solid black;
}

覚え方:

  • padding(パッディング) = 「詰め物」→ 内側の余白
  • margin(マージン) = 「余白」→ 外側の余白

Q4. クラス名はどうやって付ければいいですか?

良いクラス名の例:

CODE
.header { }           /* ヘッダー */
.btn-primary { }      /* プライマリボタン */
.card-title { }       /* カードのタイトル */
.form-control { }     /* フォームの入力欄 */
.text-center { }      /* 中央揃えのテキスト */

避けるべきクラス名:

CODE
.red { }       /* ❌ 色が変わったら意味がない */
.box1 { }      /* ❌ 数字だけでは意味が不明 */
.aaa { }       /* ❌ 意味が分からない */

命名のルール:

  1. 英語を使う(日本語ローマ字はNG)
  2. 意味が分かる名前をつける
  3. 複数の単語は-(ハイフン)でつなぐ
  4. 短すぎず、長すぎず

Q5. スマートフォンで確認するにはどうすればいいですか?

方法1: ブラウザの開発者ツール

  1. ページを開いた状態でF12キーを押す
  2. 左上のスマホアイコンをクリック
  3. 画面サイズを選択(iPhone、Androidなど)

方法2: 実機で確認(推奨)

  1. パソコンとスマホを同じWi-Fiに接続
  2. パソコンのIPアドレスを確認(Windowsはipconfig、Macはifconfig)
  3. スマホのブラウザでhttp://[IPアドレス]/index.htmlにアクセス

方法3: 公開して確認

  • GitHub Pagesなどで公開して、スマホでアクセス

10. 実践課題:あなたも作ってみよう

課題1: 簡単な名刺風プロフィールカード(初級)

目標: CSSの基本を使って、自分の名刺を作ってみましょう。

要件:

  • 名前、職業、SNSリンクを含む
  • 背景色、文字色、フォントサイズを変更
  • 角を丸くする(border-radius)
  • 影をつける(box-shadow)
  • 中央揃え

ヒント:

CODE
.profile-card {
  max-width: 400px;
  margin: 50px auto;
  padding: 30px;
  background-color: white;
  border-radius: 12px;
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
  text-align: center;
}

課題2: お問い合わせフォーム(中級)

目標: 実用的なお問い合わせフォームを作成。

要件:

  • 名前、メール、メッセージの入力欄
  • フォーカス時に枠線の色が変わる
  • 送信ボタンにホバーエフェクト
  • スマートフォン対応(レスポンシブ)

課題3: 価格表(上級)

目標: 3つのプランを横並びで表示する価格表を作成。

要件:

  • 3つのカードを横並び配置(Flexbox使用)
  • 真ん中のカードを少し大きく表示
  • ホバー時に浮き上がるアニメーション
  • スマートフォンでは縦並びに変更

11. さらに学びを深めるために

おすすめの学習リソース

公式ドキュメント:

  • MDN Web Docs (https://developer.mozilla.org/ja/) – 最も信頼できるリファレンス
  • W3Schools (https://www.w3schools.com/) – 初心者向けチュートリアル

デザインの参考サイト:

  • Dribbble (https://dribbble.com/) – デザインのインスピレーション
  • CSS Design Awards – 受賞作品から学ぶ
  • CodePen (https://codepen.io/) – 他の人のコードを見て学ぶ

カラーツール:

  • Adobe Color – カラーパレット作成
  • Coolors – ランダムでおしゃれな配色生成
  • Paletton – 配色理論に基づいた色選び

便利なツール:

  • CSS Gradient Generator – グラデーション作成
  • Box Shadow Generator – 影の効果を視覚的に作成
  • Flexbox Froggy – Flexboxを学べるゲーム

次のステップ:何を学ぶべきか

1週間後のあなた

  • [ ] CSSの基本プロパティ(色、サイズ、余白)をマスター
  • [ ] 簡単なフォームとテーブルをスタイリングできる
  • [ ] ボタンにホバーエフェクトを追加できる

1ヶ月後のあなた

  • [ ] レスポンシブデザインを実装できる
  • [ ] Flexboxで要素を自由に配置できる
  • [ ] アニメーションを使って動きのあるサイトが作れる

3ヶ月後のあなた

  • [ ] CSS Gridで複雑なレイアウトを作成
  • [ ] 実務レベルのWebページを制作
  • [ ] CSSフレームワーク(Bootstrap、Tailwind)を使える

12. よくある間違いと解決法

間違い1: セレクタのスペルミス

CODE
/* ❌ 間違い */
.buttn {
  background-color: blue;
}

/* HTML側 */
<button class="button">送信</button>  <!-- クラス名が違う! -->

/* ✅ 正しい */
.button {
  background-color: blue;
}

対策: コピー&ペーストを活用する。タイプミスを防げます。

間違い2: セミコロンの付け忘れ

CODE
/* ❌ 間違い */
.box {
  color: red
  font-size: 16px;  /* 上のセミコロンがない! */
}

/* ✅ 正しい */
.box {
  color: red;
  font-size: 16px;
}

対策: エディタのシンタックスハイライト機能を使う。ミスがあると色が変わります。

間違い3: 優先順位を理解していない

CSSには優先順位があります。より具体的なセレクタが優先されます。

CODE
/* 優先順位:低 */
p {
  color: blue;
}

/* 優先順位:中 */
.text {
  color: red;
}

/* 優先順位:高 */
#special {
  color: green;
}

/* 優先順位:最高(使わないで!) */
p {
  color: yellow !important;
}

HTML:

CODE
<p class="text" id="special">この文字の色は?</p>

答え: 緑色(IDセレクタが最も優先される)

!importantについて: 最強の優先順位ですが、基本的に使わないでください。後で上書きできなくなります。


13. プロが使うCSSテクニック集

テクニック1: CSS変数で管理しやすくする

色やサイズを変数で管理すると、後で一括変更できて便利です。

CODE
:root {
  /* 色の定義 */
  --primary-color: #3498db;
  --secondary-color: #2ecc71;
  --text-color: #333;
  
  /* サイズの定義 */
  --border-radius: 8px;
  --spacing: 16px;
}

/* 使用例 */
.button {
  background-color: var(--primary-color);
  border-radius: var(--border-radius);
  padding: var(--spacing);
}

.card {
  border: 2px solid var(--primary-color);
  border-radius: var(--border-radius);
}

メリット: メインカラーを変更したい時、--primary-colorの値を変えるだけでサイト全体の色が変わります!

テクニック2: フォントサイズをremで指定

rem(root em)を使うと、アクセシビリティが向上します。

CODE
html {
  font-size: 16px;  /* 基準サイズ */
}

body {
  font-size: 1rem;     /* 16px */
}

h1 {
  font-size: 2rem;     /* 32px */
}

h2 {
  font-size: 1.5rem;   /* 24px */
}

small {
  font-size: 0.875rem; /* 14px */
}

メリット: ユーザーがブラウザのフォントサイズを変更した時、サイト全体のバランスを保ったまま拡大・縮小されます。

テクニック3: Flexboxで簡単中央揃え

要素を上下左右中央に配置する最も簡単な方法です。

CODE
.center-box {
  display: flex;
  justify-content: center;  /* 横方向の中央 */
  align-items: center;      /* 縦方向の中央 */
  height: 100vh;            /* 画面全体の高さ */
}
CODE
<div class="center-box">
  <div>ど真ん中に表示されます</div>
</div>

テクニック4: カスタムチェックボックス

デフォルトのチェックボックスは地味なので、カスタマイズしましょう。

CODE
/* デフォルトのチェックボックスを非表示 */
input[type="checkbox"] {
  display: none;
}

/* カスタムチェックボックス */
.custom-checkbox {
  display: inline-block;
  width: 24px;
  height: 24px;
  border: 2px solid #ddd;
  border-radius: 4px;
  position: relative;
  cursor: pointer;
}

/* チェック時 */
input[type="checkbox"]:checked + .custom-checkbox {
  background-color: #3498db;
  border-color: #3498db;
}

/* チェックマーク */
input[type="checkbox"]:checked + .custom-checkbox::after {
  content: "✓";
  color: white;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
CODE
<label>
  <input type="checkbox">
  <span class="custom-checkbox"></span>
  同意します
</label>

14. パフォーマンスを意識したCSS

ページ表示速度を上げるコツ

1. CSSファイルを圧縮する

開発時(読みやすい):

CODE
.button {
  background-color: #3498db;
  padding: 12px 24px;
  border-radius: 6px;
}

本番環境(圧縮):

CODE
.button{background-color:#3498db;padding:12px 24px;border-radius:6px}

ファイルサイズが小さくなり、読み込みが速くなります。

ツール:

  • CSSMinifier
  • cssnano
  • Autoprefixer(自動でベンダープレフィックスを追加)

2. 不要なスタイルを削除

使っていないCSSルールは削除しましょう。

ツール:

  • PurgeCSS
  • UnCSS

3. フォントの最適化

CODE
/* ❌ すべてのウェイトを読み込む(遅い) */
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900');

/* ✅ 必要なウェイトだけ読み込む(速い) */
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700');

15. まとめ:CSSマスターへの道

この記事で学んだこと

✅ CSSの基本文法(セレクタ、プロパティ、値) ✅ CSSの適用方法(外部・内部・インライン) ✅ フォームを美しくスタイリングする方法 ✅ テーブルを見やすくデザインする技術 ✅ レスポンシブデザインの基礎 ✅ アニメーションとホバーエフェクト ✅ 実務で使えるテクニック集

重要なポイントの復習

1. CSSの基本は「誰に・何を・どうする」

CODE
セレクタ {
  プロパティ: 値;
}

2. クラスセレクタを使いこなす

  • 再利用可能
  • 意味のある名前をつける
  • 複数のクラスを組み合わせられる

3. padding(内側)とmargin(外側)の違い

  • padding = 要素の内側の余白
  • margin = 要素の外側の余白

4. レスポンシブはメディアクエリで

CODE
@media (max-width: 768px) {
  /* スマホ用スタイル */
}

5. ホバーエフェクトで動きをつける

CODE
.button:hover {
  transform: translateY(-2px);
}

学習のロードマップ

今週やること:

  • [ ] 今日の記事のコードを全て試してみる
  • [ ] 自分でシンプルなお問い合わせフォームを作る
  • [ ] ボタンに3種類のホバーエフェクトを追加してみる

来週やること:

  • [ ] レスポンシブデザインの練習
  • [ ] Flexboxでレイアウトを組む
  • [ ] 既存のWebサイトを模写コーディング

来月やること:

  • [ ] CSS Gridを学ぶ
  • [ ] アニメーションライブラリ(Animate.css)を試す
  • [ ] ポートフォリオサイトを作成

次回予告

第4回: JavaScriptで動きをつけよう – インタラクティブなWebページを作る

次回は、JavaScriptを使ってフォームに動的な機能を追加します:

  • フォームのリアルタイム検証(入力中にエラー表示)
  • ボタンクリックで要素を表示・非表示
  • スムーズスクロール実装
  • モーダルウィンドウの作成
  • APIからデータを取得して表示

HTMLとCSSで「見た目」を作り、JavaScriptで「動き」をつければ、本格的なWebサイトの完成です!


最後に:実践が最高の学習法

CSSは、読むだけでは身につきません。実際に手を動かして、試行錯誤することが最も重要です。

今すぐできるアクション

  1. この記事のコードをすべて試す – コピペして動作確認
  2. 色を変えてみる – 自分好みの配色に変更
  3. サイズを変えてみる – padding、margin、font-sizeを調整
  4. 新しいデザインに挑戦 – 好きなWebサイトを真似てみる

困った時は

  • エラーが出たら: ブラウザの開発者ツール(F12)でエラーを確認
  • 思い通りにならない: まずはシンプルに。複雑にしすぎない
  • 分からないことがある: MDN Web Docsで調べる、コミュニティで質問

大切なのは完璧を目指さないこと。最初は誰でもうまくいきません。少しずつ、楽しみながら学んでいきましょう!

さあ、あなたもCSSマスターへの第一歩を踏み出しましょう!

\ 最新情報をチェック /

記事一覧に戻る

コメントを書く

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です