CSSアンカーポジショニングモジュール レベル2

W3C 初回公開作業草案,

この文書の詳細
このバージョン:
https://www.w3.org/TR/2025/WD-css-anchor-position-2-20251021/
最新公開バージョン:
https://www.w3.org/TR/css-anchor-position-2/
編集者草案:
https://drafts.csswg.org/css-anchor-position-2/
履歴:
https://www.w3.org/standards/history/css-anchor-position-2/
フィードバック:
CSSWG イシューレポジトリ
編集者:
Tab Atkins-Bittner (Google)
Elika J. Etemad / fantasai (Apple)
Ian Kilpatrick (Google)
この仕様への編集提案:
GitHub 編集者
デルタ仕様:
はい

概要

本仕様書は、アンカーポジショニングを定義します。 これは、配置された要素がページ上の1つ以上のアンカー要素に対して サイズや位置を決定できる仕組みです。

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

この文書のステータス

このセクションは、公開時点でのこの文書のステータスについて説明します。 現在のW3Cの出版物リストや この技術レポートの最新版は、W3C標準と草案のインデックスでご覧いただけます。

この文書は、CSS作業グループによって 初回公開作業草案として、勧告トラックを利用して公開されました。 初回公開作業草案としての公開は、W3Cおよびそのメンバーによる 承認を意味するものではありません。

この文書はドラフトであり、 随時更新、置換、または他の文書によって廃止される可能性があります。 この文書を進行中の作業以外として引用することは不適切です。

ご意見・ご要望は GitHubでイシューを提出(推奨)することで お寄せください。その際、タイトルに仕様コード「css-anchor-position」を含めてください(例: “[css-anchor-position] …コメントの概要…”)。 すべてのイシューとコメントはアーカイブされています。 また、(アーカイブあり) 公開メーリングリスト www-style@w3.org でもフィードバックを送ることができます。

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

この文書は、W3C特許ポリシーの下で活動するグループによって作成されました。 W3Cは、グループの成果物に関連して提出された特許開示の 公開リストを管理しています。 そのページには特許の開示方法についても記載されています。 特許について実際に知識があり、かつその特許が必須クレーム を含むと考える場合には、W3C特許ポリシー第6節に従って情報を開示する必要があります。

1. デルタ仕様

これはデルタ仕様であり、現時点ではCSS Anchor Positioning Level 1 [CSS-ANCHOR-POSITION-1]との違いのみを記載しています。

2. アンカーポジショニング用コンテナクエリ

このセクションでは、コンテナクエリ[css-conditional-5]から拡張し、 アンカーポジショニングを用いて要素の特定の側面をクエリできるようにします。

2.1. container-typeへのanchoredの拡張

本仕様はCSS Conditional 5 § 5.1「クエリコンテナの作成:container-typeプロパティ」で定義されているcontainer-typeプロパティに新しいanchoredキーワードを追加します。anchoredは、既存のcontainer-type(scroll-statesizeなど)と組み合わせて利用できます:

normal | [ [ size | inline-size ] || scroll-state || anchored ]
anchored
クエリコンテナcontainer queries用に確立し、アンカーポジショニング要素の子孫をアンカーの特徴に応じてスタイル付けできるようにします。(現在は、position-try-fallbacksの適用状況のみが対象です。)

anchoredコンテナタイプは、style containmentクエリコンテナへ適用します。

注意: スタイル包含は、以下のような状況でレイアウトサイクルを防ぐために必要です:
  • anchoredコンテナがある場合

  • アンカ―付きコンテナの子孫がフォールバッククエリに基づいてカウンターをインクリメントする場合

  • アンカ―付きコンテナの次にツリー順で現れるin-flow要素が、カウンターを使った内容を生成し、そのサイズに影響する場合

  • in-flow要素がアンカー要素の位置やサイズに影響する場合。実際、in-flowアンカー要素そのものの場合もあります。

  • アンカー要素の位置やサイズが変化すると、どのフォールバックが選択されるかが変わり、アンカー付きクエリの評価やカウンターの値が影響されます。

コンテナはanchoredだけ、または他のコンテナタイプと組み合わせて指定できます:
#anchored { container-type: anchored; }
#anchored-size { container-type: anchored inline-size; }

