CSS 条件付き規則モジュール レベル3

W3C 候補勧告草案

この文書の詳細情報
このバージョン:
https://www.w3.org/TR/2024/CRD-css-conditional-3-20240815/
最新版:
https://www.w3.org/TR/css-conditional-3/
編集者草案:
https://drafts.csswg.org/css-conditional-3/
以前のバージョン:
履歴:
https://www.w3.org/standards/history/css-conditional-3/
実装レポート:
https://wpt.fyi/results/css/css-conditional?label=master&label=experimental&aligned
フィードバック:
CSSWG Issues Repository
編集者:
L. David Baron (Mozilla)
Elika J. Etemad / fantasai (Apple)
Chris Lilley (W3C)
この仕様への編集提案:
GitHub エディター
テストスイート:
https://wpt.fyi/results/css/css-conditional/

要約

このモジュールは、スタイルシートの一部をプロセッサやスタイルシートが適用されるドキュメントの機能に応じて条件付きで処理するためのCSSの機能を含みます。これは、CSS レベル2 [CSS21](CSS レベル1 [CSS1] を基盤とする)の機能を含み、拡張しています。レベル2と比較した主な拡張点は、特定の @規則を @media 内にネストできること、そして条件付き処理のための @supports 規則の追加です。

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

この文書の位置付け

このセクションは、公開時点でのこの文書の位置付けについて説明しています。最新のW3C公開文書とこの技術レポートの最新版は、W3C技術レポート一覧 https://www.w3.org/TR/ で参照できます。

この文書は CSS ワーキンググループ により、候補勧告草案として勧告トラックを用いて公開されました。 候補勧告草案としての公開は、W3Cおよびそのメンバーによる承認を意味するものではありません。 候補勧告草案は、ワーキンググループが次の候補勧告スナップショットに含める予定の、以前の候補勧告からの変更点を統合したものです。

これはドラフト文書であり、今後更新・差し替え・廃止される可能性があります。 進行中の作業以外の目的でこの文書を引用することは適切ではありません。

ご意見は、GitHubでイシューを提出(推奨、タイトルに「css-conditional」を含めてください、例: 「[css-conditional] …コメントの要約…」)するか、 すべてのイシューやコメントはアーカイブされています。 または、(アーカイブあり) 公開メーリングリスト www-style@w3.org へご連絡いただくこともできます。

この文書は 2023年11月3日W3Cプロセス文書 に従っています。

この文書は、W3C特許ポリシーに基づいて運営されているグループによって作成されました。 W3Cは、グループの成果物に関連して開示された特許の 公開リスト を管理しています。 そのページには特許を開示する方法も記載されています。 特許の存在を実際に知っていて、その特許が必須クレームを含むと考える個人は、W3C特許ポリシー第6節に従って情報を開示しなければなりません。

以下の機能はリスクがあり、CR期間中に削除される可能性があります:

「リスクあり(at-risk)」はW3Cプロセス用語であり、必ずしも機能が削除や遅延の危険にあることを意味しません。WGは、その機能が適時に相互運用可能な実装が難しいと考えており、提案勧告段階に移行する際、必要に応じて新しい候補勧告を発行せずにその機能を削除できるように、このようにマークしています。

1. 導入

1.1. 背景

このセクションは規範的なものではありません。

[CSS21] は条件付きグループ規則の一種である @media 規則を定義しており、その中にはスタイル規則のみ(他の @規則は不可)を許可しています。@media 規則は、メディア固有のスタイルシートを実現するための機能を提供しますが、これは @importlink などのスタイルシート連携機能でも提供されています。@media 規則内の内容に対する制限は、その有用性を低下させていました。@規則を含むCSS機能をメディア固有スタイルシートで利用する場合、著者はメディアごとに別のスタイルシートを使わざるを得ませんでした。

本仕様は、条件付きグループ規則内の内容のルールを拡張し、他の @規則も許可することで、著者が@規則を含むCSS機能とメディア固有スタイルシートを1つのスタイルシート内で組み合わせて利用できるようにします。

さらに本仕様では、著者やユーザーの要件に対応するため、もう1種類の条件付きグループ規則 @supports も定義しています。

@supports 規則は、CSSプロパティや値の実装サポートに基づいてCSSを条件付けることを可能にします。この規則により、著者は新しいCSS機能を使いやすくなり、それらの機能をサポートしない実装に対しても適切なフォールバックを容易に提供できます。特に新しいレイアウト機構を提供するCSS機能や、プロパティサポートに基づいて一連の関連スタイルを条件付けたい場合に重要です。

