Dev Study
← 解説「継承と初期値 — 宣言が無いとき、値はどこから来るか」に戻る

サンプルコードで身につける: 継承と初期値 — 宣言が無いとき、値はどこから来るか

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

1color / font-size は親の計算値、background-color は初期値

CSS Cascade Level 4 §7: が無いは、プロパティなら親の、そうでなければになります。inherit_from は子の計算値の出発点を作る関数で、color と font-size は親からもらい、background-color は初期値(None = transparent)にします。実行すると div の red / 20px / Some("yellow") に対して、宣言の無い span が red / 20px / None になることが出ます。

Rust

2指定値 → 計算値: em と % は親の計算値に対する比率

計算値はを「プロパティ定義表の Computed Value の行に従って」解決した結果です(CSS Cascade Level 4 §4.4)。font-size なら はそのまま、em と % は親の計算値に対する比率、large などのは表の値で、子に継承されるのは計算値(px)です。実行すると html 16 → body 20px → div 1.5em = 30 → span 50% = 15 → b(宣言なし)15 → i large = 18 と、指定値と計算値の対応が 1 行ずつ出ます。

Rust

3実務に写す: 組織 → チーム → プロジェクトの設定で継承する項目としない項目

階層をもつ設定にも「継承する項目」と「しない項目」があります。ログレベル・タイムゾーン・保持日数は上の階層の値を引き継ぎ、名前や担当者は引き継がず無ければ初期値、と項目ごとに決めて resolve(親の計算値, この階層の宣言) で解決します。実行すると timezone が org から 2 段継承され、owner は team / project で None、log_level は project 自身の debug が勝つ、という 3 階層の表が出ます。

Rust

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