構造と装飾が混在し、修正は困難を極めました。
レイアウト変更=HTML書き直しでした。
「仕様」と戦う時代は終わりました。
今は、「デザイン」と向き合う時代です。
ほんの十数年前まで、Web制作の学習コストの半分は「バグとの戦い」と「ブラウザごとの挙動差異の吸収」に費やされていました。 1pxのズレを直すために、構造を根底から書き換える……そんな非生産的な時間は、過去の遺物となりました。
現代のHTML/CSSを学ぶ理由。それは、あなたの思考速度で開発ができるからです。
今日のWeb標準技術は、驚くほど堅牢で、かつ柔軟です。 かつて数百行のコードと画像トリックを駆使して実現していたレイアウトが、今やたった数行のCSSで、しかも美しく実装できます。
セマンティックなHTML は、コードに意味と構造を与え、
モダンなCSS は、あらゆるデバイスに対応するレスポンシブな振る舞いを約束します。
道具は進化しました。もはや、ハック(小手先の技術)を覚える必要はありません。 本質的な仕組みさえ理解すれば、思い描いたUIを最短距離で形にできる。 最も効率的で、最も自由なクリエイティブ・ツールを手に入れましょう。
現代の標準を学ぶ1. 構造と装飾の分離
昔は <font> タグや align 属性でデザインしていました。
しかし今は、HTMLは純粋なドキュメント構造のみを保ち、見た目は全てCSSで制御します。
HTMLはクリーンなまま。
スタイルの変更はCSSファイル1つでOK。
2. ボックスモデル
全ての要素は「四角い箱」です。<td> 以外を知らない人のために、ブロックレベル要素とインライン要素の違いを可視化します。
※ 赤色のボーダーは要素の境界線を示しています。
3. CSSの単位
px だけではありません。画面幅に応じた相対単位 (%, vw) や、文字サイズ基準の rem
を使いこなしましょう。
4. Flexboxの威力
かつての float や table レイアウトの苦しみから解放されましょう。Flexboxなら、要素の配置が自由自在です。
.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行のコードで解決します。
🎮 中央寄せプレイグラウンド →7. 疑似要素の魔法
::before と ::after は、HTMLを汚さずに装飾を追加する「魔法」です。
かつては空の <td> や <img> を使っていた装飾が、今はCSSだけで実現できます。
.ribbon::before, .ribbon::after {
content: '';
position: absolute;
bottom: -10px;
border: 10px solid transparent;
}
.quote::before {
content: '"';
font-size: 4rem;
opacity: 0.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;
}
8. レスポンシブデザイン
メディアクエリを使えば、画面幅に応じてスタイルを切り替えられます。ウィンドウ幅を変えて色の変化を見てみてください。
🎮 レスポンシブプレイグラウンド →/* モバイルファースト: 小さい画面から設計 */
.box { background: red; } /* モバイル */
@media (min-width: 768px) {
.box { background: green; } /* タブレット */
}
@media (min-width: 1024px) {
.box { background: blue; } /* デスクトップ */
}
9. position プロパティ
要素の配置方法を制御します。relativeは元の位置からの相対位置、absoluteは親要素からの絶対位置です。
.absolute-child {
position: absolute;
top: 20px;
right: 20px;
} /* 親要素に position: relative が必要 */
10. CSS変数
--custom-property で変数を定義し、var() で使用します。テーマカラーの一括変更に便利です。
:root {
--primary-color: #38bdf8;
}
.box {
background: var(--primary-color);
}
11. トランジションとアニメーション
transition はホバー時のスムーズな変化、@keyframes は繰り返しアニメーションに使います。
transition (ホバーしてみて)
@keyframes: pulse
@keyframes: slide
12. overflow と z-index
overflow ははみ出したコンテンツの制御、z-index は要素の重なり順序を制御します。
overflow の比較
このテキストははみ出しても隠れます。スクロール不可。
常にスクロールバー表示。コンテンツが少なくても。
必要な時だけスクロールバー表示。
z-index の重なり
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の実際の値を図で確認。