CSS条件付きルールモジュール レベル5

W3C作業草案

この文書の詳細情報
このバージョン:
https://www.w3.org/TR/2025/WD-css-conditional-5-20251030/
最新版公開バージョン:
https://www.w3.org/TR/css-conditional-5/
編集者草案:
https://drafts.csswg.org/css-conditional-5/
履歴:
https://www.w3.org/standards/history/css-conditional-5/
フィードバック:
CSSWG課題リポジトリ
仕様内インライン
編集者:
L. David Baron (Google)
Elika J. Etemad / fantasai (Apple)
Chris Lilley (W3C)
Miriam E. Suzanne (招待専門家)
Lea Verou (招待専門家)
この仕様への編集提案:
GitHub エディター
デルタ仕様:
はい
テストスイート:
https://wpt.fyi/results/css/css-conditional/

概要

このモジュールは、スタイルシートの一部を処理する際に、プロセッサやスタイルシートが適用される環境の機能に基づいて条件付きで処理を行うCSSの機能を含みます。 これはCSS Conditional 4 [css-conditional-4] の機能を含み拡張し、 一般化された条件付きルール @when や連鎖条件付きルール @else を追加します。 また、supports query 構文(@supports ルールやコンテナクエリで使われる)に フォント処理クエリも導入しています。

CSS は、構造化文書(HTMLやXMLなど)を画面、紙などにレンダリングする方法を記述する言語です。

この文書の位置付け

このセクションは、本書が公開された時点での文書の位置付けを説明します。 現在のW3C発行物一覧や 本技術レポートの最新版は、W3C標準および草案一覧 に掲載されています。

この文書は CSS作業グループ により 作業草案 として 勧告プロセス を用いて公開されました。 作業草案として公開されたことは、W3C およびそのメンバーによる承認を意味しません。

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

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

この文書は 2025年8月18日 W3Cプロセス文書 に基づいています。

この文書は W3C特許ポリシー に基づいて運用されるグループによって作成されました。 W3Cはグループの成果物に関して提出された特許の 公開リスト を維持しています。 そのページには特許開示の手順も記載されています。 特許の実際の知識を有し、それが 必須クレーム に含まれると考える場合、その情報は W3C特許ポリシー第6節 に従って開示しなければなりません。

1. はじめに

これは現在、レベル5で新しく追加された内容の初期ドラフトです。 レベル3およびレベル4の機能は引き続き [css-conditional-3][css-conditional-4] で定義されており、まだここにはコピーされていません。

CSS Conditional Level 5 は、 @supports ルールおよび supports query 構文を拡張して、 カスタムのサポート条件に加え、サポートされている アットルールやフォント技術のテストを可能にします。

また、@when ルールを追加し、 条件付きルールの概念を一般化します。 既存の条件付きルールで表現できることはすべて、 適切な関数でラップしてどの種類の条件かを宣言することで @when で表現できます。 これにより、メディアクエリやサポートクエリなど複数種類のクエリを 1つのブール式で簡単に組み合わせられます。 これがなければ、 別々の条件付きルールをネストする必要があり、 読み書きが難しくなるうえ、 条件は「and」というブール関係で結合されることが前提となり(他の関係を示すのは容易ではなく)、 提案されている 条件付きルールチェーン における有用性も制限されます。

さらに @else ルールも追加されます。 これは他の条件付きルールの直後に続き、 直前のルールの条件の否定を自動的に条件として扱うため、 条件付きルールチェーン において最初にマッチしたルールだけが適用されます。

また、コンテナクエリも追加されます。 これは概念的にはメディアクエリに似ていますが、 文書全体ではなく文書内の要素(ボックスの寸法や計算済みスタイルなど)の特性をテストできます。

2. @supports ルールの拡張

この仕様レベルでは、<supports-feature> 構文を次のように拡張します。

<supports-feature> = <supports-selector-fn>
                   | <supports-font-tech-fn> | <supports-font-format-fn>
                   | <supports-at-rule-fn>
           | <supports-decl>
<supports-decl> = ( [ <declaration> | <supports-condition-name> ] )
<supports-font-tech-fn> = font-tech( <font-tech> )
<supports-font-format-fn> = font-format( <font-format> )
<supports-at-rule-fn> = at-rule( <at-keyword-token> )
<supports-condition-name>

UA が指定された名前付き条件をサポートしていれば結果は真になります。 名前が認識されない場合、結果は偽です。

<supports-font-tech-fn>

関数の引数として与えられたフォント技術を UA がサポートしていれば結果は真になります。

<supports-font-format-fn>

関数の引数として与えられたフォントフォーマットを UA がサポートしていれば結果は真になります。

<supports-at-rule-fn>

関数の引数として与えられたアットルールを UA がサポートしていれば結果は真になります。

2.1. サポートの定義の拡張

2.1.1. フォント技術とフォーマット

テスト

CSS プロセッサは、レイアウトおよび描画において指定された CSS Fonts 4 § 11.1 Font tech を利用できる場合、フォント技術をサポートしていると見なされます。

CSS プロセッサは、レイアウトおよび描画において指定された CSS Fonts 4 § 11.2 Font formats を利用でき、かつそのフォーマットが <string> として指定されていない場合、 フォントフォーマットをサポートしていると見なされます。

2.1.2. アットルール

テスト

CSS プロセッサは、任意の文脈で指定された at-keyword で始まる アットルールを受理する場合、 アットルールをサポートしていると見なされます。

注記: @charset は有効な アットルールではないため、 この定義の下ではサポートされているとは見なされません。

2.1.3. 名前付き条件

関連する 名前付き supports 条件が true を返すとき、 CSS プロセッサは名前付き条件をサポートしていると見なされます。

3. 一般化条件付きルール: @when ルール

@when アットルールは、 条件付きグループルールであり、@media@supports などの個々の条件付きグループルールを一般化したものです。 定義は次のとおりです。

@when <boolean-condition> {
  <rule-list>
}

ここで、<boolean-condition>Media Queries 4 § 3 構文に準じたブール代数ですが、 葉として media() および supports() 関数を用います。

「ブール代数(X を葉とする)」を Conditional で一般的に定義し、 すべての条件付きルールがそれを直接参照できるようにすべきです。 各自でブール代数を再定義しなくて済むように。

media() および supports() 関数は次のように定義されます。

media() = media( [ <mf-plain> | <mf-boolean> | <mf-range> ] )
supports() = supports( <declaration> )

media() または supports() 関数は、 その内部の条件に対応するブール結果と関連付けられます。

4. 連鎖条件付き: @else ルール

通常、条件付きグループルールは独立しており、 それぞれが他のルールを直接参照することなく個別の条件を評価し、 自身の条件のみに基づいて内包するルールを適用するかどうかを決定します。