2.2. @container構文へのanchored クエリの拡張

anchoredコンテナをクエリするために、新しいanchored()関数が@container構文に追加されます。これは、'<query-in-parens>'文法に以下の生成規則を追加します:

<query-in-parens> = ...
                  | anchored( <anchored-query> )

<anchored-query> = not <anchored-in-parens>
                | <anchored-in-parens> [ [ and <anchored-in-parens> ]* | [ or <anchored-in-parens> ]* ]
                | <anchored-feature>
<anchored-in-parens> = ( <anchored-query> )
                    | ( <anchored-feature> )
                    | <general-enclosed>

2.3. アンカ―付きコンテナの機能

2.3.1. 適用されたposition-try-fallbacksfallback機能

名前: fallback
対象: @container
値: none | [ [<dashed-ident> || <try-tactic>] | <position-area-query> ]
型: 離散型

fallback コンテナ機能は、アンカーポジショニングされた要素にどのposition-try-fallbacksオプションが適用されているかをクエリします。

none
anchoredコンテナにはposition-try-fallbacksが一切適用されていません。
<dashed-ident> || <try-tactic>
anchoredコンテナは、position-try-fallbacksから適用された<dashed-ident><try-tactic>の組み合わせと一致します。 クエリ値から<dashed-ident><try-tactic>が省略されている場合、適用値からも省略されていなければならず、逆も同様です。

<dashed-ident>トライルール名は、ツリースコープ名とはみなされません。fallbackの一致のためです。

<try-tactic>の順序は重要です。例えばflip-start flip-blockflip-block flip-startは異なるため、fallbackクエリでも順序が一致する必要があります。

<position-area-query>
anchoredコンテナは、<position-area>position-try-fallbacksから適用されています。クエリは、フォールバックから適用された<position-area>とクエリ値が同じ物理領域を表していれば一致します。例えば、block-startは、topと一致します(writing-modehorizontal-tbの場合)。

クエリ値がanyの場合、その軸については常に一致します。

要素がアンカーの左か右に配置されているかに応じて、矢印の向きを変える例:
#container {
  container-type: anchored;
  position: absolute;
  position-anchor: --a;
  position-area: left;
  position-try-fallbacks: right;
  &::before { content: ">"; }

  @container anchored(fallback: right) {
    &::before { content: "<"; };
  }
}
名前付きフォールバックオプション('<try-tactic>')との一致例:
.anchored {
  container-type: anchored;
  position-try-fallbacks: --foo, --bar flip-inline;

  @container anchored(fallback: --bar flip-inline) {
    /* '--bar'のフォールバックが適用された場合に有効 */
    .inner { background-color: green; }
  }
  @container anchored(fallback: --bar) {
    /* try-tacticも一致しないと適用されません */
    .inner { background-color: red; }
  }
}
縦書きwriting-modeで'<position-area>'フォールバックオプションと一致する例:
.anchored {
  container-type: anchored;
  position-anchor: --a;
  position-try-fallbacks: right;
  writing-mode: vertical-rl;

  @container anchored(fallback: self-block-start) {
    /* 'right'フォールバックが適用される場合(vertical-rlではblock-startが'right')に有効 */
    .inner { background-color: green; }
  }
}
anyと'<position-area>'フォールバックオプションとの一致例:
.anchored {
  container-type: anchored;
  position-anchor: --a;
  position-try-fallbacks: bottom right;
  writing-mode: vertical-rl;

  @container anchored(fallback: bottom any) {
    /* 'any'が'right'にも一致するため適用されます。 */
    .inner { color: lime; }
  }
  @container anchored(fallback: right) {
    /* 垂直軸の暗黙的な'any'が'bottom'にも一致するため適用されます。 */
    .inner { background-color: green; }
  }
}

2.3.2. <position-area-query>値の構文

position-areaフォールバックをクエリする値は、<position-area>と同じ構文ですが、 すべての生成規則にanyキーワードが追加されています。

