CSSカスケーディングと継承 レベル3

W3C勧告,

このバージョン:
https://www.w3.org/TR/2021/REC-css-cascade-3-20210211/
最新公開バージョン:
https://www.w3.org/TR/css-cascade-3/
編集者草案:
https://drafts.csswg.org/css-cascade-3/
以前のバージョン:
https://www.w3.org/TR/2020/PR-css-cascade-3-20201222/
実装報告:
https://drafts.csswg.org/css-cascade-3/implementation-report.html
テストスイート:
http://test.csswg.org/suites/css-cascade-3_dev/nightly-unstable/
課題追跡:
CSSWG課題リポジトリ
コメントの処理状況
編集者:
Elika J. Etemad / fantasai (招待専門家)
Tab Atkins Jr. (Google)
この仕様への編集提案:
GitHub エディター

公開後に報告されたエラーや問題については、正誤表 をご確認ください。


概要

このCSSモジュールは、スタイル規則の整理方法と、すべての要素のすべてのプロパティに値を割り当てる方法について説明します。カスケーディングと継承によって、すべての要素のすべてのプロパティの値が伝播されます。

CSSは、構造化文書(HTMLやXMLなど)の表示方法を、画面や印刷物などで記述するための言語です。

この文書のステータス

このセクションは、発行時点でのこの文書のステータスについて説明します。 他の文書がこの文書に取って代わる場合があります。 現在のW3C出版物の一覧や、本技術報告の最新改訂版は W3C技術報告インデックス https://www.w3.org/TR/で確認できます。

この文書はCSS作業グループによって勧告として公開されました。

W3C勧告は、十分な合意形成を経て、W3Cおよびその会員の承認を受けた仕様です。W3CはWebの標準として本仕様の広範な展開を推奨します。

フィードバックは、GitHubでissueを提出(推奨)、タイトルに仕様コード「[css-cascade]」を含めてください(例:「[css-cascade] …コメント要約…」)。 すべての課題とコメントはアーカイブされています。 または、(アーカイブされている)公開メーリングリストwww-style@w3.orgに送信することもできます。

この文書は、2020年9月15日版W3Cプロセス文書に従って管理されています。

この文書は、W3C特許ポリシーに基づき活動するグループによって作成されました。 W3Cは、グループの成果物に関連して行われた特許開示の公開リストを管理しています。 そのページには特許開示の方法も記載されています。 個人が本質的な必須クレームを含む特許を知っている場合、 W3C特許ポリシーの第6節に従って情報を開示する必要があります。

1. はじめに

CSSの基本的な設計原則のひとつはカスケーディングです。 これにより、複数のスタイルシートが文書の表示に影響を与えることができます。 異なる宣言が同じ要素とプロパティの組み合わせに値を設定しようとすると、 その衝突を何らかの方法で解決する必要があります。

反対の問題は、要素とプロパティの組み合わせに対して、どの宣言も値を設定しようとしない場合に発生します。 この場合、値は継承やプロパティの初期値によって決定されます。

カスケーディングデフォルト化プロセスは宣言の集合を入力として受け取り、 各要素の各プロパティに対して指定値を出力します。

文書内のすべての要素のすべてのプロパティの指定値を決定するための規則は、本仕様で説明されています。 ページコンテキストおよびそのマージンボックスの指定値を決定するための規則は[css-page-3]で説明されています。

1.1. モジュール間の相互作用

このセクションは規定です。

このモジュールは、[CSS2]第6章で定義されているプロパティ値の割り当て、カスケーディング、継承に関する規則を置き換え、拡張します。

他のCSSモジュールは、ここで定義されている構文や機能の定義を拡張する場合があります。 例えば、Media Queries Level 4仕様は、 このモジュールと組み合わせて使用することで、 本仕様で使用される<media-query>値型の定義を拡張します。

2. スタイルシートの読み込み: @import規則

@import 規則は、他のスタイルシートからスタイル規則をインポートすることを可能にします。 @import規則が有効なスタイルシートを参照している場合、 ユーザーエージェントはそのスタイルシートの内容を、@import規則の位置に記述されたかのように扱う必要がありますが、2つの例外があります:

例えば、 インポートされたスタイルシートのスタイル規則内の宣言は、 @importの位置にそのまま記述されたかのようにカスケードと相互作用します。

すべての@import規則は、 スタイルシート内の他のすべての有効なat規則やスタイル規則(@charsetを除く)より前になければならず、 そうでない場合は@import規則は無効となります。 @importの構文は次の通りです:

@import [ <url> | <string> ] <media-query-list>? ;

<url>または<string>はインポートするスタイルシートのURLを指定し、 オプションの<media-query-list>インポート条件) は適用される条件を示します。