これは単純な条件には問題ありませんが、 相互に排他的であるべき条件付きルールの集合を書くのは困難になります。 作者は他のルールが適用される場合に自身が有効化されないよう、 条件を非常に注意深く作成しなければならず、 さらに条件付きルールの集合が誤ってすべてのケースを除外してしまい、 スタイル未適用の状況を残さないようにする必要があります。

@else ルールは 条件付きグループルールであり、条件付きルールチェーンを形成するために使用されます。 これは複数の条件付きグループルールを関連付け、 最初にマッチしたものだけが条件を true と評価することを保証します。 定義は次のとおりです。

@else <boolean-condition>? {
  <rule-list>
}

@else@when と同一の解釈です。 <boolean-condition> が省略された場合は、 常に true の条件を持つものとして扱われます。

条件付きルールチェーンとは、 連続した 条件付きグループルールの並びであり、 @else 以外の条件付きグループルールで始まり、 その後に 0 個以上の @else ルールが続くものです。 連続する条件付きグループルールの間には空白やコメント以外を置けず、 それ以外のトークンはチェーンを「分断」します。

チェーン内で条件を省略できるのは最後の @else のみとするべきでしょうか? 私はデバッグ時に if-else チェーンの一部を "true" にしてショートサーキットすることがよくありますが、 CSS でも同様に有用だと推測します。 条件を誤って省略した場合でも、何かおかしいことに気付くのは比較的容易です。

条件付きルールチェーン内では、 各条件付きグループルールの条件が順に評価されます。 いずれかが true になった場合、 チェーン内のその後続の条件付きグループルールの条件は、 明示された条件内容に関わらず false と評価されます。

@else ルールが 条件付きルールチェーンの一部でない場合は無効であり、無視されなければなりません。

例えば、次は(やや馬鹿げた)条件チェーンです。
@when media(width >= 400px) and media(pointer: fine) and supports(display: flex) {
  /* A */
} @else supports(caret-color: pink) and supports(background: double-rainbow()) {
  /* B */
} @else {
  /* C */
}

上記のルールのうち、厳密に 1 つだけが選択されます。 2 番目のルールは大きな幅や高精度ポインタ、flexbox サポートを除外していないにもかかわらず、 最後のルールは何も指定していないにもかかわらず、です。

条件付きルールチェーンなしで同じ結果を得るには、次のように書く必要があります。

@media (width >= 400px) and (pointer: fine) {
  @supports (display: flex) {
  /* A */
  }
  @supports not (display: flex) {
  @supports (caret-color: pink) and (background: double-rainbow()) {
    /* B */
  }
  @supports not ((caret-color: pink) and (background: double-rainbow())) {
    /* C */
  }
  }
}
@media not ((width >= 400px) and (pointer: fine)) {
  @supports (caret-color: pink) and (background: double-rainbow()) {
  /* B */
  }
  @supports not ((caret-color: pink) and (background: double-rainbow())) {
  /* C */
  }
}

これは読みづらく、 条件と内容の両方に大きな重複を要し、 正しく書くのが非常に難しい書き方です。 条件がさらに複雑になれば(実際のコンテンツでは珍しくありません)、 この例は著しく悪化します。

この例では、3 種類のカラーフォント技術を優先度順にテストし、 さらにモノクロのフォールバックを用意します。 最も高機能な COLRv1 はグラデーションとフォントバリエーションの両方をサポートします。 次善の選択である SVG はグラデーションをサポートし、 最も機能が少ない COLRv0 はフラットな単色塗りのみをサポートします。

フォールバックにはテスト条件がないため、 先行する条件のいずれかが満たされない限り常に選択されます。

@when font-tech(color-COLRv1) and font-tech(variations) {
  @font-face { font-family: icons; src: url(icons-gradient-var.woff2); }
}
@else font-tech(color-SVG) {
  @font-face { font-family: icons; src: url(icons-gradient.woff2); }
}
@else font-tech(color-COLRv0) {
  @font-face { font-family: icons; src: url(icons-flat.woff2); }
}
@else {
  @font-face { font-family: icons; src: url(icons-fallback.woff2); }
}

この例では、 変数カラーフォントは COLRv1 がサポートされ、 かつフォントバリエーションもサポートされている場合にのみダウンロードされる点に注意してください。

また、利用可能なオプションのうち 1 つだけがダウンロードされることにも注意してください。 次の例が示すように、@when@else がなければそうはなりません。

この例では、 COLRv1 がサポートされている場合にフォールバックが使用されないように見えますが、 実際には両方のフォントがダウンロードされ、 使用されない場合は帯域幅の無駄になります。

一部の文字に対してはフォールバックが依然として使用される可能性があります。 たとえば、カラーフォントがラテンのみをサポートし、 フォールバックがラテンとギリシャ文字をサポートする場合などです。

@font-face { font-family: icons; src: url(icons-fallback.woff2);
@supports font-tech(color-COLRv1) {
  @font-face { font-family: icons; src: url(icons-gradient-var.woff2); }
}

5. コンテナクエリ

メディアクエリは、 文書が表示されているユーザーエージェントやデバイス環境(ビューポートの寸法やユーザー設定など)の側面を問い合わせる手段を提供しますが、 コンテナクエリは文書内の要素(ボックスの寸法や計算済みスタイルなど)の側面をテストできます。

既定では、すべての要素は コンテナスタイルクエリの目的のために クエリコンテナです。 また、コンテナサイズクエリおよび コンテナスクロール状態クエリのための クエリコンテナとして確立するには、 container-type プロパティ (または containerショートハンド)を使って追加のクエリ種別を指定します。 クエリコンテナフラットツリーの子孫に適用されるスタイルルールは、 @container条件付きグループルールを用いて、それに対するクエリにより条件付けできます。

例えば、メインコンテンツ領域とサイドバーをコンテナとして定義し、 コンテナのサイズに応じて縦から横のレイアウトに変化する .media-object を記述できます。
main, aside {
  container: my-layout / inline-size;
}

.media-object {
  display: grid;
  grid-template: 'img' auto 'content' auto / 100%;
}

@container my-layout (inline-size > 45em) {
  .media-object {
  grid-template: 'img content' auto / auto 1fr;
  }
}

メインとサイドバー領域内のメディアオブジェクトは、 それぞれ自身のコンテキストとなるコンテナに応じて反応します。

::part() および ::slotted()疑似要素セレクタは DOM ツリー内の実際の要素を表し、 それらの要素の フラットツリーの先祖によって クエリコンテナを確立できます。 その他の疑似要素については、 その起点要素の包含するフラットツリー先祖によって クエリコンテナを確立できます。

これにより、次のことが成り立ちます。
起点要素のサイズをクエリする ::before セレクタの例:
<style>
  #container {
  width: 100px;
  container-type: inline-size;
  }
  @container (inline-size < 150px) {
  #inner::before {
    content: "BEFORE";
  }
  }
</style>
<div id=container>
  <span id=inner></span>