1.2. モジュールの相互作用

このモジュールは、@media 規則機能を [CSS21] セクション7.2.1で定義された内容を置き換え・拡張し、さらに [MEDIAQUERIES-4] セクション1で非規範的に行われていた修正を取り込みます。

2. 条件付きグループ規則の処理

本仕様では、いくつかのCSSat-規則条件付きグループ規則と呼ばれる)を定義し、それらは条件と一群のCSSルールを関連付けます。これらの異なる規則は様々な種類の条件を判定できますが、条件が真のとき/偽のときに内容がどう扱われるかについて共通の挙動を持っています。

例えば、次の規則は:
@media print {
  /* 印刷時にナビゲーションコントロールを非表示にする */
  #navigation { display: none }
}

特定のCSSルール(IDが “navigation” の要素を display:none にする)が、スタイルシートが印刷メディアで使用される時のみ適用されるようにします。

各条件付きグループ規則は「条件」を持ち、その条件は常に真または偽に評価されます。条件が真のとき、CSSプロセッサは必ずグループ規則内のルールを、あたかもグループ規則の位置にあるかのように適用しなければなりません。条件が偽のとき、CSSプロセッサは絶対にグループ規則内のルールを適用してはなりません。条件の現在の状態はCSSオブジェクトモデルには影響せず、グループ規則の内容は常にその内部にとどまります。

テスト

条件が真の場合、ルールはその場で適用されます。


条件が偽の場合、ルールは適用されません。


CSSOMは条件に関係なくルールを保持します。


つまり、複数の条件付きグループ規則がネストしている場合、両方の条件が真のときのみ、その中のルールが適用されます。

テスト

すべての条件が真の場合にネストしたルールが適用されます。


例えば、次のようなネストした規則のセットでは:
@media print { /* 規則 (1) */
  /* 印刷時にナビゲーションコントロールを非表示にする */
  #navigation { display: none }
  @media (max-width: 12cm) { /* 規則 (2) */
    /* 狭いページ幅で印刷する場合はノートをフロー内に保つ */
    .note { float: none }
  }
}

(1)の条件は印刷メディアに対して真となり、(2)の条件は表示領域(印刷メディアの場合はページボックス)の幅が12cm以下の時に真になります。したがって、#navigation { display: none } のルールはこのスタイルシートが印刷メディアに適用される場合に常に適用され、.note { float: none } のルールは印刷メディアかつページボックスの幅が12センチ以下の場合にのみ適用されます。

条件付きグループ規則の条件が変化した場合、CSSプロセッサは、プロパティ定義により値の寿命を超えて計算値の効果が持続するもの([CSS3-TRANSITIONS][CSS3-ANIMATIONS] の一部プロパティなど)を除き、ルールが今適用されるかされなくなったかを必ず反映しなければなりません。

テスト

条件の変化は、条件の適用の変化と同時に反映されます(トランジション/アニメーションの規則を除く)。


3. 条件付きグループ規則の内容

すべての条件付きグループ規則は、ブロック内で<rule-list>をとるように定義されており、スタイルシートのトップレベルで通常許可されていて、他に制限されていない任意の規則を許可します。 (例えば、@import規則はスタイルシートの実際の先頭でのみ有効なので、他の規則の中では無効です。)

テスト

制限のないトップレベル規則はすべてネスト可能です。


<rule-list> 内の無効または未知の規則は無効と見なされ無視されますが、条件付きグループ規則自体は無効になりません。

テスト

無効な規則があっても条件付きグループ規則自体は無効になりません。


条件付きグループ規則で使用される名前空間プレフィックスは、必ず宣言されていなければならず、そうでない場合は無効となります。