<string>が指定された場合、 それは同じ値の<url>として解釈されます。

次の記述は同じ意味を持ち、 @importの2つの構文(url()と単なる文字列)を示しています:
@import "mystyle.css";
@import url("mystyle.css");

2.1. 条件付き@import規則

インポート条件により、インポートをメディア依存にできます。 インポート条件が指定されていない場合、インポートは無条件となります。 (<media-query-list>allを指定するのと同じ効果です。) インポート条件が一致しない場合、 インポートされたスタイルシートの規則は適用されません。 これは、インポートされたスタイルシートが与えられたメディアクエリで@mediaブロックでラップされているかのように扱われます。

次の規則は@import規則がメディア依存にできることを示します:
@import url("fineprint.css") print;
@import url("bluish.css") projection, tv;
@import url("narrow.css") handheld and (max-width: 400px);

したがって、ユーザーエージェントはメディアクエリが一致しない限り、メディア依存のインポートを取得しなくてもかまいません。

インポート条件の評価および完全な構文は、Media Queries仕様[MEDIAQ]で定義されています。

2.2. スタイルシートのインポート処理

同じスタイルシートが文書内の複数箇所でインポートまたはリンクされている場合、 ユーザーエージェントは各リンクを独立したスタイルシートへのリンクとして処理する(またはそのように振る舞う)必要があります。

注: これはリソースの取得方法に要求を課すものではなく、 スタイルシートがCSSOMにどのように反映され、この仕様のような仕様でどのように使用されるかのみを規定します。 適切なキャッシュがあれば、 スタイルシートが複数回リンクまたはインポートされていても、 UAがスタイルシートを一度だけ取得するのは全く問題ありません。

インポートされたスタイルシートのオリジンは、 それをインポートしたスタイルシートのオリジンです。

インポートされたスタイルシートの環境エンコーディングは、 それをインポートしたスタイルシートのエンコーディングです。[css-syntax-3]

2.3. CSSスタイルシートのContent-Type

インポートされたスタイルシートの処理は、リンクされたリソースの実際のタイプに依存します。 リソースにContent-Type メタデータがない場合や、 ホスト文書がクイックモードで、 インポートされたスタイルシートと同一オリジンの場合、 リンクされたリソースのタイプはtext/cssとなります。 それ以外の場合、タイプはContent-Type メタデータから決定されます。

リンクされたリソースのタイプがtext/cssである場合、 それはCSSスタイルシートとして解釈されなければなりません。 それ以外の場合はネットワークエラーとして解釈されなければなりません。

3. 省略プロパティ

いくつかのプロパティは省略プロパティです。 これは、複数のプロパティの値を一つのプロパティで指定できることを意味します。 省略プロパティは、すべてのロングハンドサブプロパティを、 その場で展開したかのように設定します。

省略形で値が省略された場合、 特に定義がない限り、 省略された各サブプロパティには初期値が割り当てられます。

これは、省略プロパティの宣言は、すべてのサブプロパティ必ず設定することを意味します。 不注意に使うと、いくつかのサブプロパティが意図せずリセットされる可能性があります。 注意して使えば、他のソースからカスケードされたサブプロパティをリセットすることで「空の状態」を保証できます。

たとえば、background: greenと記述することで、background-color: greenとするよりも、 以前の宣言でbackground-imageで画像が設定されていた場合でも上書きできます。

例えば、CSS Level 1のfontプロパティは、 省略プロパティであり、 font-stylefont-variantfont-weightfont-sizeline-heightfont-familyをまとめて設定できます。 この例の複数の宣言は、
h1 {
  font-weight: bold;
  font-size: 12pt;
  line-height: 14pt;
  font-family: Helvetica;
  font-variant: normal;
  font-style: normal;
}

次のように書き換えることができます。

h1 { font: bold 12pt/14pt Helvetica }

CSSでさらにfontサブプロパティが追加された場合も、 省略宣言によってそれらは初期値にリセットされます。

場合によっては、省略プロパティに異なる構文や、 サブプロパティの値に直接対応しない特別なキーワードがある場合があります。 (その場合、省略プロパティは値の展開を明示的に定義します。)

他の場合、あるプロパティが省略プロパティのリセット専用サブプロパティであることがあります。 他のサブプロパティ同様、未指定時は省略プロパティによって初期値にリセットされますが、 省略プロパティにはそのサブプロパティを他の値に設定する構文が含まれない場合があります。 例えば、border省略プロパティはborder-imageを初期値noneにリセットしますが、それ以外の値に設定する構文はありません。[css-backgrounds-3]

