edubun
日本語

小さなページにスタイルをつける

HTML コースのパン屋のページは、40 行ほどの CSS で色、余白、レイアウトが決まります。HTML はまったく変わりません。

ルールより先に決めごとを

ルールを書く前に、いくつか決めておきましょう。アクセントカラーを一つ、十分なコントラストのある文字色と背景色、フォントスタックを一つ、基本の大きさ、そしてどこでもくり返し使う余白の段階(たとえば 8、16、24 ピクセル)です。少しの値をくり返し使うページは、落ち着いていて意図がはっきり見えます。ボックスごとに少しずつ違うマージンがついたページは、なぜかはだれも言えなくても、ごちゃごちゃして見えます。CSS には、このための機能があります。カスタムプロパティです。

カスタムプロパティ

カスタムプロパティは、ハイフン二つで始まる自分で考えた名前で、値を一つもちます。--accent: #1a5fb4; のように書きます。決めごとは :root(html 要素のこと)に一度だけ定義し、var() でどこでも使います。background: var(--accent); のようにします。カスタムプロパティは文字のプロパティと同じように継承されるので、どの要素もルートで定義されたものを読めます。これで、サイト全体のアクセントカラーを変えるには一行を書きかえるだけになります。メディアクエリの中でプロパティを定義しなおすこともできます。たとえば prefers-color-scheme: dark のときに色を入れかえる、といった使い方です。

:root {
  --accent: #1a5fb4;     /* 6.29:1 on white */
  --ink: #222;
  --paper: #fffdf8;
  --space: 16px;
}
body {
  margin: 0;
  font-family: system-ui, sans-serif;
  line-height: 1.6;
  color: var(--ink);
  background: var(--paper);
}
header { display: flex; justify-content: space-between; align-items: center;
         flex-wrap: wrap; gap: var(--space); padding: var(--space); }
nav ul { display: flex; gap: var(--space); list-style: none; margin: 0; padding: 0; }
main { max-width: 60rem; margin: 0 auto; padding: var(--space); }
.cards { display: grid; gap: var(--space);
         grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.card { padding: var(--space); border: 1px solid #ddd; border-radius: 8px; }
img { max-width: 100%; height: auto; }
.btn { background: var(--accent); color: white; border: 0;
       padding: 8px var(--space); border-radius: 6px; font: inherit; }
.btn:hover { background: #154c90; }
.btn:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }
パン屋のページ用の、小さいけれど完全なスタイルシート。#154c90 はアクセントカラーを少し暗くした色です。

スタイルシートを上から順に読む

上のスタイルシートには、ほとんどすべての単元の内容が使われています。ルートには決めごとが入っています。body はフォント、行の高さ、色を一度だけ指定し、継承によってそれがすべての段落に伝わります。ヘッダーは折り返しありのフレックスの行なので、せまいスマートフォンでは、メニューは押しこまれずに名前の下へ移ります。main には max-width と margin: 0 auto がついていて、行を読みやすい長さに保ち、広い画面では内容を中央に置きます。カードは auto-fill のグリッドの書き方を使っているので、メディアクエリなしで一列から何列にも組みかわり、画像ものび縮みします。ボタンにはホバーしたときの色がつき、そして同じくらい大事なこととして、キーボードを使う人のための見えるフォーカスのアウトラインがついています。

実際の画面で確かめる

CSS のテストとは、見ることです。せまいウィンドウ(WCAG のリフローの確認には 320 ピクセル)と広いウィンドウでページを開き、横スクロールや、端にくっついた文字がないか見ましょう。200 パーセントに拡大してみます。Tab キーでページを順にたどり、フォーカスの位置がいつも見えるか確かめます。開発者ツールで文字とボタンのコントラストを調べます。ダークモードや動きを減らす設定に合わせたスタイルを書いたなら、システムのその設定をオンにしてみます。ブラウザーの開発者ツールでは、どんな値でもその場で変えられ、どの要素のボックスモデルも見られます。なぜそれがそこにあるのか、という疑問に答えるいちばん速い方法です。

ここから先は、同じ部品をどんなサイトにも広げていけます。大きなプロジェクトでは、スタイルシートをいくつものファイルに分け、クラスにはその部品が何であるか(カード、ボタン、サイトのヘッダー)で名前をつけ、共有するカスタムプロパティを短い一覧にまとめます。それでも、その下にあるルールは、この九つの単元で学んだものです。

カスタムプロパティ--name: value; と書き、var(--name) で読む
:roothtml 要素。共有する値を置く場所
var()カスタムプロパティの値を使う
:hover要素の上にポインターがある
:focus-visible見えるキーボードフォーカス。アウトラインを消したら、かならず別のスタイルをつける
余白の段階8、16、24 のような、くり返し使う少しの余白の値
  1. カスタムプロパティの名前は何で始まりますか?
    • ハイフン二つ
    • ドル記号
    • アットマーク
  2. --accent の値はどうやって使いますか?
    • var(--accent)
    • get(--accent)
    • $accent
  3. 共有する値を :root に定義するのはなぜですか?
    • カスタムプロパティは継承されるので、どの要素も読めるから
    • カスタムプロパティを受けつけるのは :root だけだから
    • 速くなるから
  4. 白地の #1a5fb4 のコントラスト比は、小数第二位まで丸めるといくつですか?
  5. ヘッダーに flex-wrap: wrap を使うのはなぜですか?
    • せまい画面で、メニューが押しこまれずに名前の下へ移るように
    • メニューを隠すため
    • 文字を太字にするため
  6. キーボードを使う人のために、ボタンにかならず必要なものは何ですか?
    • 見えるフォーカスのスタイル
    • ホバーのアニメーション
    • 影
  7. メディアクエリなしで、カードを一列から何列にもできるレイアウトはどれですか?
    • repeat(auto-fill, minmax(180px, 1fr))
    • grid-template-columns: 180px
    • display: block
  8. --space は 16px です。calc(var(--space) * 1.5) は何ピクセルですか?
  9. 少しの余白の値をどこでもくり返し使うのはなぜですか?
    • ページに統一感が出て、変更もしやすくなるから
    • ブラウザーが求めるから
    • コントラストがよくなるから
ポイント
  • まず色、フォント、余白の段階を決め、カスタムプロパティとして :root に入れる。
  • body で文字のスタイルを一度だけ指定。ヘッダーはフレックス、カードはグリッド、画像はのび縮み。
  • 320px、200% 拡大、Tab キー、開発者ツールで確かめる。
このコースの出典 (6)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
  • every code exercise checked with a Playwright probe against a reference solution.

確認日: 2026-10-17