</div>
シャドウホストの子をスタイルする ::slotted() セレクタは、 シャドウツリー内のコンテナをクエリできます。
<div id=host style="width:200px">
  <template shadowroot=open>
  <style>
    #container {
    width: 100px;
    container-type: inline-size;
    }
    @container (inline-size < 150px) {
    ::slotted(span) {
      color: green;
    }
    }
  </style>
  <div id=container>
    <slot />
  </div>
  </template>
  <span id=slotted>Green</span>
</div>

5.1. クエリコンテナの作成: container-type プロパティ

Name: container-type
Value: normal | [ [ size | inline-size ] || scroll-state ]
Initial: normal
Applies to: all elements
Inherited: no
Percentages: n/a
Computed value: specified keyword
Canonical order: per grammar
Animation type: not animatable

container-type プロパティは、要素を特定の種類のクエリに対する クエリコンテナとして確立します。 特定の種類のコンテインメントを必要とするサイズの コンテナクエリに対しては、 このプロパティによって要素を明示的にクエリコンテナにします。 その他の種類のクエリコンテナについては、 例えば コンテナスタイルクエリにおいて 任意の要素がクエリコンテナになり得ます。

値の意味は次のとおりです。

size
クエリコンテナを、 コンテナサイズクエリに対して インライン軸ブロック軸の両方で確立します。 style containmentsize containmentprincipal box に適用し、 独立したフォーマッティングコンテキストを確立します。
inline-size
コンテナ自身の インライン軸における コンテナサイズクエリのための クエリコンテナを確立します。 style containmentinline-size containmentprincipal box に適用し、 独立したフォーマッティングコンテキストを確立します。
scroll-state
コンテナスクロール状態クエリのための クエリコンテナを確立します
normal
要素は コンテナサイズクエリコンテナスクロール状態クエリに対する クエリコンテナではありませんが、 コンテナスタイルクエリに対する クエリコンテナであることは変わりません。
例えば、作者はコンテナに応じて変化するタイポグラフィ(container-responsive typography)を作成でき、 コンテナのサイズに基づいて font-sizeline-height、その他のタイポグラフィ関連項目を調整できます。
aside, main {
  container-type: inline-size;
}

h2 { font-size: 1.2em; }

@container (width > 40em) {
  h2 { font-size: 1.5em; }
}

クエリ条件で使用されている 40em の値は、 関連する クエリコンテナ上の computed valuefont-size に相対的です。

コンテナはクエリのために計算済みスタイル値も公開できます。 これは複数のプロパティにまたがって動作を切り替えるのに有用です。
@container style(--cards: small) {
  article {
  border: thin solid silver;
  border-radius: 0.5em;
  padding: 1em;
  }
}
コンテナはスクロールオフセットに依存する状態も公開できます。 この例では、sticky 位置指定された要素が上端に張り付いたときに、その子孫をスタイルします。
#sticky {
  container-type: scroll-state;
  position: sticky;
}
@container scroll-state(stuck: top) {
  #sticky-child {
  background-color: lime;
  }
}

5.2. クエリコンテナの命名: container-name プロパティ

Name: container-name
Value: none | <custom-ident>+
Initial: none
Applies to: all elements
Inherited: no
Percentages: n/a
Computed value: the keyword none, or an ordered list of identifiers
Canonical order: per grammar
Animation type: not animatable
テスト

container-name プロパティは クエリコンテナ名のリストを指定します。 これらの名前は @container ルールで使用し、 どの クエリコンテナを対象とするかを絞り込むことができます。 コンテナ名は ツリースコープ名ではありません。

none
この クエリコンテナには クエリコンテナ名がありません。
<custom-ident>
クエリコンテナ名identifier として指定します。 キーワード noneandnotor はこの <custom-ident> からは除外されます。
場合によっては、最も近い先祖コンテナではない特定のコンテナの側面をクエリしたいことがあります。 例えば、メインコンテンツ領域の高さをクエリし、 さらにネストされたインラインコンテナの幅をクエリしたい場合などです。
main {
  container-type: size;
  container-name: my-page-layout;
}

.my-component {
  container-type: inline-size;
  container-name: my-component-library;
}

@container my-page-layout (block-size > 12em) {
  .card { margin-block: 2em; }
}

@container my-component-library (inline-size > 30em) {
  .card { margin-inline: 2em; }
}

コンテナの名前に基づいてのみ、そのコンテナをクエリすることも可能です。

@container my-page-layout {
  .card { padding: 1em; }
}

5.3. 名前付きコンテナの作成: container ショートハンド

名前: container
値: <'container-name'> [ / <'container-type'> ]?
初期値: 個別プロパティを参照
適用対象: 個別プロパティを参照
継承: 個別プロパティを参照
パーセンテージ: 個別プロパティを参照
算出値: 個別プロパティを参照
アニメーションタイプ: 個別プロパティを参照
標準順序: 文法どおり
テスト

container ショートハンドプロパティは、 container-typecontainer-name の両方を同時に設定します。 <'container-type'> が省略された場合、 その値は初期値にリセットされます。

ショートハンド構文を使って container-typecontainer-name の両方を定義できます:
main {
  container: my-layout / size;
}

.grid-item {
  container: my-component / inline-size;
}

5.4. コンテナクエリ: @container ルール

@container ルールは 条件付きグループルールであり、 その条件部には コンテナクエリコンテナサイズクエリコンテナスタイルクエリ のブール結合)が入ります。 <block-contents> ブロック内のスタイル宣言は @container ルールの 条件によってフィルタされ、 その要素の コンテナクエリ が真となる クエリコンテナ に対してのみ適用されます。

@container ルールの構文は次のとおりです:

@container <container-condition># {
  <block-contents>
}

ここで:

<container-condition> = [ <container-name>? <container-query>? ]!
<container-name> = <custom-ident>
<container-query> = not <query-in-parens>
          | <query-in-parens> [ [ and <query-in-parens> ]* | [ or <query-in-parens> ]* ]
<query-in-parens> = ( <container-query> )
          | ( <size-feature> )
          | style( <style-query> )
          | scroll-state( <scroll-state-query> )
          | <general-enclosed>

<style-query>     = not <style-in-parens>
          | <style-in-parens> [ [ and <style-in-parens> ]* | [ or <style-in-parens> ]* ]
          | <style-feature>
<style-in-parens> = ( <style-query> )
          | ( <style-feature> )
          | <general-enclosed>
<style-feature> = <style-feature-plain> | <style-feature-boolean> | <style-range>
<style-feature-plain> = <style-feature-name> : <style-feature-value>
<style-feature-boolean> = <style-feature-name>
<style-range> = <style-range-value> <mf-comparison> <style-range-value>
    | <style-range-value> <mf-lt> <style-range-value> <mf-lt> <style-range-value>
    | <style-range-value> <mf-gt> <style-range-value> <mf-gt> <style-range-value>
<style-range-value> = <custom-property-name> | <style-feature-value>