省略プロパティCSS全体キーワード [css-values-3]を指定すると、 すべてのサブプロパティにそのキーワードが設定されます。 リセット専用サブプロパティも含みます。 (これらのキーワードは、単一宣言内で他の値と組み合わせることはできません。省略プロパティでも同様です。)

省略プロパティ!importantとして宣言することは、 すべてのサブプロパティ!importantとして宣言することと同等です。

3.1. すべてのプロパティのリセット: allプロパティ

名前: all
値: initial | inherit | unset
初期値: 各プロパティを参照
適用対象: 各プロパティを参照
継承: 各プロパティを参照
パーセンテージ: 各プロパティを参照
計算値: 各プロパティを参照
アニメーションタイプ: 各プロパティを参照
標準順序: 文法による

all プロパティは省略プロパティであり、CSSの全てのプロパティを directionおよびunicode-bidi以外リセットします。 受け付ける値はCSS全体キーワードのみです。 カスタムプロパティはリセットしません。[css-variables-1]

注: 除外されるCSSプロパティdirectionunicode-bidiは、実際にはマークアップレベルの機能であり、 著者のスタイルシートで設定すべきではありません。 (これらはUAがサポートしていない文書言語をスタイルするためにCSSプロパティとして存在します。) 著者はHTMLのdir属性など、適切なマークアップを使用してください。[css-writing-modes-3]

たとえば、著者が要素にall: initialを指定すると、 すべての継承を遮断し、全てのプロパティをリセットします。 著者・ユーザー・UAレベルのカスケード規則が全く現れなかったかのようになります。

これは、ページに含まれる「ウィジェット」のルート要素など、 外部ページのスタイルを継承したくない場合に有用です。 ただし、その要素に適用された「デフォルト」スタイル (例えばUAスタイルシートによる<div>などブロック要素へのdisplay: blockなど)も消えることに注意してください。

4. 値の処理

ユーザーエージェントが文書をパースし、文書ツリーを構築した後、 ツリー内の全ての要素、および対応する整形構造内の全てのボックスに対して、 対象メディアタイプに適用されるすべてのプロパティに値を割り当てる必要があります。

与えられた要素やボックスに対するCSSプロパティの最終値は、 複数段階の計算結果です:

  1. まず、各要素に適用されている宣言値を収集します。 各要素ごとにプロパティごとに宣言値が0個以上適用されます。
  2. カスケーディングによってカスケード値が得られます。 プロパティごとに各要素につきカスケード値は最大1つです。
  3. デフォルト化によって指定値が得られます。 各要素の各プロパティごとに指定値は必ず1つあります。
  4. 値の依存関係を解決して計算値が得られます。 各要素の各プロパティごとに計算値は必ず1つあります。
  5. 文書の整形によって使用値が得られます。 プロパティが要素に適用される場合のみ使用値があります。
  6. 最後に、使用値は表示環境の制約に基づいて実際値に変換されます。 使用値と同様、 要素のプロパティごとに実際値がある場合とない場合があります。

4.1. 宣言値

各プロパティ宣言は要素に適用されることで、 その要素に関連付けられたプロパティの宣言値を提供します。 詳細は宣言のフィルタリングを参照してください。

これらの値はカスケードによって処理され、単一の「勝者の値」が選ばれます。

4.2. カスケード値

カスケード値カスケードの結果を表します。 これはカスケードで勝った宣言値カスケードの出力で最初に並ぶもの)です。 カスケードの出力が空リストの場合、 カスケード値はありません。

4.3. 指定値

指定値は、 スタイルシート著者がその要素に意図したプロパティの値です。 カスケード値デフォルト化処理を施した結果であり、 すべての要素のすべてのプロパティに指定値が存在することを保証します。

多くの場合、指定値カスケード値です。 しかし、カスケード値が全くない場合は、 指定値デフォルト化されます。 CSS全体キーワードがプロパティのカスケード値の場合は特別に処理され、 そのキーワードに応じて指定値が設定されます。 詳細は§ 7.3 明示的なデフォルト化を参照してください。

4.4. 計算値

計算値は、 指定値をプロパティ定義表の「Computed Value」行で定義された通りに解決した結果です。 一般的には継承のために絶対化されます。継承の準備として。

注: 計算値は、継承時に親から子へ伝わる値です。 歴史的理由により、getComputedStyle() 関数が返す値とは必ずしも一致せず、時には使用値が返されます。 [CSSOM] また、計算値は抽象的なデータ表現であり、 その定義はデータ表現を反映しており、データのシリアライズ方法ではありません。 例えば、シリアライズ規則ではパース時に暗黙的になる値の省略が許される場合がありますが、 それらの値も計算値の一部です。

