「仕様」と戦う時代は終わりました。
今は、「デザイン」と向き合う時代です。

ほんの十数年前まで、Web制作の学習コストの半分は「バグとの戦い」と「ブラウザごとの挙動差異の吸収」に費やされていました。 1pxのズレを直すために、構造を根底から書き換える……そんな非生産的な時間は、過去の遺物となりました。

現代のHTML/CSSを学ぶ理由。それは、あなたの思考速度で開発ができるからです。

今日のWeb標準技術は、驚くほど堅牢で、かつ柔軟です。 かつて数百行のコードと画像トリックを駆使して実現していたレイアウトが、今やたった数行のCSSで、しかも美しく実装できます。

セマンティックなHTML は、コードに意味と構造を与え、
モダンなCSS は、あらゆるデバイスに対応するレスポンシブな振る舞いを約束します。

道具は進化しました。もはや、ハック(小手先の技術)を覚える必要はありません。 本質的な仕組みさえ理解すれば、思い描いたUIを最短距離で形にできる。 最も効率的で、最も自由なクリエイティブ・ツールを手に入れましょう。

現代の標準を学ぶ
Phase 1

1. 構造と装飾の分離

昔は <font> タグや align 属性でデザインしていました。 しかし今は、HTMLは純粋なドキュメント構造のみを保ち、見た目は全てCSSで制御します。

📖 詳しく学ぶ →
過去(2000年代)
Legacy
<table width="100%" border="0"> <tr> <td align="center"> <font color="red">警告!</font> </td> </tr> </table>
警告!

構造と装飾が混在し、修正は困難を極めました。
レイアウト変更=HTML書き直しでした。

現代
Modern
/* CSS */ .alert { text-align: center; color: red; }
警告!

HTMLはクリーンなまま。
スタイルの変更はCSSファイル1つでOK。

2. ボックスモデル

全ての要素は「四角い箱」です。<td> 以外を知らない人のために、ブロックレベル要素とインライン要素の違いを可視化します。

🎮 プレイグラウンドで試す →
Box 1
Box 2
Box 3

※ 赤色のボーダーは要素の境界線を示しています。

3. CSSの単位

px だけではありません。画面幅に応じた相対単位 (%, vw) や、文字サイズ基準の rem を使いこなしましょう。

🎮 単位プレイグラウンド →
width: 300px (固定)
width: 50% (親要素の半分)
width: 50vw (画面幅の半分)
font-size: 1.5rem
Phase 2

4. Flexboxの威力

かつての floattable レイアウトの苦しみから解放されましょう。Flexboxなら、要素の配置が自由自在です。

🎮 Flexbox プレイグラウンド →
1
2
3
.container {
  display: flex;
  justify-content: flex-start;
  align-items: stretch;
}

5. Gridシステム

2次元レイアウトのための最強ツール。行と列を定義するだけで、複雑な「聖杯レイアウト」も一瞬で完成します。

🎮 Grid プレイグラウンド →
ヘッダー
サイドバー
メインコンテンツ
.container {
  display: grid;
  grid-template-columns: 200px 1fr 1fr;
  grid-template-areas:
    "header header header"
    "sidebar main main"
    "footer footer footer";
}

6. 究極の中央寄せ

「上下中央寄せ」は、かつてCSS最大の難関でした。しかし現代では、たった2行のコードで解決します。