<scroll-state-query>     = not <scroll-state-in-parens>
             | <scroll-state-in-parens> [ [ and <scroll-state-in-parens> ]* | [ or <scroll-state-in-parens> ]* ]
             | <scroll-state-feature>
<scroll-state-in-parens> = ( <scroll-state-query> )
             | ( <scroll-state-feature> )
             | <general-enclosed>
テスト

noneandnotor は 上記 <custom-ident> から除外されます。

各要素について、 クエリ対象となる クエリコンテナ は、 その要素の先祖クエリコンテナのうち、 <container-query> 内の すべての コンテナ機能に対して有効な クエリコンテナとして確立されているものから選ばれます。 <container-query> に 未知または未サポートの コンテナ機能が含まれる場合、 その <container-condition> については クエリコンテナ は選択されません。 <container-name> は、 対象となる クエリコンテナの集合を 一致する クエリコンテナ名を持つものに絞り込みます。

要素に対して有効な クエリコンテナ が選択されると、 <container-query> 内の各 コンテナ機能 が その クエリコンテナ に対して評価されます。 有効な クエリコンテナ が先祖に存在しない場合、 その要素に対する コンテナクエリunknown となります。 メディアクエリと同様に、<general-enclosed>unknown となります。 <container-query> が省略された場合は、 <container-name> が一致すれば クエリコンテナは有効となります。

コンテナクエリ が 複数の <container-condition> を含む場合、 各条件は独自に クエリコンテナ を選び、独立して評価されます。 コンテナクエリは、 構成要素 <container-condition> のうち いずれかtrue であれば true となり、 全てが false の場合のみ false となります。

メディアクエリと同様に、 1つの条件内に複数のクエリを連結できます:
@container card (inline-size > 30em) and style(--responsive: true) {
  /* styles */
}

上記のスタイルは、 "card" という名前の先祖コンテナが inline-sizestyle の両方の条件を満たす場合のみ適用されます。

また、複数の条件をリストにまとめ、 各条件を異なるコンテナに対して評価することもできます:

@container card (inline-size > 30em), style(--large: true) {
  /* styles */
}

上記のスタイルは、 "card" という名前の先祖コンテナが inline-size 条件を満たす場合 または 最も近いスタイルコンテナが style 条件を満たす場合に適用されます。

複数のネストした コンテナクエリ 内の要素に定義されたスタイルルールは、 その要素に対してすべてのラップされた コンテナクエリ が 真である場合に適用されます。

注記: ネストされた コンテナクエリ は 異なるコンテナに対して評価される場合があるため、 個々の <container-condition> を 1つのクエリにまとめることが常に可能とは限りません。

1つのカンマ区切りの コンテナクエリ を使って、 複数のコンテナをクエリできます:
@container card (inline-size > 30em), style(--responsive: true) {
  /* styles */
}

上記のスタイルは、 inline-size 条件を満たす "card" という名前のコンテナ または style 条件を満たすコンテナ のいずれかの内部の要素に適用されます。

複数のコンテナをクエリしつつ すべて の条件を満たす場合に限定したい場合は、 複数のクエリをネストする必要があります:

@container card (inline-size > 30em) {
  @container style(--responsive: true) {
  /* styles */
  }
}

上記のスタイルは、 inline-size 条件を満たす "card" という名前の先祖コンテナ かつ style 条件を満たす先祖コンテナ の両方が存在する場合のみ適用されます。

グローバルな名前定義 アットルール(例: @keyframes@font-face@layer など) が コンテナクエリ 内で定義されていても、 コンテナクエリ条件の影響は受けません。

5.5. アニメーションするコンテナ

コンテナクエリ の評価結果が変化した場合は、 その変化が スタイル変更イベントの一部でなければなりません。 この変化が アニメーション効果による場合でも同様です。

兄弟要素のトランジションが間接的にコンテナのサイズに影響を与え、 その結果コンテナクエリの評価が変化するたびに スタイル変更イベントが発生します:
main {
  display: flex;
  width: 300px;
}

#container {
  container-type: inline-size;
  flex: 1;
}

/* Resolved width is initially 200px, but changes as the transition
   on #sibling progresses. */
#inner {
  transition: 1s background-color;
  background-color: tomato;
}

/* When this container query starts (or stops) applying, a transition
   must start on background-color on #inner. */
@container (width <= 150px) {
  #inner {
  background-color: skyblue;
  }
}
<main>
  <div id=container>
  <div id=inner>Inner</div>
  </div>
  <div id=sibling>Sibling</div>
</main>

computed valueコンテナクエリ長さ単位によって変化した場合も、 スタイル変更イベントの一部でなければなりません。

6. コンテナ機能

コンテナ機能は、クエリコンテナの特定の側面をクエリします。

コンテナ機能は、メディア機能と同じルールでブールコンテキストで評価されます。

6.1. サイズコンテナ機能

コンテナサイズクエリは、クエリコンテナprincipal boxのサイズをクエリできます。 これは個別のサイズ機能 (<size-feature>) のブール結合であり、それぞれがクエリコンテナの単一かつ特定の寸法機能をクエリします。 <size-feature>の構文はメディア機能と同じで、 機能名、比較演算子、値からなります。[mediaqueries-5] サイズ機能サイズクエリとしてブール構文・ロジックで結合する方法も CSS機能クエリと同じです。 (@supportsを参照。[css-conditional-3]

テスト

クエリコンテナprincipal boxを持たない場合や、 principal boxがレイアウトコンテインメントボックスでない場合、 またはクエリコンテナが関連軸でコンテナサイズクエリをサポートしない場合、 サイズ機能の評価結果は unknown となります。

相対長さ単位(コンテナクエリ長さ単位を含む)およびカスタムプロパティコンテナクエリ条件内で computed valueクエリコンテナの値を基準に評価されます。

ツリーカウント関数(CSS Values 5 § 9 Tree Counting Functions: sibling-count() および sibling-index() 記法)は コンテナ要素に対して評価されます。

注記: これはメディアクエリにおける相対単位の扱いと異なります。

注記: カスタムプロパティの置換によってサイズ機能の値が無効になった場合、 他の無効な機能値と同様に扱われ、 サイズ機能の評価結果はunknownとなります。

例えば、異なるfont-sizeを持つクエリコンテナでは、 emベースのクエリはそれぞれのフォントサイズに対して相対的に評価されます:
aside, main {
  container-type: inline-size;
}

aside { font-size: 16px; }
main { font-size: 24px; }

@container (width > 40em) {
  h2 { font-size: 1.5em; }
}

クエリ条件で使われている40emの値は、 関連するcomputed valuefont-sizeに対して相対的に評価されます:

同様に、クエリコンテナvar()ベースのクエリも それぞれのcomputed valueカスタムプロパティに対して評価します:
aside, main {
  container-type: inline-size;
}

aside { --query: 300px; }
main { --query: 500px; }

@container (width > var(--query)) {
  h2 { font-size: 1.5em; }
}

クエリ条件で使われているvar(--query)の値は、 関連するcomputed value--query カスタムプロパティで置き換えられます:

6.1.1. 幅: width 機能

名前: width
対象: @container
値: <length>
型: range

width コンテナ機能は、クエリコンテナcontent boxについてクエリします。

6.1.2. 高さ: height 機能

名前: height
対象: @container
値: <length>
型: range

height コンテナ機能は、高さクエリコンテナcontent boxについてクエリします。

6.1.3. インラインサイズ: inline-size 機能

名前: inline-size
対象: @container
値: <length>
型: range

inline-size コンテナ機能は、サイズクエリコンテナcontent boxクエリコンテナインライン軸についてクエリします。

6.1.4. ブロックサイズ: block-size 機能

名前: block-size
対象: @container
値: <length>
型: range

block-size コンテナ機能は、サイズクエリコンテナcontent boxクエリコンテナブロック軸についてクエリします。

6.1.5. アスペクト比: aspect-ratio 機能

名前: aspect-ratio
対象: @container
値: <ratio>
型: range

aspect-ratio コンテナ機能は、 width コンテナ機能の値を height コンテナ機能の値で割った比率として定義されます。

6.1.6. 向き: orientation 機能

名前: orientation
対象: @container
値: portrait | landscape
型: discrete
portrait
orientation コンテナ機能は、 height コンテナ機能の値が width コンテナ機能の値以上である場合に portrait となります。
landscape
それ以外の場合、orientationlandscape となります。

6.2. スタイルコンテナ機能

コンテナスタイルクエリは、 computed valueクエリコンテナに対してクエリできます。 これは個別のスタイル機能<style-feature>)のブール結合であり、 それぞれがクエリコンテナの単一かつ特定のプロパティをクエリします。 <style-feature>の構文は 有効な宣言 [CSS-SYNTAX-3]と同じか、 <style-feature-name> または有効なスタイル範囲<style-range>)です。 <style-feature-name>は、 サポートされているCSSプロパティまたは有効な<custom-property-name>です。 <style-feature-value>の生成規則は、 <declaration-value>であり、 <mf-lt><mf-gt> および <mf-eq> トークンを含まない限り有効です。