指定値は絶対値(例えばred2mmのような)または相対値(例えばauto2emのような)です。 相対値を計算する場合、通常は絶対化されます:

下記表の例(f)、(g)、(h)を参照してください。

注: 一般的に計算値は、文書のレイアウトや高コスト・並列化困難な処理(ネットワーク要求の解決や要素・親以外からの値取得など)を行わずに、できる限り指定値を解決します。

計算値は、プロパティが適用されない場合でも存在します。 ただし、プロパティが要素に適用されるかどうかによって、計算値の決定方法が変わる場合があります。

4.5. 使用値

使用値は、 計算値から残りの計算を行って、 文書の整形に使われる絶対的な理論値を得たものです。

例えば、 width: auto の宣言は、要素の祖先のレイアウトが分からなければ長さに解決できません。 したがって計算値autoですが、 使用値100pxのような絶対長になります。[CSS2]

別の例として、 <div>break-beforeプロパティの計算値としてautoを持っている場合でも、 最初の子から伝播されて使用値break-beforepageになることがあります。[css-break-3]

あるプロパティがこの要素やボックスタイプに適用されない場合 (「適用対象」行を参照)、 そのタイプのボックスや要素には直接整形効果がなく、 したがってそのプロパティの使用値もありません。

例えば、flexプロパティは、使用値フレックスアイテムでない要素にはありません。

注: 適用されない要素やボックスにも間接的に整形効果を持つプロパティがあります。 それらの計算値は他のプロパティや単位の計算に使われる場合もあります。 継承プロパティは、適用されない要素にも設定され、適用される子孫(匿名ボックスを含む)へ継承させるために使われることが多いです。
writing-modetext-orientationはテーブル行には適用されませんが、 それらをボックスに設定すると、chなどフォント相対単位の計算に影響し、 <length>を使うプロパティにも影響する可能性があります。
text-transformをHTML p 要素 (デフォルトでdisplay: block)に設定すると、 text-transformインラインボックスにのみ適用されますが、 プロパティは段落の匿名ルートインラインボックスに継承されるため、効果があります。

注: 「すべての要素に適用」と定義されたプロパティは、 すべての要素と表示タイプに適用されますが、 すべての疑似要素タイプに必ずしも適用されるわけではありません。 疑似要素は特有の描画モデルや制約がある場合が多いからです。 ただし、::before::after疑似要素は、通常の要素とほぼ同じようにボックスを生成するため、 「すべての要素に適用」されるプロパティも受け付けると定義されています。 疑似要素については[CSS-PSEUDO-4]を参照してください。

4.6. 実際値

使用値は原則として使用可能ですが、 ユーザーエージェントが特定の環境で値を利用できない場合があります。例えば、ユーザーエージェントが整数ピクセル幅のみで境界線を描画できる場合、 使用幅を近似する必要があります。 また、要素のフォントサイズは利用可能なフォントやfont-size-adjustプロパティの値に応じて調整される場合があります。 実際値は、そのような調整が行われた後の使用値です。

注: 要素の実際値を調べることで、文書のレイアウト方法について多くを知ることができます。 しかし、すべての情報が実際値に記録されるわけではありません。 例えば、page-break-afterプロパティの実際値は、 要素の後に改ページがあるかどうかを反映しません。 同様に、orphansプロパティの実際値は、 その要素内に孤立行が何行あるかを反映しません。 下記表の例(j)と(k)を参照してください。

4.7.

CSS値計算の例
プロパティ 勝者の宣言 カスケード値 指定値 計算値 使用値 実際値
(a) text-align text-align: left left left left left left
(b) border-top-width, border-right-width, border-bottom-width, border-left-width border-width: inherit inherit 4.2px 4.2px 4.2px 4px
(c) width (なし) (なし) auto (初期値) auto 120px 120px
(d) list-style-position list-style-position: inherit inherit inside inside inside inside
(e) list-style-position list-style-position: initial initial outside (初期値) outside outside outside
(f) font-size font-size: 1.2em 1.2em 1.2em 14.1px 14.1px 14px
(g) width width: 80% 80% 80% 80% 354.2px 354px
(h) width width: auto auto auto auto 134px 134px
(i) height height: auto auto auto auto 176px 176px
(j) page-break-after (なし) (なし) auto (初期値) auto auto auto
(k) orphans orphans: 3 3 3 3 3 3

5. フィルタリング

宣言値を見つけるために、 実装はまず各要素に適用されるすべての宣言を特定する必要があります。 宣言が要素に適用される条件は以下の通りです:

要素ごとのプロパティごとに、適用される宣言の値がリストとして形成されます。 次のセクションカスケードがこれらのリストに優先順位を付けます。

6. カスケーディング

