Dev Study
← 解説「カスケードと詳細度 — 当たった宣言を (A,B,C) と出現順で並べ、最後が勝つ」に戻る

サンプルコードで身につける: カスケードと詳細度 — 当たった宣言を (A,B,C) と出現順で並べ、最後が勝つ

解説で学んだ概念を、3つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1詳細度 (A, B, C) はタプル比較、同点なら出現順

Selectors Level 4 §17 のは A = ID の数、B = クラスなどの数、C = 型の数の 3 つ組で、A → B → C の順に比べます。Rust のタプル (u32, u32, u32) の比較は左から順に決まるので、そのまま仕様の比較になります。実行すると (1,0,0) > (0,99,99) が true になること、同じに当たる 4 つのルールを (詳細度, ) で並べると同点の p は後に書いた navy が blue の上に来て、最後に残る #x の red が勝つことが出ます。

Rust

2UA 既定 → 作者の宣言を詳細度と出現順で順に当てる

CSS Cascade Level 4 §6 の順(出所 → 詳細度 → 出現順)で 1 要素のスタイルを決めます。まず (ブラウザ既定)のスタイルを当て、次に一致するを (詳細度, 出現順) でして順に上書きするので、最後に当てたが勝ちます。実行すると <a> は a ルールの navy、<a class="c"> は .c の purple、<a id="x" class="c"> は #x の red になり、どの宣言がどの順で当たったかの記録が出ます。

Rust

3実務に写す: 組み込み既定 < 設定ファイル < 環境変数 < コマンドライン

アプリ設定の優先順位は CSS のと同じ形です。出所(Origin)に順位を付け、(順位, 出現順) で並べて順に上書きすれば最後の値が勝ち、負けた値を記録しておけば「なぜこの値か」を説明できます。実行すると log_level は CommandLine の debug、 は EnvVar の 9000、workers は同じ ConfigFile で 2 回書かれたうち後の 16 が勝ち、それぞれ負けた値が添えられて出ます。

Rust

図やコードに出てくる用語(タップで説明)