テスト

<style-feature-plain>は、 computed valueクエリコンテナで指定されたプロパティについて 指定された値(これもクエリコンテナに関して計算される)と一致する場合はtrue、 そうでない場合はfalseとなります。

値を持たないスタイル機能<style-feature-boolean>)は、 computed valueが 指定されたプロパティ初期値と異なる場合にtrueとなります。

<style-range>を評価するには、次の手順を行います:
  1. <style-range-value><custom-property-name>の場合、 <custom-property-name>var()でラップされたかのように置換する必要があります。

  2. 任意の置換関数<style-range-value>内で置換します。

  3. <style-range-value><number><percentage><length><angle><time><frequency>、 または <resolution> にパースします。できない場合はfalseと評価します。

  4. 範囲内の各<style-range-value>が同じ型の場合、 各値を計算し比較演算を評価します。 単位なしゼロは、<length>との比較時はゼロ長さとして扱います。

  5. それ以外の場合はfalseと評価します。

スタイル機能スタイルクエリとしてブール構文・ロジックで結合する方法も CSS機能クエリと同じです。 (@supportsを参照。[css-conditional-3]

スタイル機能ショートハンドプロパティをクエリする場合は、 そのcomputed valueが すべてのロングハンドプロパティで一致すればtrue、 一致しなければfalseとなります。

カスケード依存キーワードrevertrevert-layerなど)は スタイル機能の値としては無効であり、 その場合コンテナスタイルクエリはfalseとなります。

注記: 残りの非カスケード依存CSSワイドキーワードは、 他の値と同様にクエリコンテナに関して計算されます。

6.3. スクロール状態コンテナ機能

コンテナスクロール状態クエリは、 スクロール位置に依存する状態をコンテナに対してクエリできるようにします。これは、 個々のスクロール状態機能<scroll-state-feature>)のブール結合で構成され、 それぞれがクエリコンテナの単一の機能をクエリします。 <scroll-state-feature>の構文は メディア機能と同様で、機能名、比較子、値から成ります。

スクロール状態機能は、 スクロール要素(スクローラ)自体の状態に一致させることも、 先祖のスクロールコンテナスクロールポートのスクロール位置によって影響を受ける要素の状態に一致させることもできます。前者の例は scrollable 機能、後者は snapped です。

6.3.1. スクロール状態の更新

スクロール状態は、クエリされたスクロール状態がスタイル変更を引き起こし、 レイアウトの結果としてスクロール状態が変化し得るため、レイアウトサイクルを引き起こす可能性があります。

このようなレイアウトサイクルを避けるために、scroll-stateクエリコンテナは、 スナップショット後レイアウト状態ステップを実行する処理の一部として現在の状態を更新します。これは HTML のイベントループ処理モデルの特定のタイミングでのみ実行されます。

スナップショット後レイアウト状態ステップを実行するよう要求されたときは、 すべてのscroll-stateクエリコンテナの現在の状態を更新します。スナップショットされたこの状態は、 次にこれらのステップが実行されるまでの間に行われるすべてのスタイルおよびレイアウトの更新に利用されます。

6.3.2. スティッキー配置: stuck 機能

名前: stuck
対象: @container
値: none | top | right | bottom | left | block-start | inline-start | block-end | inline-end
型: discrete
テスト

stuck コンテナ機能は、与えられたエッジに対して sticky に配置されたコンテナが、sticky ビュー矩形内に留まるよう視覚的にシフトされているかどうかをクエリします。 論理エッジは、クエリコンテナの direction と writing-mode に基づいて物理エッジに対応付けられます。 クエリコンテナsticky 位置指定でない場合、いずれの値にも一致しません。

互いに直交する軸に属する2つの値が同時に一致することはあり得ますが、 同一軸上の反対側エッジが同時に一致することはありません。

一致する可能性:
@container scroll-state((stuck: top) and (stuck: left)) { ... }

決して一致しない:

@container scroll-state((stuck: left) and (stuck: right)) { ... }
none
sticky コンテナはどの方向にもシフトされていません。
top
sticky コンテナは上端内に留まるようシフトされています。
right
sticky コンテナは右端内に留まるようシフトされています。
bottom
sticky コンテナは下端内に留まるようシフトされています。
left
sticky コンテナは左端内に留まるようシフトされています。
block-start
sticky コンテナは block-start エッジ内に留まるようシフトされています。
inline-start
sticky コンテナは inline-start エッジ内に留まるようシフトされています。
block-end
sticky コンテナは block-end エッジ内に留まるようシフトされています。
inline-end
sticky コンテナは inline-end エッジ内に留まるようシフトされています。

6.3.3. スクロールスナップ: snapped 機能

名前: snapped
対象: @container
値: none | x | y | block | inline | both
型: discrete
テスト