カスケードは、 与えられた要素の与えられたプロパティに対する宣言値の順不同リストを受け取り、 下記で定める宣言の優先順位に従ってソートし、 単一のカスケード値を出力します。

6.1. カスケードの並び順

カスケードは、以下の基準に従って宣言を優先順位の高い順にソートします:

オリジンと重要度
宣言のオリジンはその由来に基づき、 重要度!importantで宣言されているかどうかです(下記参照)。 各オリジンの優先順位は、降順で次の通りです:
  1. トランジション宣言[css-transitions-1]
  2. 重要ユーザーエージェント宣言
  3. 重要ユーザー宣言
  4. 重要著者宣言
  5. アニメーション宣言[css-animations-1]
  6. 通常著者宣言
  7. 通常ユーザー宣言
  8. 通常ユーザーエージェント宣言

このリストで前にあるオリジンの宣言が、後ろのオリジンの宣言より優先されます。

詳細度
Selectorsモジュール [SELECT]はセレクターの詳細度の計算方法を説明します。 各宣言はその所属するスタイル規則と同じ詳細度を持ちます。 この段階では、 スタイル規則に属さない宣言 (style属性の内容など)は、 いかなるセレクターよりも高い詳細度を持つものとみなされます。 詳細度が最も高い宣言が勝者となります。
出現順
文書順で最後に現れた宣言が勝者となります。 この目的のため:
  • インポートされたスタイルシートからの宣言は、スタイルシートが@import規則の位置に置き換えられたかのように順序付けされます。
  • 文書によって独立してリンクされたスタイルシートからの宣言は、ホスト文書言語で定められるリンク順で連結されたかのように扱われます。
  • style属性からの宣言は、属性が現れる要素の文書順に並べられ、すべてのスタイルシートの後になります。

カスケードの出力は、 各要素の各プロパティについての(空の場合もある)宣言値のソート済みリストです。

6.2. カスケードオリジン

各スタイル規則にはカスケードオリジンがあり、 カスケード内での位置を決定します。 CSSは3つのコアオリジンを定義しています:

著者オリジン
著者はドキュメント言語の規約に従って、ソース文書のスタイルシートを指定します。 例えばHTMLでは、文書内にスタイルシートを含めたり、外部リンクで指定できます。
ユーザーオリジン
ユーザーは特定の文書に対してスタイル情報を指定できる場合があります。 例えば、ユーザーはスタイルシートを含むファイルを指定したり、ユーザーエージェントがユーザースタイルシートを生成するインターフェースを提供する場合もあります(またはそのように振る舞います)。
ユーザーエージェントオリジン
準拠したユーザーエージェントは、デフォルトスタイルシートを適用しなければなりません(またはそのように振る舞います)。 ユーザーエージェントのデフォルトスタイルシートは、文書言語の一般的な表示期待に合うように、 文書言語の要素を提示するべきです(例:視覚的ブラウザではHTMLのEM要素をイタリックで表示)。 例:HTMLユーザーエージェントスタイルシート[HTML]

CSSの拡張は以下の追加のオリジンを定義します:

アニメーションオリジン
CSSアニメーション[css-animations-1]は、実行時にその効果を表す「仮想」規則を生成します。
トランジションオリジン
CSSアニメーションと同様に、CSSトランジション[css-transitions-1]も、実行時にその効果を表す「仮想」規則を生成します。

6.3. 重要宣言: !important注釈

CSSは著者とユーザーのスタイルシート間の権限のバランスを図ろうとしています。 デフォルトでは、著者のスタイルシートの規則がユーザーのスタイルシートのものより優先され、 ユーザーのスタイルシートはユーザーエージェントのデフォルトスタイルシートより優先されます。 このバランスを取るために、宣言にimportantを付与することで、 カスケード内の重みが増し、優先順が逆転します。

宣言が!important注釈を持つ場合、 重要です。 この注釈は[css-syntax-3]で定義されている通り、 宣言値の最後の2つ(空白とコメント以外)のトークンが区切りトークン!と識別子トークンimportantである場合です。 それ以外の宣言は通常(非重要)とみなされます。

[hidden] { display: none !important; }

重要宣言は、通常宣言より優先されます。 著者およびユーザーのスタイルシートには重要宣言を含めることができ、 ユーザーオリジン重要宣言は 著者オリジン重要宣言を上書きします。 このCSSの機能により、特別なニーズ(大きなフォントや色の組み合わせなど)を持つユーザーが 表示を制御できるためアクセシビリティが向上します。

すべてのオリジンからの重要宣言はアニメーションよりも優先されます。 これにより、著者は重要な場合にアニメーション値を上書きできます。 (通常、アニメーション値は他のすべての規則より優先されます。)[css-animations-1]

