edubun
日本語

セレクターとカスケード

二つのルールが同じ要素に違う色を指定したとき、CSS は当てずっぽうでは決めません。セレクターを比べ、id はクラスがいくつあっても勝ちます。

要素を選ぶ

セレクターは、ページの中の要素に一致するパターンです。いちばん簡単なものは、要素名、クラス、id で一致させます。p は型セレクターで、すべての段落に一致します。.note はクラスセレクターで、class="note" をもつすべての要素に一致します。一つの要素が空白で区切った複数のクラスをもつこともでき、一つのクラスを多くの要素に使うこともできます。#intro は id セレクターで、id="intro" をもつただ一つの要素に一致します。全称セレクター * はすべてに一致します。

p { line-height: 1.5; }            /* every p */
.note { background: #fff4d6; }     /* class="note" */
#intro { font-size: 20px; }        /* id="intro" */
h1, h2 { font-weight: 600; }       /* group: h1 and h2 */
nav a { text-decoration: none; }   /* a anywhere inside nav */
ul > li { margin: 4px 0; }         /* li that is a direct child of ul */
a:hover { text-decoration: underline; }
input[type="email"] { width: 20em; }
単純セレクター、グループ化、組み合わせ、疑似クラス、属性セレクター。

セレクターを組み合わせる

コンマは同じ宣言を共有するセレクターをまとめるので、h1, h2 は両方にスタイルを適用します。空白は子孫結合子です。nav a は、nav の中にあるリンクに、どんなに深くても一致します。> はもっと厳しく、直接の子だけに一致します。a.active のように二つの単純セレクターを空白なしで続けて書くと、一つの要素が両方に一致しなければなりません。つまり、クラス active ももっているリンクです。角かっこで書く属性セレクターは、input[type="email"] のように属性で一致させます。

コロン一つで書く疑似クラスは、特定の状態や位置にある要素を選びます。:hover はポインターが上にあるとき、:focus-visible はキーボードのフォーカスがあるとき、:first-child は親の最初の子であるときです。コロン二つで書く疑似要素は、::first-line や ::placeholder のように、要素の一部分にスタイルを適用します。

ルールがぶつかったとき

同じ要素の同じプロパティを、いくつものルールが指定することはよくあります。どれが勝つかを決めるのが、CSS の C にあたるカスケードです。ブラウザー自身のスタイルと !important を別にすれば、ほとんどの場合は二つの問いで決まります。一つ目は、どちらのセレクターの詳細度が高いかです。詳細度は三つの数で数えます。id の数、次にクラスの数(属性セレクターと疑似クラスを含む)、そして要素名の数です。#menu a は 1-0-1、.active は 0-1-0、nav a は 0-0-2 です。数は左から比べるので、id が一つあればクラスがいくつあっても勝ちます。二つ目は、詳細度が同じなら、スタイルシートの後ろにあるルールが勝つということです。

インラインの style 属性はどんなセレクターにも勝ち、!important をつけた宣言はふつうの宣言に勝ちます。どちらもすぐ直せるので使いたくなりますが、次の変更が難しくなります。それを上書きするには、同じものをさらに重ねるしかないからです。多くのチームは詳細度を低くそろえ、主にクラスでスタイルをつけて、ファイルの中の順番だけで結果を予想できるようにしています。

継承

プロパティの中には、親から子へ自動的に受けつがれるものがあります。body に color や font-family を指定すると、中にあるすべての段落、リスト、表のセルがそれを受けつぎます。ただし、自分で指定するルールがある場合は別です。文字に関するプロパティはふつう継承されますが、width、padding、border、margin などのボックスに関するプロパティは継承されません。section につけたボーダーが、中のすべての段落のまわりに現れないのはこのためです。キーワード inherit を使うと、プロパティに親の値を強制的にコピーさせられます。

クラス名は、見た目ではなく、それが何であるかでつけましょう。デザイナーが色を赤からオレンジに変えても .warning は意味が通りますが、.red-text は通りません。id は一つしかないので、スタイルづけよりもリンク先やフォームのラベルのためにとっておくのがよく、そうすると詳細度も低く保てます。

型セレクターp、h1、a:その名前のすべての要素
クラスセレクター.name:そのクラスをもつすべての要素
id セレクター#name:その id をもつただ一つの要素
子孫結合子空白:nav a = nav の中のどこかにある a
疑似クラス:hover、:focus-visible:状態や位置
詳細度id-クラス-型の順に、左から比べる
カスケードどの宣言が勝つかを決めるしくみ
継承文字に関するプロパティは親から子へ受けつがれる
  1. <p class="note"> に一致するセレクターはどれですか?
    • .note
    • #note
    • note
  2. nav a は何に一致しますか?
    • nav の中のどこかにあるリンク
    • nav 要素とすべてのリンク
    • nav の直接の子であるリンクだけ
  3. h1, h2 は何をしますか?
    • h1 と h2 の両方にルールを適用する
    • h1 の中の h2 に一致する
    • 何にも一致しない
  4. #menu .item a の詳細度はいくつですか?
    • 1-1-1
    • 0-2-1
    • 1-0-2
  5. .a.b.c(0-3-0)と #x(1-0-0)が、一つの要素に違う色を指定しています。どちらが勝ちますか?
    • #x
    • .a.b.c
    • The one written later
  6. 二つのルールの詳細度が同じです。どちらが勝ちますか?
    • スタイルシートの後ろにあるほう
    • 前にあるほう
    • どちらも適用されない
  7. 既定で継承されるプロパティはどれですか?
    • color
    • border
    • padding
  8. キーボードのフォーカスがある要素にスタイルを適用する疑似クラスはどれですか?
    • :focus-visible
    • :hover
    • :first-child
  9. a.active は何に一致しますか?
    • クラス active をもつリンク
    • リンクの中にある、クラス active をもつ要素
    • すべてのリンクとすべての .active 要素
  10. ふだんの修正に !important を避けるのはなぜですか?
    • さらに !important を重ねないと上書きできず、あとの変更が難しくなるから
    • CSS として無効だから
    • ブラウザーが遅くなるから
ポイント
  • p、.class、#id。コンマでまとめる。空白は子孫、> は子。
  • 詳細度は id-クラス-型 の順で決まり、同じならあとのルールが勝つ。
  • 文字のプロパティは継承され、ボックスのプロパティは継承されない。
このコースの出典 (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