snapped コンテナ機能は、スナップターゲットが 与えられた軸において、そのスクロールスナップコンテナにスナップしているか(またはスナップし得るか)をクエリします。すなわち、 scrollsnapchanging イベントが発火するスナップターゲットに一致します。

none
クエリコンテナスナップターゲットではありません。
x
snapped コンテナ機能は、 x に対して、 クエリコンテナがそのスクロールコンテナの 水平のスナップターゲットである場合に一致します。
y
snapped コンテナ機能は、 y に対して、 クエリコンテナがそのスクロールコンテナの 垂直のスナップターゲットである場合に一致します。
block
snapped コンテナ機能は、 block に対して、 クエリコンテナスナップターゲットであり、 そのスクロールスナップコンテナのブロック方向において該当する場合に一致します。
inline
snapped コンテナ機能は、 inline に対して、 クエリコンテナが そのスナップターゲットであり、 スクロールスナップコンテナのインライン方向において該当する場合に一致します。
both
snapped コンテナ機能は、 both に対して、 クエリコンテナが そのスナップターゲットであり、 スクロールスナップコンテナの両方向において該当する場合に一致します。

6.3.4. スクロール可能: scrollable 機能

名前: scrollable
対象: @container
値: none | top | right | bottom | left | block-start | inline-start | block-end | inline-end | x | y | block | inline
型: discrete
テスト

scrollable コンテナ機能は、スクロールコンテナが、ユーザー操作によるスクロールで到達可能な方向に、 クリップされたscrollable overflow rectangleを持つコンテンツを有しているかどうかをクエリします。 つまり、scrollablehidden なコンテナや、負の scrollable overflow 領域には一致しません。

論理値は、クエリコンテナの direction と writing-mode に基づいて物理方向に対応付けられます。 コンテナがスクロールコンテナでない場合、いずれの値にも一致しません。

none
スクロールコンテナはいずれの方向にもscrollable overflowを持ちません。
top
スクロールコンテナは上端を越えるscrollable overflowを持ちます。
right
スクロールコンテナは右端を越えるscrollable overflowを持ちます。
bottom
スクロールコンテナは下端を越えるscrollable overflowを持ちます。
left
スクロールコンテナは左端を越えるscrollable overflowを持ちます。
block-start
スクロールコンテナblock-start 側にscrollable overflowを持ちます。
inline-start
スクロールコンテナinline-start 側にscrollable overflowを持ちます。
block-end
スクロールコンテナblock-end 側に scrollable overflowを持ちます。
inline-end
スクロールコンテナinline-end 側に scrollable overflowを持ちます。
x
スクロールコンテナは水平方向にscrollable overflowを持ちます。
y
スクロールコンテナは垂直方向にscrollable overflowを持ちます。
block
スクロールコンテナはブロック方向にscrollable overflowを持ちます。
inline
スクロールコンテナはインライン方向にscrollable overflowを持ちます。

6.3.5. スクロール済み: scrolled 機能

名前: scrolled
対象: @container
値: none | top | right | bottom | left | block-start | inline-start | block-end | inline-end | x | y | block | inline
型: discrete
テスト

クエリコンテナスクロールコンテナである場合、 scrolled コンテナ機能は、その直近の相対スクロールの方向をクエリします。 論理値は、クエリコンテナの direction と writing-mode に基づいて物理方向に対応付けられます。 コンテナがスクロールコンテナでない場合、いずれの値にも一致しません。

none
クエリコンテナはまだ相対スクロールを行っていません。
top
直近の相対スクロールは上方向でした。
right
直近の相対スクロールは右方向でした。
bottom
直近の相対スクロールは下方向でした。
left
直近の相対スクロールは左方向でした。
block-start
直近の相対スクロールblock-start 方向でした。
inline-start
直近の相対スクロールinline-start 方向でした。
block-end
直近の相対スクロールblock-end 方向でした。
inline-end
直近の相対スクロールinline-end 方向でした。
x
直近の相対スクロールは水平方向でした。
y
直近の相対スクロールは垂直方向でした。
block
直近の相対スクロールはブロック方向でした。
inline
直近の相対スクロールはインライン方向でした。

7. コンテナ相対長さ: cqwcqhcqicqbcqmincqmax 単位

コンテナクエリ長さ単位は、クエリコンテナの寸法に対する相対的な長さを指定します。 コンテナクエリ長さ単位を使用するスタイルシートは、コンポーネントをあるクエリコンテナから別のクエリコンテナへより簡単に移動できます。

コンテナクエリ長さ単位は以下のとおりです:

コンテナ単位の参考まとめ
単位 基準
cqw クエリコンテナの1%
cqh クエリコンテナ高さの1%
cqi クエリコンテナインラインサイズの1%
cqb クエリコンテナブロックサイズの1%
cqmin cqicqb の小さい方の値
cqmax cqicqb の大きい方の値
テスト

各要素について、コンテナクエリ長さ単位は、 その単位で記述された軸(または軸群)についてコンテナサイズクエリとして評価されます。 各軸のクエリコンテナは、 その軸でコンテナサイズクエリを許可する最も近い祖先コンテナです。 適格なクエリコンテナがない場合は、 その軸の小さいビューポートサイズを使用します。

注: 場合によっては、同じ要素上のcqicqb 単位が異なるクエリコンテナを基準として評価されます。 同様に、cqmin および cqmax 単位は cqicqb 単位の大きい方または小さい方を表し、 それらの寸法が異なるクエリコンテナに由来する場合でも同様です。

子要素は、親に指定された相対値を継承せず、 算出値を継承します。

著者は、コンテナクエリ長さ単位が適切なクエリコンテナを持つように、同じcontainer-typeに依存するコンテナクエリ内でそれらを適用できます。 カスタムフォールバック値は、コンテナクエリの外部で定義できます:
/* フォールバック値はコンテインメントに依存しません */
h2 { font-size: 1.2em; }

@container (inline-size >= 0px) {
  /* インラインサイズコンテナが利用可能な場合のみ適用 */
  h2 { font-size: calc(1.2em + 1cqi); }
}

8. カスタムサポートクエリの定義:@supports-condition規則

@supports-condition at-ruleは、著者がサポートクエリを定義して名前を付け、後で再利用できるようにする条件付きグループ規則です。 これにより、複雑または頻繁に使用するフィーチャークエリを名前で参照できるようになり、 保守性と可読性が向上します。

@supports-condition <supports-condition-name> {
  <block-contents>
}
テスト

ここで、<supports-condition-name> は、サポートクエリ名を定義する<extension-name>です。

ブロック内の内容は、ユーザーエージェントが使用されている機能をサポートしているかどうかを判定するために評価されます。 内容はドキュメントのレンダリングには影響しません。

一度定義された名前付きサポート条件は、その後の@supportsまたは@when条件で使用できます。

同じ名前で複数の@supports-condition規則が定義された場合、 ドキュメント順で最後のものが有効となり、それ以前のものは無視されます。