例えば、次のようなCSS修飾名を含む規則は、 名前空間プレフィックスが名前空間urlにバインドされているため有効です:
@namespace x url(http://www.w3.org/1999/xlink);
@supports (content: attr(x|href)) {
  // 何かを行う }
例えば、この規則が有効かどうかを判定するためには:
@supports (content: attr(n|tooltip)) {
  // 何かを行う }

ユーザーエージェントは "n" プレフィックスに対応する名前空間urlが存在するかどうか、名前空間マップを参照します。

テスト

名前空間プレフィックスの有効性は名前空間マップに依存します。


4. 条件付きグループ規則の配置

条件付きグループ規則は、スタイル規則が許可される場所(スタイルシートのトップレベルや他の条件付きグループ規則の内部など)で利用できます。 CSSプロセッサは必ずこれらの規則を上記の通り処理しなければなりません。

テスト

条件付きグループ規則はスタイル規則が許可される場所で利用可能です。


スタイル規則の後で許可されていないat規則(例:@charset@import、または@namespace規則)は、条件付きグループ規則の後でも許可されません。そのため、そのように配置された場合は無効となります。

テスト

スタイル規則の後で許可されないat規則は条件付きグループ規則の後でも無効です。


5. メディア固有スタイルシート:@media規則

@media規則は、条件がメディアクエリである条件付きグループ規則です。 その構文は次の通りです:

@media <media-query-list> {
  <rule-list>
}

これは@mediaというatキーワードの後に、(空でもよい)メディアクエリリスト([MEDIAQUERIES-4]で定義)、そして任意の規則を含むブロックが続きます。 規則の条件はメディアクエリの結果です。

この@media規則は:
@media screen and (min-width: 35em),
       print and (min-width: 40em) {
  #section_navigation { float: left; width: 10em; }
}

条件はscreen and (min-width: 35em), print and (min-width: 40em)となり、 これはビューポートが初期フォントサイズの35倍以上のスクリーン表示や、40倍以上の印刷表示の場合に真になります。 どちらかが真のとき、規則の条件は真となり、#section_navigation { float: left; width: 10em; } の規則が適用されます。

テスト

メディア規則の条件は空にできる


メディア規則の条件はメディアクエリです


トークン化のために必要でない限り空白は省略可能です。


6. 機能クエリ:@supports規則

@supports規則は、ユーザーエージェントがCSSのproperty:valueペアをサポートしているかどうかを判定する条件を持つ条件付きグループ規則です。著者は、機能が利用できる場合は新しい機能を使い、利用できない場合はフォールバックするスタイルシートを書くことができます。 これらのクエリはCSS機能クエリまたは(口語的に)supportsクエリと呼ばれます。

注: CSSには未サポートのプロパティや値を無視するなどの段階的な劣化への既存手段がありますが、特定機能のサポートにスタイル群全体を結びつけたい場合(新しいレイアウトシステムの利用時など)には不十分なことがあります。

@supports規則の条件の構文は、<media-condition>[MEDIAQUERIES-4]で定義)に似ていますが、「unknown」値のロジックはありません:

したがって、@supports規則の構文は、property:valueペアの判定や、それらの任意の論理積(and)、論理和(or)、否定(not)を記述できます。

@supports規則の構文は次の通りです:

@supports <supports-condition> {
  <rule-list>
}

<supports-condition>は次のように定義されます:

<supports-condition> = not <supports-in-parens>
                     | <supports-in-parens> [ and <supports-in-parens> ]*
                     | <supports-in-parens> [ or <supports-in-parens> ]*
<supports-in-parens> = ( <supports-condition> ) | <supports-feature> | <general-enclosed>
<supports-feature> = <supports-decl>
<supports-decl> = ( <declaration> )

この文法は将来の拡張性のために意図的に緩やかになっています。<general-enclosed>生成規則によって将来的な拡張が大きく許容されます。 上記の文法に従ってパースできない@supports規則(つまり、この緩やかな文法(<general-enclosed>生成規則を含む)に合致しないもの)は無効です。 スタイルシートはこのような規則を使用してはならず、プロセッサはそのような規則(その内容も含む)を無視しなければなりません

テスト

トークン化のために必要でない限り空白は省略可能です。


文法的に無効な@supports規則は無視されます。


これらの文法用語のそれぞれには、以下のようにブール値の結果が関連付けられています。

<supports-condition>
<supports-in-parens>

結果は子の部分式の結果です。

not <supports-in-parens>

結果は<supports-in-parens>項の否定です。

テスト

Notはsupports条件を否定します。


Notの後には空白が必要です。


Notは括弧が必要です。


<supports-in-parens> [ and <supports-in-parens> ]*

すべての<supports-in-parens>子項目がtrueの場合にtrueとなり、そうでなければfalseとなります。

テスト

and条件はすべての連結条件がtrueの場合のみtrueです。


andは括弧が必要です。


<supports-in-parens> [ or <supports-in-parens> ]*

すべての<supports-in-parens>子項目がfalseの場合にfalseとなり、そうでなければtrueとなります。

テスト

or条件は連結条件のいずれかがtrueであればtrueです。


orの後には空白が必要です。


orは括弧が必要です。


<supports-decl>

UAが括弧内の宣言をサポートしている場合にtrueとなります。

テスト

サポート条件は宣言がサポートされている場合のみtrueです。


宣言にセミコロンは含められません。


宣言値は空でもよいです。


宣言に無効な!トークンは含められません。


<general-enclosed>

結果はfalseです。

著者は自分のスタイルシートで<general-enclosed>を使用してはなりません。これは将来の互換性のためだけに存在し、新しい構文追加が古いユーザーエージェントで<supports-condition>全体の大部分を無効にしないためです。

テスト

認識されないが文法上有効な条件はfalseとなり、無効にはなりません。


括弧/丸括弧はバランスがとれている必要があります


@supports規則の条件は、前置部にある<supports-condition>の結果です。

例えば、次の規則は
@supports ( display: flex ) {
  body, #navigation, #content { display: flex; }
  #navigation { background: blue; color: white; }
  #article { background: white; color: black; }
}

@supports規則の中のルールは、display: flexがサポートされている場合のみ適用されます。

次の例は、@supports規則を追加で使い、 display: flexがサポートされていない場合の代替を提供できます。
@supports not ( display: flex ) {
  body { width: 100%; height: 100%; background: white; color: black; }
  #navigation { width: 25%; }
  #article { width: 75%; }
}

width宣言はflexベースのレイアウトには有害となる場合があるので、non-flexスタイルのみで存在することが重要です。

次の例は、box-shadowプロパティおよびそのベンダープレフィックス付きバージョンのサポート有無をチェックします。サポートされている場合、box-shadow(およびプレフィックス付き)とborderを指定します。box-shadowがサポートされていない場合、ボックスが見えなくなる指定となっています。
.noticebox {
  border: 1px solid black;
  padding: 1px;
}
@supports ( box-shadow: 0 0 2px black inset ) or
          ( -moz-box-shadow: 0 0 2px black inset ) or
          ( -webkit-box-shadow: 0 0 2px black inset ) or
          ( -o-box-shadow: 0 0 2px black inset ) {
  .noticebox {
    -moz-box-shadow: 0 0 2px black inset;
    -webkit-box-shadow: 0 0 2px black inset;
    -o-box-shadow: 0 0 2px black inset;
    box-shadow: 0 0 2px black inset; /* unprefixed last */
    /* 上の@supports規則より上位にこのルールを上書き */
    border: none;
    padding: 2px;
  }
}

andorの混同を避けるため、構文では両方とも明示的に指定する必要があります(例えば、カンマや空白でどちらかを表現することはできません)。同様に、優先順位規則による混乱を避けるため、構文上andornot演算子をかっこなしで混在させることはできません。

例えば、次の規則は無効です。
@supports (transition-property: color) or
          (animation-name: foo) and
          (transform: rotate(10deg)) {
  /* ... */
}

代わりに、著者は次のいずれかのように書く必要があります。

@supports ((transition-property: color) or
           (animation-name: foo)) and
          (transform: rotate(10deg)) {
  /* ... */
}
@supports (transition-property: color) or
          ((animation-name: foo) and
           (transform: rotate(10deg))) {
  /* ... */
}
テスト

演算子を混在させる場合は括弧が必要です。


テストされる宣言が式中で唯一の場合は、必ず括弧内に記述しなければなりません。

例えば、次の規則は無効です。
@supports display: flex {
  /* ... */
}

代わりに、著者は次のように記述する必要があります。

@supports (display: flex) {
  /* ... */
}
テスト

宣言テストの周囲には括弧が必要です。


構文上、必要でない場合でも余分な括弧は許可されています。この柔軟性は、(例えば式の一部をコメントアウトする場合など)著者やオーサリングツールにとって有用な場合があります。

例えば、著者は次のように記述することができます。
@supports ((display: flex)) {
  /* ... */
}
テスト

余分な括弧も許可されています。


テストされる宣言に末尾の!importantがあっても許可されますが、宣言の有効性には影響しません。

例えば、次の規則は有効です。
@supports (display: flex !important) {
  /* ... */
}
テスト

!importantは許可されています。


6.1. サポートの定義

将来の互換性のために、4.1.8節(宣言とプロパティ)は、[CSS21] において無効なプロパティや値の扱いに関するルールを定めています。 仕様を実装していない、または一部しか実装していないCSSプロセッサは、 実装していない、あるいは十分なレベルでサポートしていない値の一部を、 この無効なプロパティ・値の扱いルールに従って無効として扱い、 そのため必ず宣言全体をパースエラーとして破棄しなければなりません。

CSSプロセッサは、宣言(プロパティと値)をサポートしていると見なされるのは、 スタイル規則内でその宣言を(パースエラーとして破棄せずに)受理する場合です。 プロセッサがプロパティと値の両方を十分なレベルで実装していない場合は、 その宣言を受理したり、サポートしていると主張したりしてはなりません

注: ユーザー設定によって事実上サポートが無効化されているプロパティや値も、この定義では依然としてサポートされていると見なされます。 例えば、ユーザーが色を上書きするハイコントラストモードを有効にしている場合でも、 colorプロパティは その宣言が効果を持たない場合でもサポートされていると見なされます。 一方で、実験的なCSS機能のサポートを有効・無効にするための開発者向け設定は、 このサポートの定義に影響します。

これらのルール(およびそれらの同等性)によって、 著者はフォールバック([CSS1]での後続宣言による上書きや、本仕様の@supports規則の新しい機能によるもの)を、 実装されている機能に対して正しく使うことができます。これは特に複合値に適用されます。実装は、宣言をサポート済みと見なすためには値のすべての部分を実装していなければならず、それはスタイル規則内でも、@supports規則の宣言条件内でも同様です。

テスト

サポートクエリは、プロパティ宣言(すべての値を含む)がパース・サポートされている場合のみtrueになります。


7. API

テスト

7.1. CSSRuleインターフェースの拡張

CSSRuleインターフェースは以下のように拡張されます:

partial interface CSSRule {
    const unsigned short SUPPORTS_RULE = 12;
};
テスト

CSSRule.SUPPORTS_RULE = 12


7.2. CSSConditionRuleインターフェース

CSSConditionRule インターフェースは、条件と文ブロックからなるすべての「条件付き」at規則を表現します。

[Exposed=Window]
interface CSSConditionRule : CSSGroupingRule {
    readonly attribute CSSOMString conditionText;
};
テスト

CSSConditionRuleはCSSGroupingRuleを継承します。


CSSConditionRuleは.conditionText属性を持ちます。


conditionTextCSSOMString
conditionText属性は、その規則の条件を表します。 この条件が何をするかはCSSConditionRuleの派生インターフェースごとに異なるため、 派生インターフェースがこの属性の動作を個別に定義する場合があります (例:下記のCSSMediaRule参照)。 そのような規則固有の動作がない場合、以下のルールが適用されます:

conditionText属性のgetterは、関連付けられた条件をシリアライズした結果を返さなければなりません。

テスト

.conditionTextは条件のシリアライズ結果を返します。


    7.3. CSSMediaRuleインターフェース

    CSSMediaRule インターフェースは@media at規則を表します:

    [Exposed=Window]
    interface CSSMediaRule : CSSConditionRule {
        [SameObject, PutForwards=mediaText] readonly attribute MediaList media;
        readonly attribute boolean matches;
    };
    
    mediaMediaList 、readonly
    media属性は、@media at規則で指定されたメディアクエリリストのMediaList オブジェクトを返さなければなりません。
    テスト

    .mediaは@media条件に一致するMediaListを返します。


      matchesboolean 、readonly
      matches属性は、ルールがドキュメントにアタッチされたスタイルシート内にあり、 そのドキュメントのWindow がこのルールのmedia メディアクエリに一致する場合はtrueを、そうでなければfalseを返します。
      テスト

      .matchesはメディアクエリに一致し、booleanを返します。


        conditionTextCSSOMString (CSSMediaRule固有のCSSConditionRule属性定義)
        conditionText属性(CSSConditionRule親規則で定義)は、 getterでこのルールのmedia.mediaTextの値を返さなければなりません。
        テスト

        CSSMediaRule.conditionTextの値はmedia.mediaTextの値と一致します。


          7.4. CSSSupportsRuleインターフェース

          CSSSupportsRule インターフェースは@supports規則を表します。

          [Exposed=Window]
          interface CSSSupportsRule : CSSConditionRule {
            readonly attribute boolean matches;
          };
          
          matchesboolean 、readonly
          matches属性は、 conditionText内に表される CSS機能クエリの評価結果を返します。
          テスト

          CSSSupportsRule.matchesは機能クエリに一致すればtrueを返します


            conditionTextCSSOMString (CSSSupportsRule固有のCSSConditionRule属性定義)
            conditionText属性(CSSConditionRule親規則で定義)は、 getterで指定された条件そのもの(論理的単純化なし)を返さなければなりません。 すなわち、返される条件は、この仕様に準拠した実装(この仕様の<general-enclosed>拡張性機構を含む将来の拡張を実装した場合も含む) で指定条件と同じ結果になるようにしなければなりません。 つまり、トークンストリームの単純化(空白を1つにまとめる・省略可能な箇所では省略する等)は許されますが、 論理的な単純化(不要な括弧の削除や結果による簡略化等)は許されません。
            テスト

            CSSSupportsRule.conditionTextはトークン単純化を許容します。


              CSSSupportsRule.conditionTextはそれ以外の単純化は不可です。


                7.5. CSS名前空間とsupports()関数

                CSS 名前空間は、他に適切な場所がない有用なCSS関連関数を保持します。

                partial namespace CSS {
                  boolean supports(CSSOMString property, CSSOMString value);
                  boolean supports(CSSOMString conditionText);
                };
                
                supports(CSSOMString property, CSSOMString value) 、booleanを返す
                supports(property, value) メソッドがpropertyvalueの2つの引数で呼び出された時:
                1. propertyが、UAがサポートする定義済みCSSプロパティとASCII大文字小文字を区別せずに一致するか、 カスタムプロパティ名文字列であり、かつ valueがそのプロパティの文法に従ってパースできた場合、 trueを返す。

                2. それ以外の場合はfalseを返す。

                注: プロパティ名に対してCSSエスケープや空白処理は行われないため、 CSS.supports(" width", "5px")falseを返す(先頭に空白があるためプロパティ名として一致しない)。

                注: !important フラグはプロパティ文法の一部ではなく、valueが無効としてパースされる原因となる。これはelement.style.setProperty()のvalue引数でも同様である。

                テスト

                CSS.supports(arg1, arg2)はプロパティarg1と値arg2のサポート判定を行います。


                  supports(CSSOMString conditionText) 、booleanを返す
                  supports(conditionText) メソッドがconditionText引数で呼び出された時:
                  1. conditionTextパースし、 <supports-condition>として評価した結果がtrueなら、 trueを返す。

                  2. それ以外の場合、 conditionTextを括弧でくくってからパースし、 <supports-condition>として評価がtrueなら trueを返す。

                  3. それ以外の場合はfalseを返す。

                  conditionText引数内のすべての名前空間は document.querySelector("a|b")と同様に無効と見なされます。

                  テスト

                  CSS.supports(arg1)はサポート条件arg1を評価します。


                    CSS.supports(arg1)は括弧を補完します。


                    テスト

                    セキュリティに関する考慮事項

                    この仕様は新たなセキュリティ上の考慮事項を導入しません。

                    プライバシーに関する考慮事項

                    本仕様のさまざまな機能は、主に@media規則、および一部は@supports規則に関連して、ユーザーのハードウェアやソフトウェア、その構成や状態に関する情報をWebコンテンツに提供します。 これらの情報の多くは、この仕様の機能よりも[MEDIAQUERIES-4]の機能を通じて提供されます。 しかし、@supports規則によって、ユーザーのソフトウェアや、特定の機能を有効または無効にする非標準設定で実行されているかどうかに関する追加情報が提供される場合もあります。

                    これらの情報の大部分は他のAPIからも取得可能ですが、本仕様の機能はこの情報がWeb上で露出する方法のひとつです。

                    この情報は、集計されることでユーザーのフィンガープリント精度の向上にも利用される可能性があります。

                    8. 変更点

                    この仕様は、2022年1月13日候補勧告スナップショット以降、以下の(編集上でない)変更が加えられました:

                    この仕様は、2020年12月8日候補勧告スナップショット以降、以下の(編集上でない)変更が加えられました:

                    この仕様は、2013年4月4日候補勧告以降、以下の(編集上でない)変更が加えられました:

                    謝辞

                    Tab Atkins、 Arthur Barstow、 Ben Callahan、Tantek Çelik、 Alex Danilo、 Elika Etemad、 Pascal Germroth、Björn Höhrmann、 Paul Irish、 Brad Kemper、Anne van Kesteren、 Vitor Menezes、 Alex Mogilevsky、 Chris Moschini、 James Nurthen、 Simon Pieters、Florian RivoalSimon Sapin、 Nicholas Shanks、 Ben Ward、 Zack Weinberg、 Estelle Weyl、 Boris Zbarsky、 そしてwww-styleコミュニティの皆さまのアイデアとフィードバックに感謝します。

                    適合性

                    文書の記法

                    適合要件は、説明的な主張とRFC 2119用語の組み合わせで表現されます。規範的な部分における “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” というキーワードはRFC 2119で説明されているとおりに解釈されます。 ただし、可読性のため本仕様ではこれらのキーワードはすべて大文字では表記されていません。

                    この仕様のすべてのテキストは、明示的に非規範的、例、注と記載されているセクションを除き規範的です。[RFC2119]

                    本仕様の例は「for example」で始まるか、または以下のようにclass="example"を用いて規範テキストと区別されます:

                    これは情報提供例の例です。

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

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

                    助言文は、特別な注意喚起を目的とした規範セクションであり、<strong class="advisement">で他の規範テキストと区別されます。例: UAはアクセシブルな代替手段を提供しなければなりません

                    テスト

                    本仕様の内容に関するテストは、このような “Tests” ブロックに記載される場合があります。 このようなブロックは非規範的です。


                    適合クラス

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

                    スタイルシート
                    CSSスタイルシート
                    レンダラー
                    UA(ユーザーエージェント)であり、スタイルシートの意味を解釈して それらを使ったドキュメントを描画するもの。
                    オーサリングツール
                    UAであり、スタイルシートを作成するもの。

                    スタイルシートは、本モジュールで定義された構文を使っているすべての文が、汎用CSS文法および本モジュールで定義された各機能の個別文法に従い有効であれば、本仕様に適合しています。

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

                    オーサリングツールは、その書き出すスタイルシートが汎用CSS文法および本モジュールの各機能の個別文法に従って構文的に正しく、本モジュールで記載されたスタイルシートの他の適合要件もすべて満たしていれば、本仕様に適合しています。

                    部分的な実装

                    著者が将来互換なパース規則を活用してフォールバック値を割り当てられるように、CSSレンダラーは、利用可能なレベルでサポートされていないat規則、プロパティ、プロパティ値、キーワード、その他の構文要素を無効として(適宜無視しなければなりません。 特に、ユーザーエージェントは、1つの複数値プロパティ宣言内でサポートされていない値のみを選択的に無視し、サポートされている値だけを採用するべきではありません。 いずれかの値が無効(サポートされていない値は必ず無効)と見なされた場合、CSSは宣言全体を無視することを要求しています。

                    不安定および独自機能の実装

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

                    実験的でない実装

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

                    CSSの相互運用性を確立・維持するために、CSSワーキンググループは、CSSレンダラーの実装者がプレフィックスなし実装をリリースする前に、実装レポート(必要ならそのテストケースも)をW3Cに提出するよう要請しています。W3Cに提出されたテストケースは、CSSワーキンググループによるレビューや修正の対象となります。

                    テストケースや実装レポートの提出方法などの詳細は、CSSワーキンググループのサイトhttps://www.w3.org/Style/CSS/Test/を参照してください。 質問はpublic-css-testsuite@w3.orgメーリングリストにお寄せください。

                    CR終了基準

                    この仕様を提案勧告へ進めるには、各機能について少なくとも2つの独立した相互運用可能な実装が必要です。各機能は異なる製品によって実装されてもよく、すべての機能を1つの製品が実装する必要はありません。この基準のため、以下の用語を定義します:

                    独立
                    各実装は異なる当事者によって開発されており、他の適格実装で使われているコードを共有・再利用・派生してはなりません。この仕様の実装に無関係なコード部分はこの要件の例外です。
                    相互運用可能
                    公式CSSテストスイートの該当テストケースに合格する、もしくはWebブラウザでない場合は同等のテストに合格すること。すべての関連テストについて、該当するUAで相互運用性を主張したい場合は同等のテストを作成する必要があります。また、その場合は他にも同様にそのテストに合格できるUAが必要です。同等テストはピアレビューのために公開されなければなりません。
                    実装
                    以下を満たすユーザーエージェント:
                    1. 仕様を実装していること。
                    2. 一般公開されていること。リリース版やベータ、プレビュー、ナイトリービルドなど、どのような形態でも構いません。 リリース前の製品であっても、少なくとも1か月間はその機能を安定して実装している必要があります。
                    3. 実験的なもの(テストスイート合格専用など今後通常利用を想定しないバージョン)でないこと。

                    この仕様は少なくとも6か月間、候補勧告として維持されます。

                    索引

                    本仕様で定義された用語

                    参照先で定義された用語

                    参考文献

                    規範的参考文献

                    [CSS-CASCADE-5]
                    Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2022年1月13日. CR. URL: https://www.w3.org/TR/css-cascade-5/
                    [CSS-NAMESPACES-3]
                    Elika Etemad. CSS Namespaces Module Level 3. 2014年3月20日. REC. URL: https://www.w3.org/TR/css-namespaces-3/
                    [CSS-SYNTAX-3]
                    Tab Atkins Jr.; Simon Sapin. CSS Syntax Module Level 3. 2021年12月24日. CR. URL: https://www.w3.org/TR/css-syntax-3/
                    [CSS-TYPED-OM-1]
                    Tab Atkins Jr.; François Remy. CSS Typed OM Level 1. 2024年3月21日. WD. URL: https://www.w3.org/TR/css-typed-om-1/
                    [CSS-VALUES-4]
                    Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2024年3月12日. WD. URL: https://www.w3.org/TR/css-values-4/
                    [CSS21]
                    Bert Bos; 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
                    [CSS3-ANIMATIONS]
                    David Baron; 他. CSS Animations Level 1. 2023年3月2日. WD. URL: https://www.w3.org/TR/css-animations-1/
                    [CSSOM-1]
                    Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021年8月26日. WD. URL: https://www.w3.org/TR/cssom-1/
                    [HTML]
                    Anne van Kesteren; 他. HTML Standard. リビングスタンダード. URL: https://html.spec.whatwg.org/multipage/
                    [INFRA]
                    Anne van Kesteren; Domenic Denicola. Infra Standard. リビングスタンダード. URL: https://infra.spec.whatwg.org/
                    [MEDIAQUERIES-4]
                    Florian Rivoal; Tab Atkins Jr.. Media Queries Level 4. 2021年12月25日. CR. URL: https://www.w3.org/TR/mediaqueries-4/
                    [MEDIAQUERIES-5]
                    Dean Jackson; 他. Media Queries Level 5. 2021年12月18日. WD. URL: https://www.w3.org/TR/mediaqueries-5/
                    [RFC2119]
                    S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
                    [WEBIDL]
                    Edgar Chen; Timothy Gu. Web IDL Standard. リビング スタンダード. URL: https://webidl.spec.whatwg.org/

                    参考情報

                    [CSS-BACKGROUNDS-3]
                    Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2024年3月11日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
                    [CSS-COLOR-4]
                    Chris Lilley; Tab Atkins Jr.; Lea Verou. CSS Color Module Level 4. 2024年2月13日. CR. URL: https://www.w3.org/TR/css-color-4/
                    [CSS-DISPLAY-3]
                    Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 3. 2023年3月30日. CR. URL: https://www.w3.org/TR/css-display-3/
                    [CSS-SIZING-3]
                    Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2021年12月17日. WD. URL: https://www.w3.org/TR/css-sizing-3/
                    [CSS1]
                    Håkon Wium Lie; Bert Bos. Cascading Style Sheets, level 1. 2018年9月13日. REC. URL: https://www.w3.org/TR/CSS1/
                    [CSS3-TRANSITIONS]
                    David Baron; 他. CSS Transitions. 2018年10月11日. WD. URL: https://www.w3.org/TR/css-transitions-1/

                    IDL索引

                    partial interface CSSRule {
                        const unsigned short SUPPORTS_RULE = 12;
                    };
                    
                    [Exposed=Window]
                    interface CSSConditionRule : CSSGroupingRule {
                        readonly attribute CSSOMString conditionText;
                    };
                    
                    [Exposed=Window]
                    interface CSSMediaRule : CSSConditionRule {
                        [SameObject, PutForwards=mediaText] readonly attribute MediaList media;
                        readonly attribute boolean matches;
                    };
                    
                    [Exposed=Window]
                    interface CSSSupportsRule : CSSConditionRule {
                      readonly attribute boolean matches;
                    };
                    
                    partial namespace CSS {
                      boolean supports(CSSOMString property, CSSOMString value);
                      boolean supports(CSSOMString conditionText);
                    };