1. はじめに
CSSの基本的な設計原則のひとつはカスケーディングです。 これにより、複数のスタイルシートが文書の表示に影響を与えることができます。 異なる宣言が同じ要素とプロパティの組み合わせに値を設定しようとすると、 その衝突を何らかの方法で解決する必要があります。
反対の問題は、要素とプロパティの組み合わせに対して、どの宣言も値を設定しようとしない場合に発生します。 この場合、値は継承やプロパティの初期値によって決定されます。
カスケーディングとデフォルト化プロセスは宣言の集合を入力として受け取り、 各要素の各プロパティに対して指定値を出力します。
文書内のすべての要素のすべてのプロパティの指定値を決定するための規則は、本仕様で説明されています。 ページコンテキストおよびそのマージンボックスの指定値を決定するための規則は[css-page-3]で説明されています。
1.1. モジュール間の相互作用
このセクションは規定です。
このモジュールは、[CSS2]第6章で定義されているプロパティ値の割り当て、カスケーディング、継承に関する規則を置き換え、拡張します。
他のCSSモジュールは、ここで定義されている構文や機能の定義を拡張する場合があります。 例えば、Media Queries Level 4仕様は、 このモジュールと組み合わせて使用することで、 本仕様で使用される<media-query>値型の定義を拡張します。
2. スタイルシートの読み込み: @import規則
@import 規則は、他のスタイルシートからスタイル規則をインポートすることを可能にします。 @import規則が有効なスタイルシートを参照している場合、 ユーザーエージェントはそのスタイルシートの内容を、@import規則の位置に記述されたかのように扱う必要がありますが、2つの例外があります:
-
ある機能 (例えば@namespace規則など)が明示的に特定のスタイルシートにのみ適用され、 インポートされたスタイルシートには適用されないと定義されている場合は、 その機能はインポートされたスタイルシートには適用されません。
-
ある機能がスタイルシート内の複数の構造の相対的な順序に依存する場合 (例えば@namespace規則の前に@import以外の規則があってはならないという要件など)、 その機能は同じスタイルシート内の構造間にのみ適用されます。
例えば、 インポートされたスタイルシートのスタイル規則内の宣言は、 @importの位置にそのまま記述されたかのようにカスケードと相互作用します。
すべての@import規則は、 スタイルシート内の他のすべての有効なat規則やスタイル規則(@charsetを除く)より前になければならず、 そうでない場合は@import規則は無効となります。 @importの構文は次の通りです:
@import [ <url> | <string> ] <media-query-list>? ;
<url>または<string>はインポートするスタイルシートのURLを指定し、 オプションの<media-query-list>(インポート条件) は適用される条件を示します。
<string>が指定された場合、 それは同じ値の<url>として解釈されます。
@import "mystyle.css" ; @import url ( "mystyle.css" );
2.1. 条件付き@import規則
インポート条件により、インポートをメディア依存にできます。
インポート条件が指定されていない場合、インポートは無条件となります。
(<media-query-list>にall
を指定するのと同じ効果です。)
インポート条件が一致しない場合、
インポートされたスタイルシートの規則は適用されません。
これは、インポートされたスタイルシートが与えられたメディアクエリで@mediaブロックでラップされているかのように扱われます。
@import url ( "fineprint.css" ) print; @import url ( "bluish.css" ) projection, tv; @import url ( "narrow.css" ) handheld and( max-width:400 px );
したがって、ユーザーエージェントはメディアクエリが一致しない限り、メディア依存のインポートを取得しなくてもかまいません。
インポート条件の評価および完全な構文は、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で画像が設定されていた場合でも上書きできます。
h1{ font-weight : bold; font-size : 12 pt ; line-height : 14 pt ; font-family : Helvetica; font-variant : normal; font-style : normal; }
次のように書き換えることができます。
h1{ font : bold12 pt /14 pt Helvetica}
場合によっては、省略プロパティに異なる構文や、 サブプロパティの値に直接対応しない特別なキーワードがある場合があります。 (その場合、省略プロパティは値の展開を明示的に定義します。)
他の場合、あるプロパティが省略プロパティのリセット専用サブプロパティであることがあります。 他のサブプロパティ同様、未指定時は省略プロパティによって初期値にリセットされますが、 省略プロパティにはそのサブプロパティを他の値に設定する構文が含まれない場合があります。 例えば、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プロパティdirectionとunicode-bidiは、実際にはマークアップレベルの機能であり、
著者のスタイルシートで設定すべきではありません。
(これらはUAがサポートしていない文書言語をスタイルするためにCSSプロパティとして存在します。)
著者はHTMLのdir
属性など、適切なマークアップを使用してください。[css-writing-modes-3]
これは、ページに含まれる「ウィジェット」のルート要素など、
外部ページのスタイルを継承したくない場合に有用です。
ただし、その要素に適用された「デフォルト」スタイル
(例えばUAスタイルシートによる<div>
などブロック要素へのdisplay:
blockなど)も消えることに注意してください。
4. 値の処理
ユーザーエージェントが文書をパースし、文書ツリーを構築した後、 ツリー内の全ての要素、および対応する整形構造内の全てのボックスに対して、 対象メディアタイプに適用されるすべてのプロパティに値を割り当てる必要があります。
与えられた要素やボックスに対するCSSプロパティの最終値は、 複数段階の計算結果です:
- まず、各要素に適用されている宣言値を収集します。 各要素ごとにプロパティごとに宣言値が0個以上適用されます。
- カスケーディングによってカスケード値が得られます。 プロパティごとに各要素につきカスケード値は最大1つです。
- デフォルト化によって指定値が得られます。 各要素の各プロパティごとに指定値は必ず1つあります。
- 値の依存関係を解決して計算値が得られます。 各要素の各プロパティごとに計算値は必ず1つあります。
- 文書の整形によって使用値が得られます。 プロパティが要素に適用される場合のみ使用値があります。
- 最後に、使用値は表示環境の制約に基づいて実際値に変換されます。 使用値と同様、 要素のプロパティごとに実際値がある場合とない場合があります。
4.1. 宣言値
各プロパティ宣言は要素に適用されることで、 その要素に関連付けられたプロパティの宣言値を提供します。 詳細は宣言のフィルタリングを参照してください。
これらの値はカスケードによって処理され、単一の「勝者の値」が選ばれます。
4.2. カスケード値
カスケード値は カスケードの結果を表します。 これはカスケードで勝った宣言値 (カスケードの出力で最初に並ぶもの)です。 カスケードの出力が空リストの場合、 カスケード値はありません。
4.3. 指定値
指定値は、 スタイルシート著者がその要素に意図したプロパティの値です。 カスケード値にデフォルト化処理を施した結果であり、 すべての要素のすべてのプロパティに指定値が存在することを保証します。
多くの場合、指定値はカスケード値です。 しかし、カスケード値が全くない場合は、 指定値がデフォルト化されます。 CSS全体キーワードがプロパティのカスケード値の場合は特別に処理され、 そのキーワードに応じて指定値が設定されます。 詳細は§ 7.3 明示的なデフォルト化を参照してください。
4.4. 計算値
計算値は、 指定値をプロパティ定義表の「Computed Value」行で定義された通りに解決した結果です。 一般的には継承のために絶対化されます。継承の準備として。
注: 計算値は、継承時に親から子へ伝わる値です。
歴史的理由により、getComputedStyle()
関数が返す値とは必ずしも一致せず、時には使用値が返されます。
[CSSOM] また、計算値は抽象的なデータ表現であり、
その定義はデータ表現を反映しており、データのシリアライズ方法ではありません。
例えば、シリアライズ規則ではパース時に暗黙的になる値の省略が許される場合がありますが、
それらの値も計算値の一部です。
- 相対単位(em、ex、vh、vwなど)は、適切な参照サイズで乗算して絶対化されます
- 特定のキーワード(例:smaller、bolder)は定義に従って置換されます
- 一部のプロパティのパーセンテージは参照値(プロパティに依存)で乗算されます
- 有効な相対URLは絶対URLに解決されます
下記表の例(f)、(g)、(h)を参照してください。
注: 一般的に計算値は、文書のレイアウトや高コスト・並列化困難な処理(ネットワーク要求の解決や要素・親以外からの値取得など)を行わずに、できる限り指定値を解決します。
計算値は、プロパティが適用されない場合でも存在します。 ただし、プロパティが要素に適用されるかどうかによって、計算値の決定方法が変わる場合があります。
4.5. 使用値
使用値は、 計算値から残りの計算を行って、 文書の整形に使われる絶対的な理論値を得たものです。
例えば、 width: auto の宣言は、要素の祖先のレイアウトが分からなければ長さに解決できません。 したがって計算値はautoですが、 使用値は100pxのような絶対長になります。[CSS2]
別の例として、
<div>
がbreak-beforeプロパティの計算値としてautoを持っている場合でも、
最初の子から伝播されて使用値break-beforeがpageになることがあります。[css-break-3]
あるプロパティがこの要素やボックスタイプに適用されない場合 (「適用対象」行を参照)、 そのタイプのボックスや要素には直接整形効果がなく、 したがってそのプロパティの使用値もありません。
例えば、flexプロパティは、使用値がフレックスアイテムでない要素にはありません。
p
要素
(デフォルトでdisplay: block)に設定すると、
text-transformはインラインボックスにのみ適用されますが、
プロパティは段落の匿名ルートインラインボックスに継承されるため、効果があります。
注: 「すべての要素に適用」と定義されたプロパティは、 すべての要素と表示タイプに適用されますが、 すべての疑似要素タイプに必ずしも適用されるわけではありません。 疑似要素は特有の描画モデルや制約がある場合が多いからです。 ただし、::beforeや::after疑似要素は、通常の要素とほぼ同じようにボックスを生成するため、 「すべての要素に適用」されるプロパティも受け付けると定義されています。 疑似要素については[CSS-PSEUDO-4]を参照してください。
4.6. 実際値
使用値は原則として使用可能ですが、 ユーザーエージェントが特定の環境で値を利用できない場合があります。例えば、ユーザーエージェントが整数ピクセル幅のみで境界線を描画できる場合、 使用幅を近似する必要があります。 また、要素のフォントサイズは利用可能なフォントやfont-size-adjustプロパティの値に応じて調整される場合があります。 実際値は、そのような調整が行われた後の使用値です。
注: 要素の実際値を調べることで、文書のレイアウト方法について多くを知ることができます。 しかし、すべての情報が実際値に記録されるわけではありません。 例えば、page-break-afterプロパティの実際値は、 要素の後に改ページがあるかどうかを反映しません。 同様に、orphansプロパティの実際値は、 その要素内に孤立行が何行あるかを反映しません。 下記表の例(j)と(k)を参照してください。
4.7. 例
プロパティ | 勝者の宣言 | カスケード値 | 指定値 | 計算値 | 使用値 | 実際値 | |
---|---|---|---|---|---|---|---|
(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. フィルタリング
宣言値を見つけるために、 実装はまず各要素に適用されるすべての宣言を特定する必要があります。 宣言が要素に適用される条件は以下の通りです:
- その宣言が現在この文書に適用されているスタイルシートに属していること。
- 条件付き規則[CSS-CONDITIONAL-3]によってfalse条件で修飾されていないこと。
- その宣言が属するスタイル規則のセレクターが要素と一致すること。[SELECT]
- 文法的に有効であること: 宣言のプロパティが既知のプロパティ名であり、 宣言の値がそのプロパティの構文に一致すること。
要素ごとのプロパティごとに、適用される宣言の値がリストとして形成されます。 次のセクションカスケードがこれらのリストに優先順位を付けます。
6. カスケーディング
カスケードは、 与えられた要素の与えられたプロパティに対する宣言値の順不同リストを受け取り、 下記で定める宣言の優先順位に従ってソートし、 単一のカスケード値を出力します。
6.1. カスケードの並び順
カスケードは、以下の基準に従って宣言を優先順位の高い順にソートします:
- オリジンと重要度
-
宣言のオリジンはその由来に基づき、
重要度は!importantで宣言されているかどうかです(下記参照)。
各オリジンの優先順位は、降順で次の通りです:
- トランジション宣言[css-transitions-1]
- 重要なユーザーエージェント宣言
- 重要なユーザー宣言
- 重要な著者宣言
- アニメーション宣言[css-animations-1]
- 通常の著者宣言
- 通常のユーザー宣言
- 通常のユーザーエージェント宣言
このリストで前にあるオリジンの宣言が、後ろのオリジンの宣言より優先されます。
- 詳細度
- 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である場合です。 それ以外の宣言は通常(非重要)とみなされます。
重要宣言は、通常宣言より優先されます。 著者およびユーザーのスタイルシートには重要宣言を含めることができ、 ユーザーオリジンの重要宣言は 著者オリジンの重要宣言を上書きします。 このCSSの機能により、特別なニーズ(大きなフォントや色の組み合わせなど)を持つユーザーが 表示を制御できるためアクセシビリティが向上します。
すべてのオリジンからの重要宣言はアニメーションよりも優先されます。 これにより、著者は重要な場合にアニメーション値を上書きできます。 (通常、アニメーション値は他のすべての規則より優先されます。)[css-animations-1]
ユーザーエージェントのスタイルシートにも 重要宣言を含めることができます。 これらはすべての著者およびユーザー宣言よりも優先されます。
/* ユーザーのスタイルシート */ p{ text-indent : 1 em !important} p{ font-style : italic !important} p{ font-size : 18 pt } /* 著者のスタイルシート */ p{ text-indent : 1.5 em !important} p{ font : normal12 pt sans-serif !important} p{ font-size : 24 pt }
プロパティ | 最終値 |
---|---|
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. デフォルト化
カスケードで値が決定されない場合、 指定値は他の方法で決定する必要があります。 継承プロパティは親要素を通じて継承でデフォルト値を取ります。 それ以外のプロパティは初期値を取ります。 著者はinheritやinitialキーワードで明示的に継承または初期化を要求できます。
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日勧告案以降、以下の変更が加えられました:
- 誤記を修正
- W3C勧告のステータス・スタイリング変更
8.2. 2018年8月28日候補勧告以降の変更点
この仕様は2018年8月28日候補勧告以降、以下の変更が加えられました:
8.3. 2016年5月19日候補勧告以降の変更点
この仕様は2016年5月19日候補勧告以降、重要な変更点は次の通りです:
-
カスタムプロパティは
all省略プロパティではリセットされないことを明確化
(2518)
allプロパティは省略プロパティであり、CSSの全てのプロパティを directionおよびunicode-bidi以外リセットします。 … カスタムプロパティ[css-variables-1]はリセットしません。
-
スタイルシートのインポートが単なる内容挿入とは異なる2つの例外を明記
@import規則が有効なスタイルシートを参照する場合、 UAはそのスタイルシートの内容を@import規則の位置に記述されたかのように扱う必要がある が、2つの例外があります:
- ある機能(例えば @namespace 規則など)が明示的に特定のスタイルシートにのみ適用され、インポートされたスタイルシートには適用されないと定義されている場合、その機能はインポートされたスタイルシートには適用されません。
- ある機能がスタイルシート内の複数の構造の相対的な順序に依存する場合(例えば @charset の前に他の内容があってはならないという要件など)、その機能は同じスタイルシート内の構造間にのみ適用されます。
- HTMLからscopedスタイルシート機能が削除されたため、記述も削除 (Issue 637)
- 廃止された“override”オリジン(DOM Level 2 Styleで定義され、後に廃止)への言及を削除
コメント処理状況も参照できます。
8.4. 2013年10月3日候補勧告以降の変更点
この仕様は2013年10月3日候補勧告以降、以下の変更が加えられました:
-
インポートされたスタイルシートの環境エンコーディングを定義
インポートされたスタイルシートの環境エンコーディングは、それをインポートしたスタイルシートのエンコーディングです。 [css-syntax-3]
-
!important規則の構文について[css-syntax-3]を参照
宣言が重要であるかどうかは、!important注釈があるかによります。 [css-syntax-3]で定義されています 。
-
リセット専用サブプロパティを説明し、CSS全体キーワード値が省略宣言に指定された場合にも影響を受けることを明確化
他の場合、あるプロパティが省略プロパティのリセット専用サブプロパティであることがあります。 他のサブプロパティ同様、省略プロパティで未指定の場合は初期値にリセットされますが、 そのサブプロパティを他の値に設定するための構文は含まれない場合があります。 例えば、border省略プロパティはborder-imageを初期値noneにリセットしますが、それ以外の値に設定する構文はありません。 [css-backgrounds-3]
省略プロパティにCSS全体キーワード[css-values-3]を指定すると、 すべてのサブプロパティにそのキーワードが設定されます リセット専用サブプロパティも含みますreset-only sub-properties 。 (これらのキーワードは、単一宣言内で他の値と組み合わせることはできません。省略プロパティでも同様です。)
コメント処理状況も参照できます。
8.5. レベル2以降の追加
レベル2以降、以下の機能が追加されました:
謝辞
David Baron、Simon Sapin、Boris Zbarskyが本仕様に貢献しました。
プライバシーとセキュリティの考慮事項
-
カスケード処理では同一オリジンとクロスオリジンのスタイルシートを区別しないため、 クロスオリジンのスタイルシートの内容が、文書に適用された計算スタイルから推測可能です。
-
スタイル規則の適用によるユーザーの設定やUAのデフォルトはカスケード処理で公開され、 文書に適用された計算スタイルから推測可能です。
-
@import規則は、クロスオリジンのスタイルシートの読み込みにCORSプロトコルを適用せず、 自由にインポート・適用できるようになっています。
-
@import規則は、
Content-Type
メタデータがないリソース (またはホスト文書がquirksモードの場合は同一オリジンファイル)をtext/css
と見なすため、 任意のファイルがCSSとしてインポート・解釈される可能性があり、 文書に適用された計算スタイルから機密データが推測される可能性があります。