たとえば、複数のプロパティを同時にチェックするサポートクエリを定義できます:
@supports-condition --thicker-underlines {
  text-decoration-thickness: 0.2em;
  text-underline-offset: 0.3em;
}

/* (text-decoration-thickness: 0.2em) および (text-underline-offset: 0.3em) と同等 */
@supports (--thicker-underlines) {
  a {
    text-decoration: underline;
    text-decoration-thickness: 0.2em;
    text-underline-offset: 0.3em;
  }
}

@supports-condition規則は@import@namespace規則の前に記述できます(@charset規則がある場合はその後)。

サポートクエリには任意の宣言を含めることができるため、 ネストなどの複雑な機能のサポートを検出するのにも利用できます:
@supports-condition --nesting {
  & { }
}

@import url("nested-styles.css") supports(--nesting);
サポートクエリは at-rule のサポート検出にも利用できます:
@supports-condition --stuck-container-feature {
  @container scroll-state(stuck: top) { }
}

@supports (--stuck-container-feature) {
  div { border-color: navy; }
}

at-rule の名前は議論中です。 他の候補には @supports-query@supports-test@custom-supports などがあります。 この名前はカスタムメディアクエリで選択されたものと一貫性があるべきです。

9. API

9.1. CSSContainerRule インターフェイス

CSSContainerRule インターフェイスは、@container規則を表します。

[Exposed=Window]
interface CSSContainerRule : CSSConditionRule {
  readonly attribute CSSOMString containerName;
  readonly attribute CSSOMString containerQuery;
};
conditionTextCSSOMString (CSSContainerRule専用のCSSConditionRule上の属性定義)
conditionText属性(親のCSSConditionRule規則上で定義)は、 次の値を返さなければなりません:
@container規則に<container-name>が関連付けられている場合
containerName属性とcontainerQuery属性の値を単一の空白で結合したもの。
それ以外の場合
containerQuery属性の値。
containerNameCSSOMString
containerName属性は、取得時に次の値を返さなければなりません:
@container規則に<container-name>が関連付けられている場合
その<container-name>をシリアライズした結果。
それ以外の場合
空文字列。
containerQueryCSSOMString
containerQuery属性は、 取得時に、指定された<container-query>を 論理的な単純化をせずに返さなければなりません。 これにより、返されるクエリは、この仕様のあらゆる準拠実装 (将来の拡張も含む)で 指定されたクエリと同じ結果になるはずです。 つまり、トークンストリームの単純化(空白の削減や省略など)は許されますが、 論理的な単純化(不要な括弧の削除や評価結果による単純化など)は許されません。