🎮 中央寄せプレイグラウンド →
古いやり方
Legacy
中央
.child { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
現代のやり方
Modern
中央!
.parent { display: grid; place-items: center; }
Phase 3

7. 疑似要素の魔法

::before::after は、HTMLを汚さずに装飾を追加する「魔法」です。
かつては空の <td><img> を使っていた装飾が、今はCSSだけで実現できます。

🎮 疑似要素プレイグラウンド →
リボン見出し
NEW FEATURE
.ribbon::before, .ribbon::after {
  content: '';
  position: absolute;
  bottom: -10px;
  border: 10px solid transparent;
}
引用符デザイン
CSSは、想像力を現実に変えるツールです。
.quote::before {
  content: '"';
  font-size: 4rem;
  opacity: 0.3;
}
自動ナンバリング
  1. 計画を立てる
  2. 実装する
  3. 検証する
.step::before {
  content: counter(step);
  counter-increment: step;
}
カスタムチェックボックス
.check::after {
  content: '';
  border: solid white;
  transform: rotate(45deg);
}

ボーナス: ツールチップ

data-* 属性と attr() を組み合わせれば、JavaScriptなしでツールチップも作れます。

ホバーしてみて
<!-- HTML -->
<span data-tooltip="ツールチップの内容">ホバーしてみて</span>

/* CSS */
.tooltip::after {
  content: attr(data-tooltip);  /* ← ここがポイント! */
  position: absolute;
  bottom: 100%;
  opacity: 0;
  transition: opacity 0.2s;
}
.tooltip:hover::after {
  opacity: 1;
}
Phase 4

8. レスポンシブデザイン

メディアクエリを使えば、画面幅に応じてスタイルを切り替えられます。ウィンドウ幅を変えて色の変化を見てみてください。

🎮 レスポンシブプレイグラウンド →
ブラウザ幅: --px | 色: デスクトップ
リサイズしてみて!
/* モバイルファースト: 小さい画面から設計 */
.box { background: red; }  /* モバイル */

@media (min-width: 768px) {
  .box { background: green; }  /* タブレット */
}
@media (min-width: 1024px) {
  .box { background: blue; }  /* デスクトップ */
}

9. position プロパティ

要素の配置方法を制御します。relativeは元の位置からの相対位置、absoluteは親要素からの絶対位置です。

🎮 Positionプレイグラウンド →
static (デフォルト)
relative (top: 10px, left: 10px)
absolute (top: 20px, right: 20px)
.absolute-child {
  position: absolute;
  top: 20px;
  right: 20px;
}  /* 親要素に position: relative が必要 */

10. CSS変数

--custom-property で変数を定義し、var() で使用します。テーマカラーの一括変更に便利です。

🎮 CSS変数プレイグラウンド →
この色が変わります
:root {
  --primary-color: #38bdf8;
}
.box {
  background: var(--primary-color);
}

11. トランジションとアニメーション

transition はホバー時のスムーズな変化、@keyframes は繰り返しアニメーションに使います。

🎮 Animationプレイグラウンド →

transition (ホバーしてみて)

@keyframes: pulse

@keyframes: slide

12. overflow と z-index

overflow ははみ出したコンテンツの制御、z-index は要素の重なり順序を制御します。

🎮 Overflow/Z-indexプレイグラウンド →

overflow の比較

hidden
このテキストははみ出しても隠れます。スクロール不可。
scroll
常にスクロールバー表示。コンテンツが少なくても。
auto
必要な時だけスクロールバー表示。

z-index の重なり

z-index: 1
z-index: 2
z-index: 3
警告

13. バッドプラクティス集

やってしまいがちな悪い習慣。これらを避けるだけで、コードの品質が大きく向上します。

⚠️ !important の乱用

優先度を無理やり上書きすると、後からの修正が困難になります。まずはセレクタの詳細度を見直しましょう。

⚠️ インラインスタイル

style="..." で直接書くと、保守性が低下します。CSSファイルに分離しましょう。

⚠️ IDセレクタの過剰使用

#id は詳細度が高すぎるため、スタイリングには .class を使いましょう。

⚠️ マジックナンバー

margin-top: -47px; のような謎の数値。なぜその値なのかコメントを残すか、設計を見直しましょう。

ヒント

14. デバッグ手法

ブラウザのDevToolsを使いこなせば、CSSの問題解決が勇気急上。

🔍 DevToolsを開く

F12 または Cmd + Option + I (Mac) / Ctrl + Shift + I (Windows)

🎯 要素を検証

要素を右クリック →「検証」で、適用されているCSSを確認できます。

✅ スタイルのトグル

Stylesパネルでチェックボックスをクリックすると、スタイルをON/OFFできます。

📏 Box Modelの可視化

Computedタブで、margin/padding/borderの実際の値を図で確認。