ユーザーエージェントのスタイルシートにも 重要宣言を含めることができます。 これらはすべての著者およびユーザー宣言よりも優先されます。

次の例では、ユーザーのスタイルシートの最初の規則に!important宣言があり、 著者のスタイルシートの対応する宣言を上書きしています。 2番目の規則の宣言も!importantのため勝者となります。 しかし、ユーザーのスタイルシートの3番目の宣言は!importantではないため、 著者のスタイルシートの2番目の規則に負けます(これは省略プロパティにスタイルを設定しています)。 また、著者の3番目の規則は2番目の重要宣言に負けるため、重要宣言は著者スタイルシート内でも機能します。
/* ユーザーのスタイルシート */
p { text-indent: 1em !important }
p { font-style: italic !important }
p { font-size: 18pt }

/* 著者のスタイルシート */
p { text-indent: 1.5em !important }
p { font: normal 12pt sans-serif !important }
p { font-size: 24pt }
プロパティ 最終値
text-indent 1em
font-style italic
font-size 12pt
font-family sans-serif

6.4. 非CSSプレゼンテーションヒントの優先順位

UAはソース文書のマークアップ内のプレゼンテーションヒント(例えばbgcolor属性や s 要素など)を尊重することができます。[HTML] 文書言語ベースのスタイリングはすべて対応するCSS規則に変換され、 UAオリジン規則としてカスケードに入るか、 著者スタイルシートの先頭に詳細度ゼロの著者オリジン規則として扱われます。 文書言語ごとに、こうしたプレゼンテーションヒントがカスケードUAオリジンまたは著者オリジンとして入るかを定義できます。 その場合、UAは定義通りに振る舞う必要があります。 例として、[SVG11]はそのプレゼンテーション属性を著者レベルにマッピングします。

注: カスケードUAオリジン規則として入るプレゼンテーションヒントは 著者オリジンユーザーオリジンスタイルで上書きできます。 著者オリジン規則として入るプレゼンテーションヒントは 著者オリジンスタイルで上書きできますが、 非重要なユーザーオリジンスタイルでは上書きできません。 ホスト言語はこうした観点を踏まえて適切なオリジンを選択すべきです。

7. デフォルト化

カスケードで値が決定されない場合、 指定値は他の方法で決定する必要があります。 継承プロパティは親要素を通じて継承でデフォルト値を取ります。 それ以外のプロパティは初期値を取ります。 著者はinheritinitialキーワードで明示的に継承または初期化を要求できます。

7.1. 初期値

各プロパティには初期値があり、 プロパティの定義表で定義されています。 プロパティが継承プロパティでなく、 カスケードで値が決定されない場合、 そのプロパティの指定値初期値となります。

7.2. 継承

継承は親要素から子要素へプロパティ値を伝播します。 要素上のプロパティの継承値は、 親要素上のプロパティの計算値です。 ルート要素は親要素を持たないため、 継承値は そのプロパティの初期値となります。

疑似要素は各疑似要素ごとに記述された架空のタグシーケンスに従って継承します。[SELECT]

一部プロパティは継承プロパティです(定義表で定義)。 これは、カスケードで値が決定されない場合、 継承で値が決定されることを意味します。

プロパティは明示的に継承することもできます。inheritキーワードを参照。

注: 継承は文書ツリーに従い、匿名ボックスや ボックスツリーの操作によって妨げられることはありません。

7.3. 明示的なデフォルト化

以下にCSS全体で使えるプロパティ値を定義します。 プロパティにこれらの値を宣言すると、特定のデフォルト動作を明示的に指定できます。 CSS Values and Units Level 3[css-values-3]で規定される通り、 すべてのCSSプロパティでこれらの値を使用できます。

7.3.1. プロパティのリセット: initialキーワード

プロパティのカスケード値initialキーワードの場合、 そのプロパティの指定値初期値となります。

7.3.2. 明示的な継承: inheritキーワード

プロパティのカスケード値inheritキーワードの場合、 そのプロパティの指定値計算値継承値となります。

7.3.3. すべての宣言の消去: unsetキーワード

プロパティのカスケード値unsetキーワードの場合、 そのプロパティが継承プロパティであればinheritとして扱い、 そうでなければinitialとして扱います。 このキーワードは、カスケード内でそれ以前に現れた宣言値をすべて消去し、 プロパティに応じて正しく継承または初期化されます (または省略プロパティの全ロングハンドにも同様)。

8. 変更点

8.1. 2020年12月22日勧告案以降の変更点

この仕様は2020年12月22日勧告案以降、以下の変更が加えられました:

8.2. 2018年8月28日候補勧告以降の変更点

この仕様は2018年8月28日候補勧告以降、以下の変更が加えられました:

8.3. 2016年5月19日候補勧告以降の変更点

この仕様は2016年5月19日候補勧告以降、重要な変更点は次の通りです:

コメント処理状況も参照できます。

8.4. 2013年10月3日候補勧告以降の変更点

この仕様は2013年10月3日候補勧告以降、以下の変更が加えられました:

コメント処理状況も参照できます。

8.5. レベル2以降の追加

レベル2以降、以下の機能が追加されました:

謝辞

David Baron、Simon Sapin、Boris Zbarskyが本仕様に貢献しました。

プライバシーとセキュリティの考慮事項

適合性

文書の規則

適合性要件は、記述的な断言とRFC 2119の用語の組み合わせで表現されています。規範部分では、“MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、“MAY”、“OPTIONAL”というキーワードがRFC 2119の定義通りに解釈されます。 ただし、読みやすさのため、これらの単語は本仕様書では全て大文字ではありません。

本仕様のすべてのテキストは、非規範部分、例、注記として明示的に記載された部分を除き、規範的です。[RFC2119]

本仕様書における例は、「例えば」という語句で始まるか、class="example"で規範的なテキストとは区別されます。例:

これは情報提供的な例です。

情報提供的な注記は “Note” で始まり、class="note"で規範的なテキストとは区別されます。例:

Note, これは情報提供的な注記です。

助言は規範部分の中でも特に注意を促すスタイルで表示され、<strong class="advisement">で他の規範的なテキストと区別されます。例えば: UAはアクセシブルな代替手段を提供しなければなりません

適合クラス

本仕様への適合性は、以下の3つの適合クラスに定義されます:

スタイルシート
CSSスタイルシート
レンダラー
UA。スタイルシートの意味を解釈し、それを使用する文書を描画するもの。
オーサリングツール
UA。スタイルシートを作成するもの。

スタイルシートは、構文がこのモジュールで定義された文法および個々の機能の文法に従って正しい場合、本仕様に適合します。

レンダラーは、スタイルシートを関連仕様で定義された通りに解釈することに加え、本仕様で定義されたすべての機能を正しくパースし、文書を適切に描画することで本仕様に適合します。ただし、デバイスの制限によりUAが文書を正しく描画できない場合も、UAが非適合となるわけではありません(例えば、UAがモノクロモニターで色を描画する必要はありません)。

オーサリングツールは、構文がこのモジュールおよび個々の機能の文法に従って正しいスタイルシートを書き、スタイルシートの他の適合要件を満たしていれば本仕様に適合します。

部分的な実装

著者が前方互換のパース規則を活用してフォールバック値を指定できるように、CSSレンダラーは、サポートできないat規則、プロパティ、プロパティ値、キーワード、その他の構文要素を無効(および適切に無視)として扱わなければなりません。特に、UAはサポートされない値だけを選択的に無視し、サポートされる値だけを複数値プロパティ宣言で適用してはなりません。値の一部が無効(サポートされない値は必ず無効)な場合、CSSでは宣言全体を無視する必要があります。

不安定・独自機能の実装

将来の安定CSS機能との衝突を避けるため、CSSWGはベストプラクティスに従って不安定機能や独自拡張を実装することを推奨します。

非実験的な実装

仕様が候補勧告段階に到達すると、非実験的な実装が可能となり、実装者は仕様通りに正しく実装できているCRレベルの機能については、プレフィックスなしの実装をリリースするべきです。

CSSの実装間の相互運用性を確立・維持するため、CSSワーキンググループは非実験的なCSSレンダラーに対し、プレフィックスなし実装をリリースする前に実装報告(必要に応じてその実装報告に使ったテストケースも)をW3Cへ提出することを求めています。提出されたテストケースはCSSワーキンググループによるレビュー・修正が行われる場合があります。

テストケースや実装報告の提出については、CSSワーキンググループのWebサイトhttps://www.w3.org/Style/CSS/Test/を参照してください。 質問はpublic-css-testsuite@w3.orgメーリングリストへどうぞ。

索引

本仕様で定義されている用語

参照によって定義される用語

参考文献

規定の参考文献