コンテナクエリにはmatchContainerメソッドを持たせるべきです。 これはmatchMedia()MediaQueryList インターフェイスをモデルにしつつ、 Window ではなく Element に適用されます。 レイアウトサイズの計測時には resizeObserver と似た挙動をしますが、 追加でコンテナクエリ構文と機能も提供します。[Issue #6205]

9.2. CSSSupportsConditionRule インターフェイス

CSSSupportsConditionRule インターフェイスは、@supports-condition規則を表します。

[Exposed=Window]
interface CSSSupportsConditionRule : CSSGroupingRule {
  readonly attribute CSSOMString name;
};
nameCSSOMString
この属性は名前付きサポート条件の名前です。

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

このドキュメントに対してセキュリティ上の問題は報告されていません

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

font-tech()およびfont-format()関数は ユーザーのソフトウェアに関する情報(バージョンや、特定機能の有効・無効などの非標準設定)を 提供する場合があります。

この情報は他のAPIからも取得可能です。 しかし、この仕様の機能も Web 上でこの情報が公開される手段のひとつです。

また、これらの情報は集約されることで、ユーザーのフィンガープリント精度を高めるためにも利用可能です。

変更点

2024年11月5日ワーキングドラフトからの変更点 Working Draft of 5 November 2024

2024年7月23日ワーキングドラフトからの変更点 Working Draft of 23 July 2024

2021年12月21日最初のパブリックワーキングドラフトからの変更点 First Public Working Draft of 21 December 2021

Level 4 からの追加

謝辞

@when および @else 規則は Tab Atkins の提案に基づいています。

本仕様へのコメントや先行研究には Adam Argyle、 Amelia Bellamy-Royds、 Anders Hartvoll Ruud、 Brian Kardell、 Chris Coyier、 Christopher Kirk-Nielsen、 David Herron、 Eric Portis、 Ethan Marcotte、 Florian Rivoal、 Geoff Graham、 Gregory Wild-Smith、 Ian Kilpatrick、 Jen Simmons、 Kenneth Rohde Christiansen、 Lea Verou、 Martin Auswöger、 Martine Dowden、 Mike Riethmuller、 Morten Stenshorne、 Nicole Sullivan、 Rune Lillesveen、 Scott Jehl、 Scott Kellum、 Stacy Kvernmo、 Theresa O’Connor、 Una Kravets、 その他多くの方々が貢献しています。

適合性

文書の規約

適合性要件は、記述的な主張と 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" によって規範テキストから区別されます。例:

Note: これは情報提供用の注記です。

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

テスト

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


適合クラス

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

スタイルシート
CSS スタイルシート
レンダラー
スタイルシートのセマンティクスを解釈し、それを用いた文書をレンダリングするUA
オーサリングツール
スタイルシートを作成するUA

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

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

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

部分的な実装

著者が前方互換なパース規則を活用してフォールバック値を割り当てられるように、CSSレンダラーは適切に無視するべきあらゆる at-rule、プロパティ、プロパティ値、キーワード、その他サポートできない構文要素を無効として扱わなければなりません。特に、ユーザーエージェントは、単一の複数値プロパティ宣言内でサポートされていない値だけを選択的に無視し、サポートされている値だけを尊重してはなりません。いずれかの値が無効(サポートされていない値はそうであるべき)と見なされた場合、CSS 仕様により宣言全体を無視することが求められます。

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

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

実験的でない実装

仕様が Candidate Recommendation の段階に達した場合、 実験的でない実装が可能となり、実装者は仕様通りに正しく実装できていることを示せるCRレベルの機能については、接頭辞なしの実装をリリースするべきです。

CSS の相互運用性を実装間で確立・維持するため、CSS ワーキンググループは、実験的でない CSS レンダラーが、どの CSS 機能でも接頭辞なし実装をリリースする前に、実装レポート(必要に応じてそのレポート用テストケースも)を W3C に提出することを要請します。W3C に提出されたテストケースは、CSS ワーキンググループによるレビューや修正の対象となります。

テストケースや実装レポートの提出に関する詳細は、CSS ワーキンググループのウェブサイト https://www.w3.org/Style/CSS/Test/ を参照してください。 質問は public-css-testsuite@w3.org メーリングリストへお送りください。

索引

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

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

参考文献

規範的参考文献

[CSS-ANIMATIONS-1]
David Baron 他. CSS Animations Level 1. 2023年3月2日. WD. URL: https://www.w3.org/TR/css-animations-1/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2024年8月4日. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-CASCADE-4]
Elika Etemad; Tab Atkins Jr.. CSS Cascading and Inheritance Level 4. 2022年1月13日. CR. URL: https://www.w3.org/TR/css-cascade-4/
[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-CONDITIONAL-3]
Chris Lilley; David Baron; Elika Etemad. CSS Conditional Rules Module Level 3. 2024年8月15日. CRD. URL: https://www.w3.org/TR/css-conditional-3/
[CSS-CONDITIONAL-4]
Chris Lilley; David Baron; Elika Etemad. CSS Conditional Rules Module Level 4. 2025年9月4日. CRD. URL: https://www.w3.org/TR/css-conditional-4/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSS Containment Module Level 2. 2022年9月17日. WD. URL: https://www.w3.org/TR/css-contain-2/
[CSS-CONTAIN-3]
Tab Atkins Jr.; Florian Rivoal; Miriam Suzanne. CSS Containment Module Level 3. 2022年8月18日. WD. URL: https://www.w3.org/TR/css-contain-3/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSS Display Module Level 4. 2024年12月19日. FPWD. URL: https://www.w3.org/TR/css-display-4/
[CSS-EXTENSIONS-1]
CSS Extensions Module Level 1. Editor's Draft. URL: https://drafts.csswg.org/css-extensions-1/
[CSS-FONTS-4]
Chris Lilley. CSS Fonts Module Level 4. 2024年2月1日. WD. URL: https://www.w3.org/TR/css-fonts-4/
[CSS-FONTS-5]
Chris Lilley. CSS Fonts Module Level 5. 2024年2月6日. WD. URL: https://www.w3.org/TR/css-fonts-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-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2025年10月7日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 3. 2025年10月7日. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-SCOPING-1]
Tab Atkins Jr.; Elika Etemad. CSS Scoping Module Level 1. 2014年4月3日. FPWD. URL: https://www.w3.org/TR/css-scoping-1/
[CSS-SCROLL-SNAP-1]
Matt Rakow 他. CSS Scroll Snap Module Level 1. 2021年3月11日. CR. URL: https://www.w3.org/TR/css-scroll-snap-1/
[CSS-SCROLL-SNAP-2]
Elika Etemad; Tab Atkins Jr.; Adam Argyle. CSS Scroll Snap Module Level 2. 2024年7月23日. FPWD. URL: https://www.w3.org/TR/css-scroll-snap-2/
[CSS-SHADOW-PARTS-1]
Tab Atkins Jr.; Fergal Daly. CSS Shadow Parts. 2018年11月15日. FPWD. URL: https://www.w3.org/TR/css-shadow-parts-1/
[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/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS Syntax Module Level 3. 2021年12月24日. CRD. 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-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/
[CSS-VALUES-5]
Tab Atkins Jr.; Elika Etemad; Miriam Suzanne. CSS Values and Units Module Level 5. 2024年11月11日. WD. URL: https://www.w3.org/TR/css-values-5/
[CSS-VARIABLES-1]
Tab Atkins Jr.. CSS Custom Properties for Cascading Variables Module Level 1. 2022年6月16日. CR. URL: https://www.w3.org/TR/css-variables-1/
[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-1]
Daniel Glazman; Emilio Cobos Álvarez. CSS Object Model (CSSOM). 2021年8月26日. WD. URL: https://www.w3.org/TR/cssom-1/
[CSSOM-VIEW-1]
Simon Fraser; Emilio Cobos Álvarez. CSSOM View Module. 2025年9月16日. WD. URL: https://www.w3.org/TR/cssom-view-1/
[MEDIAQUERIES-4]
Florian Rivoal; Tab Atkins Jr.. Media Queries Level 4. 2021年12月25日. CRD. 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
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2022年11月11日. WD. URL: https://www.w3.org/TR/selectors-4/
[WEB-ANIMATIONS-1]
Brian Birtles 他. Web Animations. 2023年6月5日. WD. URL: https://www.w3.org/TR/web-animations-1/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

参考情報

[CSS-POSITION-4]
Elika Etemad; Tab Atkins Jr.. CSS Positioned Layout Module Level 4. 2025年10月7日. WD. URL: https://www.w3.org/TR/css-position-4/
[CSS-PSEUDO-4]
Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2025年6月27日. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS2]
Bert Bos 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS2/

プロパティ索引

名前 初期値 適用対象 継承 %指定 アニメーション型 標準順序 算出値
container <'container-name'> [ / <'container-type'> ]? 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 個別プロパティ参照 文法通り 個別プロパティ参照
container-name none | <custom-ident>+ none すべての要素 no n/a アニメーション不可 文法通り キーワード none または識別子の順序付きリスト
container-type normal | [ [ size | inline-size ] || scroll-state ] normal すべての要素 no n/a アニメーション不可 文法通り 指定キーワード

@container 記述子

名前 初期値
aspect-ratio <ratio> range
block-size <length> range
height <length> range
inline-size <length> range
orientation portrait | landscape discrete
scrollable none | top | right | bottom | left | block-start | inline-start | block-end | inline-end | x | y | block | inline discrete
scrolled none | top | right | bottom | left | block-start | inline-start | block-end | inline-end | x | y | block | inline discrete
snapped none | x | y | block | inline | both discrete
stuck none | top | right | bottom | left | block-start | inline-start | block-end | inline-end discrete
width <length> range

IDL 索引

[Exposed=Window]
interface CSSContainerRule : CSSConditionRule {
  readonly attribute CSSOMString containerName;
  readonly attribute CSSOMString containerQuery;
};

[Exposed=Window]
interface CSSSupportsConditionRule : CSSGroupingRule {
  readonly attribute CSSOMString name;
};

課題索引

これは現在、レベル5で新しいものの初期ドラフトです。 レベル3とレベル4の機能は、まだここにコピーされておらず、 [css-conditional-3] および [css-conditional-4] で定義されています。
「Xを葉とするブール代数」をConditionalで汎用的に定義し、 すべての条件付きルールが直接参照できるようにし、 各自でブール代数を再定義しなくて済むようにするべき。
チェーン内の最後の @else のみが条件省略可能とする必要があるか? デバッグ時に if-else チェーンの一つを "true" にしてショートサーキットすることはよくあることだし、 CSS でも同様に有用だと思われる。 うっかり条件を省略しても間違いに気付きやすい。
at-rule の名前は議論中です。 他の候補には @supports-query@supports-test@custom-supports などがあります。 この名前はカスタムメディアクエリで選択されたものと一貫性があるべきです。
コンテナクエリは matchContainer メソッドを持つべき。 これは matchMedia()MediaQueryList インターフェイスをモデルにしつつ、Window でなく Element に適用される。 レイアウトサイズ計測時には resizeObserver と似た挙動となるが、 コンテナクエリ構文と機能が追加される。 [Issue #6205]