<position-area-query> = [
  [ left | center | right | span-left | span-right
  | x-start | x-end | span-x-start | span-x-end
  | self-x-start | self-x-end | span-self-x-start | span-self-x-end
  | span-all | any ]
  ||
  [ top | center | bottom | span-top | span-bottom
  | y-start | y-end | span-y-start | span-y-end
  | self-y-start | self-y-end | span-self-y-start | span-self-y-end
  | span-all | any ]
|
  [ block-start | center | block-end | span-block-start | span-block-end | span-all | any ]
  ||
  [ inline-start | center | inline-end | span-inline-start | span-inline-end
  | span-all | any ]
|
  [ self-block-start | center | self-block-end | span-self-block-start
  | span-self-block-end | span-all | any ]
  ||
  [ self-inline-start | center | self-inline-end | span-self-inline-start
  | span-self-inline-end | span-all | any ]
|
  [ start | center | end | span-start | span-end | span-all | any ]{1,2}
|
  [ self-start | center | self-end | span-self-start | span-self-end | span-all | any ]{1,2}
]
any

anyは、軸の一方または両方で使用可能です。どちらの軸を指すかは曖昧であり、<position-area>の他の曖昧なキーワード(startcenterなど)と同様に、 軸の割り当てや単一キーワード値の複製時に扱われます。

start, end, self-start, self-end
top, bottom, left, right
y-start, y-end, self-y-start, self-y-end
x-start, x-end, self-x-start, self-x-end
block-start, block-end, self-block-start, self-block-end
inline-start, inline-end, self-inline-start, self-inline-end
center
span-start, span-end, span-self-start, span-self-end
span-top, span-bottom, span-left, span-right
span-y-start, span-y-end, span-self-y-start, span-self-y-end
span-x-start, span-x-end, span-self-x-start, span-self-x-end
span-block-start, span-block-end, span-self-block-start, span-self-block-end
span-inline-start, span-inline-end, span-self-inline-start, span-self-inline-end
span-all

<position-area>」の定義を参照してください。

単一のキーワードのみが与えられた場合、'<position-area-query>'は、そのキーワードが軸について曖昧でなければ2番目のキーワードがanyであるかのように動作します。 これは、'<position-area>'の単一キーワードの扱いとは異なり、そちらは2番目のキーワードがspan-allであるかのように動作します。 それ以外は、'<position-area-query>'は軸割り当てに関して'<position-area>'と同様に振る舞います。

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

本書に関してセキュリティ上の問題は報告されていません。

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

本書に関してプライバシー上の問題は報告されていません。

適合性

文書の規則

適合性要件は、記述的な断定と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(ユーザーエージェント)は、スタイルシートを作成します。

スタイルシートが本仕様に適合するためには、 このモジュールで定義された構文を使うすべての文が、CSS全体の文法および本モジュールで定義された各機能の個別文法に従い有効でなければなりません。

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

オーサリングツールが本仕様に適合するためには、 CSS全体の文法および本モジュールで定義された各機能の個別文法にしたがって構文的に正しいスタイルシートを書き、本モジュールで記載されたスタイルシートのその他の適合要件すべてを満たす必要があります。

部分的な実装

著者がフォールバック値を割り当てるために前方互換のパース規則を利用できるよう、CSSレンダラーは必ず、利用可能なサポートレベルがないatルール・プロパティ・プロパティ値・キーワード・その他の構文要素を無効として(適宜無視)扱う必要があります。特に、ユーザーエージェントは決して、サポートされない構成要素値のみを無視し、サポートされている値を単一の複数値プロパティ宣言で適用することはしてはなりません。もし値の一部が無効と判断されれば(サポートされない値は必ずそうなる)、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-ANCHOR-POSITION-1]
Tab Atkins Jr.; Elika Etemad; Ian Kilpatrick. CSS Anchor Positioning. 2025年10月7日. WD. URL: https://www.w3.org/TR/css-anchor-position-1/
[CSS-CONDITIONAL-5]
Chris Lilley; et al. CSS Conditional Rules Module Level 5. 2024年11月5日. WD. URL: https://www.w3.org/TR/css-conditional-5/
[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-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-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-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/
[MEDIAQUERIES-5]
Dean Jackson; et al. 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

参考情報文献

[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-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/
[CSS2]
Bert Bos; et al. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS2/

プロパティ索引

定義されたプロパティはありません。

@container記述子

名前 初期値
fallback none | [ [<dashed-ident> || <try-tactic>] | <position-area-query> ] 離散型