[CSS-ANIMATIONS-1]
Dean Jackson ほか。CSS Animations Level 1。2018年10月11日。WD。URL: https://www.w3.org/TR/css-animations-1/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin。CSS Syntax Module Level 3。2019年7月16日。CR。URL: https://www.w3.org/TR/css-syntax-3/
[CSS-TRANSITIONS-1]
David Baron ほか。CSS Transitions。2018年10月11日。WD。URL: https://www.w3.org/TR/css-transitions-1/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad。CSS Values and Units Module Level 3。2019年6月6日。CR。URL: https://www.w3.org/TR/css-values-3/
[CSS-VARIABLES-1]
Tab Atkins Jr.。CSS Custom Properties for Cascading Variables Module Level 1。2015年12月3日。CR。URL: https://www.w3.org/TR/css-variables-1/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii。CSS Writing Modes Level 3。2019年12月10日。REC。URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS2]
Bert Bos ほか。Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification。2011年6月7日。REC。URL: https://www.w3.org/TR/CSS21/
[css-conditional-3]
David Baron; Elika Etemad; Chris Lilley。CSS Conditional Rules Module Level 3。2020年12月8日。CR。URL: https://www.w3.org/TR/css-conditional-3/
[FETCH]
Anne van Kesteren。Fetch Standard。Living Standard。URL: https://fetch.spec.whatwg.org/
[HTML]
Anne van Kesteren ほか。HTML Standard。Living Standard。URL: https://html.spec.whatwg.org/multipage/
[MEDIAQ]
Florian Rivoal; Tab Atkins Jr.。Media Queries Level 4。2020年7月21日。CR。URL: https://www.w3.org/TR/mediaqueries-4/
[RFC2119]
S. Bradner。Key words for use in RFCs to Indicate Requirement Levels。1997年3月。Best Current Practice。URL: https://tools.ietf.org/html/rfc2119
[SELECT]
Tantek Çelik ほか。Selectors Level 3。2018年11月6日。REC。URL: https://www.w3.org/TR/selectors-3/
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.。Selectors Level 4。2018年11月21日。WD。URL: https://www.w3.org/TR/selectors-4/

参考情報

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr.。CSS Box Alignment Module Level 3。2020年4月21日。WD。URL: https://www.w3.org/TR/css-align-3/
[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper。CSS Backgrounds and Borders Module Level 3。2017年10月17日。CR。URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BREAK-3]
Rossen Atanassov; Elika Etemad。CSS Fragmentation Module Level 3。2018年12月4日。CR。URL: https://www.w3.org/TR/css-break-3/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad。CSS Fragmentation Module Level 4。2018年12月18日。WD。URL: https://www.w3.org/TR/css-break-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad。CSS Display Module Level 3。2020年12月18日。CR。URL: https://www.w3.org/TR/css-display-3/
[CSS-FLEXBOX-1]
Tab Atkins Jr. ほか。CSS Flexible Box Layout Module Level 1。2018年11月19日。CR。URL: https://www.w3.org/TR/css-flexbox-1/
[CSS-FONTS-3]
John Daggett; Myles Maxfield; Chris Lilley。CSS Fonts Module Level 3。2018年9月20日。REC。URL: https://www.w3.org/TR/css-fonts-3/
[CSS-INLINE-3]
Dave Cramer; Elika Etemad; Steve Zilles。CSS Inline Layout Module Level 3。2020年8月27日。WD。URL: https://www.w3.org/TR/css-inline-3/
[CSS-LISTS-3]
Elika Etemad; Tab Atkins Jr.。CSS Lists and Counters Module Level 3。2020年11月17日。WD。URL: https://www.w3.org/TR/css-lists-3/
[CSS-PAGE-3]
Elika Etemad; Simon Sapin。CSS Paged Media Module Level 3。2018年10月18日。WD。URL: https://www.w3.org/TR/css-page-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns。CSS Pseudo-Elements Module Level 4。2019年2月25日。WD。URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad。CSS Box Sizing Module Level 3。2020年12月18日。WD。URL: https://www.w3.org/TR/css-sizing-3/
[CSS-TEXT-3]
Elika Etemad; Koji Ishii; Florian Rivoal。CSS Text Module Level 3。2020年11月19日。WD。URL: https://www.w3.org/TR/css-text-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii。CSS Writing Modes Level 4。2019年7月30日。CR。URL: https://www.w3.org/TR/css-writing-modes-4/
[CSSOM]
Simon Pieters; Glenn Adams。CSS Object Model (CSSOM)。2016年3月17日。WD。URL: https://www.w3.org/TR/cssom-1/
[SVG11]
Erik Dahlström ほか。Scalable Vector Graphics (SVG) 1.1 (Second Edition)。2011年8月16日。REC。URL: https://www.w3.org/TR/SVG11/

プロパティ索引

名前 初期値 適用対象 継承 パーセンテージ アニメーションタイプ 標準順序 計算値
all initial | inherit | unset 各プロパティを参照 各プロパティを参照 各プロパティを参照 各プロパティを参照 各プロパティを参照 文法による 各プロパティを参照