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

W3C作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-css-anchor-position-1-20260130/
最新公開バージョン:
https://www.w3.org/TR/css-anchor-position-1/
編集者ドラフト:
https://drafts.csswg.org/css-anchor-position-1/
履歴:
https://www.w3.org/standards/history/css-anchor-position-1/
フィードバック:
CSSWG イシューレポジトリ
仕様内に記載
編集者:
Tab Atkins-Bittner (Google)
Elika J. Etemad / fantasai (Apple)
Ian Kilpatrick (Google)
前編集者:
Jhey Tompkins (Google)
この仕様への編集提案:
GitHub エディター

概要

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

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

この文書のステータス

このセクションは、公開時点におけるこの文書のステータスを説明します。 現在のW3C出版物一覧や、この技術レポートの最新改訂版は W3C標準・草案インデックスで確認できます。

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

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

フィードバックは GitHubでIssueを提出(推奨)してください。 その際、仕様コード「css-anchor-position」をタイトルに含め、例: 「[css-anchor-position] …コメントの概要…」 すべてのIssueやコメントはアーカイブされています。 または、(アーカイブ済み)の公開メーリングリスト www-style@w3.org に送信できます。

この文書は 2025年8月18日版W3Cプロセス文書 に従って管理されています。

この文書は W3C特許ポリシー のもとで運用されているグループによって作成されました。 W3Cは、グループの成果物に関連して 公開特許開示リスト を維持しています。 そのページには特許を開示するための手順も記載されています。 個人が特許に関する実際の知識を持ち、その特許が 必須クレーム を含むと考える場合、 W3C特許ポリシー第6節 に従って情報を開示する必要があります。

1. はじめに

CSSの絶対位置指定は、 著者がボックスをページ上のどこにでも配置できるようにします。 これは、他のボックスのレイアウト(包含ブロック以外)を考慮しません。 この柔軟性は非常に便利ですが、 制限もあり、しばしば何らかの他のボックスを基準に配置したい場合があります。 アンカーポジショニングposition-anchorプロパティ、 position-areaプロパティ、 または アンカー関数 anchor()anchor-size() を用いることで) 著者はこの目的を達成できます。 絶対位置指定されたボックスを ページ上の1つ以上の他のボックス(アンカー参照)に「アンカー」し、 重なりやオーバーフローを避けるために複数の配置位置を試すことも可能です。

例えば、著者はツールチップを対象要素の中央上部に配置したい場合がありますが、 それによってツールチップが画面外になる場合は、 対象要素の下部に配置する必要があります。 これは次のCSSで実現できます:
.anchor {
  anchor-name: --tooltip;
}
.tooltip {
  /* Fixposは、含有ブロック関係について
     気にする必要がないことを意味します。
     ツールチップはDOM内のどこにでも存在できます。 */
  position: fixed;

  /* すべてのアンカー動作はデフォルトで
     --tooltipアンカーを参照します。 */
  position-anchor: --tooltip;

  /* ツールチップの下端をアンカーの上端に揃えます。
     これにより(横書きモードの場合)ツールチップとアンカーの水平方向の中央揃えもデフォルトになります。 */
  position-area: block-start;

  /* ウィンドウからはみ出した場合、自動的に切り替えて
     ツールチップの上端がアンカーの下端に揃うようにします。 */
  position-try: flip-block;

  /* 幅が広くなりすぎないようにします */
  max-inline-size: 20em;
}

Popover API を使用すると、positionが自動的に設定され、 anchor-nameposition-anchor値を設定せずに (暗黙的アンカー要素を定義することで) アンカー関係を作成します。 そのため、これらのプロパティは明示的に設定する必要がありません。 適切なマークアップの場合、この例は次のように簡略化できます。

.tooltip {
  /* popover + popovertarget属性を使うと 'position: fixed' と
     必要なposition-anchor関係がすでに作成されます。 */
  position-area: block-start;
  position-try: flip-block;
  max-inline-size: 20em;
}

1.1. 値の定義

この仕様では、CSSプロパティ定義の規約[CSS2])に従い、 値の定義構文[CSS-VALUES-3])を使用しています。 この仕様で定義されていない値型については、CSS Values & Units [CSS-VALUES-3]で定義されています。 他のCSSモジュールとの組み合わせにより、これらの値型の定義が拡張される場合があります。

各プロパティ定義に記載されたプロパティ固有の値に加え、 この仕様で定義されるすべてのプロパティは CSSワイドキーワード もプロパティ値として受け付けます。 可読性向上のため、ここでは繰り返し記載しません。

CSSのほとんどの操作と同様に、セレクタ一致以外の 本仕様の機能はフラット化要素ツリー上で動作します。

2. アンカーの決定

本仕様のいくつかの機能では、アンカーボックスの位置とサイズを参照します。 特に明記しない限り、 これは関連するborder-boxエッジおよびprincipal boxアンカー要素を意味します。 多くの場合、該当するアンカー要素既定のアンカー要素として指定され、 position-anchorプロパティによって CSS anchor-nameおよびanchor-scopeプロパティで 名前付けされたアンカーや、ホスト言語で定義された暗黙的アンカー要素を指すことができます。 (anchor()関数で 名前付きアンカーを直接参照することも可能です。)

アンカーボックスの位置とサイズは レイアウト後に決定されます。 この位置とサイズにはzoompositionにもとづく調整( position: relativeposition: sticky など)および transformoffset-pathなどの変形も含まれます。 この場合、アンカーボックスの軸整列バウンディング矩形が 絶対位置要素の 包含ブロック の座標空間で使用されます。 変形はしばしば別スレッド上で最適化されるため、 変形によるアンカーボックス位置の更新は 数フレーム遅延する場合があります。 著者は、実用上可能であれば絶対配置または相対配置を使用することでこの遅延を回避できます。

アンカーボックス分断されている場合、 その包含ブロック絶対配置ボックス の関連分断コンテキストの外にある場合は、 ボックスフラグメント の軸整列バウンディング矩形が代わりに使用されます。 (絶対配置ボックスが 分断コンテキスト内にある場合、 それにはアンカーボックスが非分断として見え、 分断コンテキストによって自ら分断されることがあります。)

パフォーマンス上の理由から、 スクロールは特別な方法で扱われます。詳細は§ 3.3 スクロールの考慮を参照してください。 他のレイアウト後の効果(フィルタなど)は アンカーボックス の位置に影響しません。

2.1. アンカーの作成: anchor-name プロパティ

名前: anchor-name
値: none | <anchor-name>#
初期値: none
適用対象: principal boxを生成するすべての要素
継承: no
パーセンテージ: n/a
算出値: 指定通り
正規順序: 文法に従う
アニメーション型: 離散値
<anchor-name> = <dashed-ident>

anchor-nameプロパティは、 要素がアンカー要素であり、 そのprincipal boxアンカーボックスであることを宣言し、 対象となるアンカー名のリストを与える。 値は以下の通り定義される:

none

プロパティは効果を持たない。

<anchor-name>#

要素がprincipal boxを生成する場合、 その要素はアンカー要素となり、 指定されたアンカー名リストを持つ。 各アンカー名loosely matchedツリースコープ名である。

それ以外の場合、このプロパティは効果を持たない。

アンカー名は一意である必要はない。 すべての要素があるboxの ターゲットアンカー要素になれるわけではない。 よって、利用範囲が適切にスコープされていれば ある名前を複数箇所で再利用できる。

注: 複数の要素が同じアンカー名 を共有し、かつすべてがあるpositioned boxから見えている場合、 ターゲットアンカー要素は 最も近い祖先(存在する場合) あるいはDOM順で最後のものとなる。 anchor-scopeプロパティを使うことで、 どの名前が参照ボックスから見えるかをさらに制限できる。

アンカー名は デフォルトではcontainmentによってスコープされない。 要素がstyle containmentlayout containment (または同様のcontainment)を持っていても、 その子孫のアンカー名はページの他の要素にも見えている。

注: 要素が他の要素のskipped contents内に存在している場合 (例: content-visibility: hiddenなど)、 それは許容可能なアンカー要素とはみなされず、 実質的にアンカー名を持たないのと同じ扱いになる。

注: シャドウツリー内のポジション要素は、 「より高い」ツリーで定義されたアンカー名を参照できる。 現状では、「より低い」シャドウツリーで定義されたアンカー名は参照できない。

2.2. アンカー名のスコープ指定: anchor-scope プロパティ

名前: anchor-scope
値: none | all | <anchor-name>#
初期値: none
適用対象: すべての要素
継承: no
パーセンテージ: n/a
算出値: 指定通り
正規順序: 文法に従う
アニメーション型: 離散値

このプロパティは、指定されたアンカー名と、これらのアンカー名の検索のスコープをこの要素のサブツリーに限定します。 詳しくは § 2 アンカーの決定 を参照してください。

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

none
アンカー名のスコープは 変更されない。
all
この要素またはその子孫で定義された(かつ、子孫のanchor-scopeで既にスコープ制限されていない) すべてのアンカー名を この要素自身の子孫のみでスコープすることを指定し、 また、子孫はこのサブツリー内のアンカー要素に対してのみ アンカー名を一致させられるように制限する。

この値は、同じツリースコープ内のアンカー名 のみに影響し、strictly matchedツリースコープ名として扱われる。 (つまり、anchor-scope: allanchor-scope: --foo, --bar, ... と同じ扱いになり、 該当するすべてのアンカー名をリスト化したものと等価である。)

<anchor-name>
この要素またはその子孫で定義された(かつ子孫のanchor-scopeで既にスコープ制限されていない) 一致するアンカー名を この要素自身の子孫のみでスコープすることを指定し、 また、子孫はこのサブツリー内のアンカー要素に対してのみ これらのアンカー名を 一致させられるように制限する。

<anchor-name>strictly matchedツリースコープ名を 表す。すなわち、同じシャドウツリー内のアンカー名にしか一致しない。 [CSS-SCOPING-1]

このプロパティは暗黙的なアンカー要素には効果がない。

注: 配置される要素の祖先が最初にチェックされるため、 希望するアンカーが祖先である場合は通常anchor-scope を使う必要はない。 希望するアンカーが祖先でない場合や、 アンカーを他ページから参照できないよう「隠したい」場合にだけ必要となる。

デザインパターンが再利用される場合、 anchor-scope で 複数の同名コンポーネント間での名前衝突を防ぐことができる。 例えば、リスト内の各リスト項目内に配置要素が含まれており、 それぞれが属するリスト項目を基準に配置したい場合、
li {
  anchor-name: --list-item;
  anchor-scope: --list-item;
}
li .positioned {
  position: absolute;
  position-anchor: --list-item;
  position-area: inline-start;
}

anchor-scope がない場合、 すべての li 要素がすべての配置要素から見えてしまい、 それぞれが最後の li を基準に重なって配置されることになる。

上記の例は、現在このユースケースを自動的に処理しているため調整が必要。

2.3. アンカーを見つける

この仕様のいくつかの項目では、 アンカー指定子 (これは <dashed-ident> (かつ ツリースコープ参照)であり、 ページ上の他の場所の anchor-name の値に一致すべきもの)、 またはキーワード auto、 あるいは指定なし(指定子がない)から、 ターゲットアンカー要素 を見つける。

注: これら条件で捉えられる一般原則は、 要素自身のボックスのレイアウトが、 参照したい配置ボックスより先に完了している場合にのみ、 その要素が配置ボックスのターゲットアンカー要素になれる、というものである。 CSSのレイアウトルールは、 アンカーと配置ボックス同士およびそれらの包含ブロックの関係によって このための有用な保証を提供する。 以下の条件リストは、 スタッキングコンテキストのルールを正確にこの目的に対して言い直したものであり、 アンカー配置で循環が発生しないことを保障する。

ある検索要素 query el とオプションの アンカー指定子 anchor spec を与えられたとき、 ターゲット アンカー要素 を決定するには:
  1. もしanchor specが渡されていなければ、 既定アンカー要素が存在すればそれを返し、 そうでなければ何も返さない。

  2. もしanchor specauto であれば:

    1. もしquery el暗黙的アンカー要素があり、 それが許容可能なアンカー要素であれば、 その要素を返す。

    2. それ以外の場合は何も返さない。

    注: 将来のAPIでも暗黙的アンカー要素が定義される可能性がある。 その場合はこのアルゴリズム内で明示的に処理され、 協調が保たれるようになる。

  3. それ以外の場合、anchor spec<dashed-ident> である。

    もしquery elの祖先のうち以下の条件を満たすものがあれば、 query elから最も近い要素を返す。 それ以外なら、条件を満たすツリー順で最後の要素 el を返す。

    いずれの要素も条件を満たさない場合、何も返さない。

    注: anchor-scopeにより 特定のアンカー名の可視性を制限でき、 それによってどの要素が ある検索のアンカー要素になれるかに影響する。

注: あるanchor-nameが 一つのシャドウツリー内のスタイルで定義されている場合、 別のシャドウツリーのスタイルから アンカー関数で参照されることはない。 ただし要素同士は別の シャドウツリー間でアンカーできるが、 anchor-nameアンカー関数 が同じツリーのスタイルから来ている場合のみ(たとえば ::part() でシャドウ内部の要素をスタイルするとき)。 (暗黙的アンカー要素も単一ツリーに限定されるわけではないが、 実際の詳細はAPIの設計による。)

要素 possible anchor絶対配置された要素 positioned el に対する 許容可能なアンカー要素 となるための条件は以下のとおりすべて満たしている場合:

2.4. デフォルトアンカー: position-anchor プロパティ

名前: position-anchor
値: normal | none | auto | <anchor-name>
初期値: normal
適用対象: 絶対配置ボックス
継承: no
パーセンテージ: n/a
算出値: 指定通り
正規順序: 文法に従う
アニメーション型: 離散値

position-anchorプロパティは、 既定アンカー要素 を指定する。この要素は position-areaposition-try、 および(デフォルトで)この要素に適用されるすべての アンカー関数 で利用される。 position-anchorは、 リセット限定サブプロパティであり、 positionのサブプロパティである。

normal

position-areanone なら noneと同じ挙動をし、 それ以外の場合は autoと同じ挙動をする。

none

このボックスは既定アンカー要素を持たない。

auto

暗黙的アンカー要素が存在する場合はそれを利用し、 そうでなければボックスは既定アンカー要素を持たない。

<anchor-name>

指定した<anchor-name>によって選択された ターゲットアンカー要素 が、このボックスの既定アンカー要素となる。

既定アンカー要素principal boxが ボックスの 既定アンカーボックス となる。

例えば、以下のコードでは .foo.barの両要素が 同じ配置プロパティ群を利用でき、 参照するアンカー要素のみ変更している:
.anchored {
  position: absolute;
  top: calc(.5em + anchor(outside));
  /* アンカー名を指定していないので
     自動的に既定アンカーボックスを参照する */
}

.foo.anchored {
  position-anchor: --foo;
}
.bar.anchored {
  position-anchor: --bar;
}

2.4.1. 暗黙的アンカー要素

一部の仕様では、特定の条件下で特定の要素を別の要素に対する 暗黙的アンカー要素と定義できます。

TODO: new popover 関連仕様が HTML に追加されたら 具体例を記入

暗黙的アンカー要素auto キーワードや position-anchor で参照できます。 また、アンカー関数で アンカー参照を省略した場合も参照されます。

暗黙的アンカー要素は、疑似要素の場合、 明記されていない限り、その元要素である。

2.5. アンカーの関連性

要素 elユーザーに関連するかどうか を判断する際、 el の子孫が、位置決めボックスの ターゲットアンカー要素であり (自身が スキップ されておらず、 かつその 包含ブロックel またはその子孫でない場合)、 elユーザーに関連するとみなさなければなりません。

注記: これは例えば、 content-visibility: auto サブツリー内のアンカーが それに依存する位置決めボックスがスキップされていない限り 内容のスキップを 防ぐことを意味します。 (ただし、アンカーと位置決めボックスが同じ content-visibility: auto 要素のもとにいる場合は、 互いを可視状態にし続けることはできません。)

3. アンカーベースの位置決め

絶対配置ボックスは ページ上の1つ以上のアンカーボックスを基準に 自身を位置決めできます。

position-areaプロパティは、デフォルトアンカーボックスに対して グリッドベースの便利な位置決め概念を提供します。 より複雑な位置決めや複数ボックスを基準とした位置決めを行う場合は、 anchor() 関数をinset プロパティで使用し、 アンカーボックスの各辺を明示的に参照できます。

3.1. position-area プロパティ

名前: position-area
値: none | <position-area>
初期値: none
適用対象: 既定アンカーボックスを持つpositioned box
継承: no
パーセンテージ: n/a
算出値: キーワードnoneまたはキーワードのペア(詳細は§ 3.1.3 <position-area>の算出値とシリアライズを参照)
正規順序: 文法に従う
アニメーション型: TBD

もっとも一般的なアンカーポジショニング用途は、 位置決めボックスの包含ブロックの端と デフォルトアンカーボックスの端だけが関係するものです。 これらの線は3×3のグリッドを形成すると考えられます。 position-areaを使うと、 このposition-area グリッド内のどのエリアに 位置決めボックスをレイアウトするかを簡単に指定できます。

position-area: top lefthorizontal-tb ltr 書字モードで使った例。
none

プロパティは効果を持ちません。

<position-area>

ボックスがデフォルトアンカーボックスを持たない場合や 絶対配置ボックスでない場合、 この値は効果を持ちません。

それ以外の場合、position-area グリッド上の領域を選択し、 それをボックスの包含ブロックとします。

注記: これは、 insetプロパティが position-areaからのオフセットを指定することを意味します。 また一部のプロパティ値( max-height: 100% など)は position-areaを基準とします。

none 以外の値には追加の効果があります:

3.1.1. ポジションエリアグリッドの解決

ポジションエリアグリッドは、各軸に4本のグリッド線からなる3×3のグリッドです。 (包含ブロック書字モードを用いる順序で):

注: デフォルトアンカーボックスが 修正前の包含ブロックの外側に部分的または完全に存在する場合、 ポジションエリアグリッドの行や列がサイズ0になることがあります。

3.1.2. <position-area>値の構文

位置は値のペアとして指定されます。 これはフロー相対または物理用語で表現できます。 <position-area>値の許容構文は次の通りです:

<position-area> = [
  [ 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 ]
  ||
  [ 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 ]
|
  [ block-start | center | block-end | span-block-start | span-block-end | span-all ]
  ||
  [ inline-start | center | inline-end | span-inline-start | span-inline-end
  | span-all ]
|
  [ self-block-start | center | self-block-end | span-self-block-start
  | span-self-block-end | span-all ]
  ||
  [ self-inline-start | center | self-inline-end | span-self-inline-start
  | span-self-inline-end | span-all ]
|
  [ start | center | end | span-start | span-end | span-all ]{1,2}
|
  [ self-start | center | self-end | span-self-start | span-self-end | span-all ]{1,2}
]

<position-area>値は、以下のように領域が占める行と列を指定することでポジションエリアグリッドの領域を選択します:

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

指定した軸における対応する単一の行または列。

anchor() と同様に、 通常の論理キーワード (startend など) は、 ボックスの 書字モード包含ブロック 基準で解釈します。 x-start などのキーワードも同様ですが、 指定された物理軸でその方向を決定します。

self-*論理キーワード(self-startself-x-endなど)は同じですが、 ボックス自身の書字モードを基準にします。

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

指定した軸における隣接する2つの行または列:中央の行/列と、単一トラックキーワードで示されるもう一方の行/列。

(例:span-topは最初の2行(中央行+top行)を含みます。)

span-all

指定した軸における3つすべての行または列。

いくつかのキーワードはどの軸を指すか曖昧です: centerspan-all、 また、block軸やinline軸を明示しないstartなどのキーワード。 もう一方のキーワードが軸に関して明確であれば、 曖昧な方は反対軸を指します。 (例:block-start centerの場合、centerはinline軸を指します。) 両方とも曖昧な場合は、最初がボックスのblock軸、 2番目がinline軸を指します。 (例:span-all startspan-all inline-startと同義です。)

キーワードが1つだけの場合、軸が明確なら2番目はspan-allとして扱い、 軸が不明瞭なら指定キーワードを繰り返したものとして扱います。 (例:toptop span-allと同義、 centercenter centerと同義。)

3.1.3. <position-area>の算出値とシリアライズ

算出値は、<position-area>値として 各軸で選択されたトラックを示す2つのキーワードです。 長い(block-start)・短い(start)論理キーワードは同義とみなします。 シリアライズ時は上記文法の順序で、論理キーワードは短縮形(例:start startblock-start inline-startではなく)で出力されます。

3.2. アンカー相対インセット: anchor() 関数

絶対配置ボックスanchor() 関数を insetプロパティの値として使い、 1つ以上のアンカーボックスの位置を参照できます。 anchor() 関数は <length> に解決されます。 insetプロパティでのみ使用でき(それ以外では無効)です。

Name: top, left, right, bottom
New values: <anchor()>
<anchor()> = anchor( <anchor-name>? && <anchor-side>, <length-percentage>? )
<anchor-side> = inside | outside
       | top | left | right | bottom
       | start | end | self-start | self-end
       | <percentage> | center

anchor() 関数は3つの引数を取ります:

anchor()解決可能なアンカー関数を表している場合は 算出値時(スタイル・レイアウト交錯使用)に その関数が現れるプロパティの位置と 指定されたターゲットアンカー要素アンカーボックスの辺が揃うような<length>に解決します。 これは inset 修正包含ブロックの辺と アンカー側の辺の位置あわせを意味します。

注: これは、トランジションアニメーションアンカー関数を用いるプロパティに対して あらゆる種類の変更( アンカーボックスの移動、 アンカー要素の ドキュメントへの追加や削除、 アンカーのanchor-nameプロパティ変更、 等々)に対して「期待通り」に動作することを意味する。

たとえば .bar { inset-block-start: anchor(--foo block-start); } では anchor().barのblock-start辺を --fooアンカーのblock-start辺と揃える長さとなります。

反対に .bar { inset-block-end: anchor(--foo block-start); } では .barblock-end辺を --fooアンカーのblock-start辺と揃える長さとなります。

inset-block-startinset-block-end の各値は異なる辺(包含ブロックのblock-start/block-end)を値基準にするので 同じanchor() でも解決値は異なる場合が多いです。

anchor() 関数は <length> に解決されるので 任意の長さ値どうし同様に 計算関数でも使えます。

よい例を追加すること(この例は anchor-center でもできてしまう)。 [Issue #10776]

たとえば次の例は、 inset修正包含ブロックアンカーボックス の中央に揃えつつ 包含ブロックからはみ出さない最大幅にします:

.centered-message {
  position: fixed;
  max-width: max-content;
  justify-self: center;

  --center: anchor(--x 50%);
  --half-distance: min(
    abs(0% - var(--center)),
    abs(100% - var(--center))
  );
  left: calc(var(--center) - var(--half-distance));
  right: calc(var(--center) - var(--half-distance));
  bottom: anchor(--x top);
}

このような使い方は たとえば要素のエラーメッセージにも便利です。 中央配置により どの入力へのエラーか分かりやすくなります。

3.2.1. anchor() の解決

anchor() 関数は 解決可能なアンカー関数 となるのは、次のすべてが成立する場合のみです:

これらの条件のいずれかが偽の場合、 anchor() 関数は指定されたフォールバック値に 計算 されます。 フォールバック値が指定されていない場合は、 それが参照される宣言は 計算値時点で無効 となります。

3.3. スクロール考慮

パフォーマンス上の理由から、 実装は通常、スクロールを専用のスクロール/「合成」スレッドで実行します。 これは(単純な移動や変形など)ごく限られた能力しか持たず レイアウトなどの高コスト操作はできませんが、 人間の感覚で「瞬間的」と感じるレベルで スクロールへの反応が高速であることを保証できます。

スクロールによってアンカーポジショニング要素が単純に移動するだけなら、 理論上問題ありません。 移動はスクロールスレッドで処理できるため、 要素もコンテンツとともにスムーズに動きます。 しかし、アンカーポジショニングでは 逆側の端を別々のスクロールコンテキストに依存させることができるため、 スクロールにより片側の端だけが動き要素のサイズも変わる=レイアウトが発生する場合があります。 これはスクロールスレッドでは実行 できません

この制約のもと、 できるだけ多様なアンカーへの自由な参照を保つために、 アンカーポジショニング記憶スクロールオフセットスクロール補正 を組み合わせて使用します。

詳細は技術的ですが、要点は:

この仕組みにより、 アンカーポジショニングは 何をアンカー参照していようと「勝手に動く」ようになりますが、 スクロールへの反応には一部制約があります。

アンカー再計算ポイント は、絶対配置要素 がボックスを生成し始めたとき (すなわち、display:nonedisplay:contents から他のdisplay 値に切り替わったとき)に発生する。 これは、CSSアニメーション開始時と同じタイミングである。

アンカー再計算ポイントはまた、 ある要素の位置フォールバックスタイルの決定時にも発生する。 その要素が結果的にフォールバックスタイルを変更する場合は、 選択されたフォールバックスタイルに関連付けられた アンカー再計算ポイント の結果を用いる。

ある要素absposアンカー再計算ポイントが発生したとき、 absposアンカー参照のいずれかで参照している すべての要素anchorについて、 記憶されたスクロールオフセットを その時点の スクロールオフセット の合計(スクロールコンテナ祖先すべての値の合計、abspos包含ブロックよりも上位には到達しない)として関連付ける。 記憶されたスクロールオフセットは 他のスクロール依存の位置変化 (position: sticky など)も加味する。 さらに、abspos既定アンカー要素を持つ場合は、 たとえabsposがそれに対して アンカー参照を持っていなくても、 必ずそれの記憶されたスクロールオフセットを計算する。

すべてのアンカー参照は、 すべてのスクロールコンテナ初期スクロール位置にあるものとして計算され、 その後、関連付けられた記憶されたスクロールオフセットが加算される。

transformもスクロールと同様の問題を持つため、アンカー配置では通常それらを考慮しない。 ここでtransformの効果も組み込めるだろうか?

上記の仕組みにより、配置要素はアンカー参照のスクロール位置に一度応答できるが、 どれかがスクロールされると、配置要素はもはやそれにアンカーしているようにはみえなくなる (ただし他の非スクロールの動きには引き続き応答する)。 この問題は一般には解決できないが、 1つアンカー参照のスクロールには応答できる。 具体的には、既定アンカー要素についてである:

絶対配置ボックスabspos は 水平または垂直軸で 以下の2つの条件を満たすとき スクロール補正を行う

注: abspos位置オプションリストを持つ場合、 その軸でスクロール補正するかは 適用されたフォールバックスタイルにも影響される。

abspos既定スクロールシフトは 水平・垂直軸ごとにそれぞれ長さを1つ持つ。 各長さは以下のように計算される:

absposのレイアウト計算後、 既定スクロールシフト分だけ さらにシフトされる。 これはtransformにかけられたかのような効果(他のtransformより前)となる。

スナップショットの正確なタイミング(毎フレーム、スタイル再計算の前に等)を定義すること。

記憶されたスクロールオフセットと同様に、 既定アンカー要素へのtransformも考慮できるか?

注: 記憶されたスクロールオフセットanchor()関数の値に影響を与えるが、 既定スクロールシフトは この要素自体を インセットプロパティ値、アライメント適用等の算出後に直接シフトする。 これは通常は区別できないが、 round(anchor(outside), 50px)のように 既定アンカー要素の位置を非線形に変換するケースでは 動作の違いが現れる。

4. アンカー基準の整列

4.1. エリア固有のデフォルト整列

position-areanone でない場合、 used valuenormal自己整列 は、 <position-area> 値に応じて変化し、ボックスをアンカー側へ揃えます:

ただし、該当軸の inset プロパティ のうち1つだけが auto の場合、 デフォルト整列は非 auto 側の端へ寄ります。 この際、この整列は unsafe 整列です。

注記: この「1つだけ auto」挙動は、 指定した1つの inset が絶対配置ボックスの位置を制御する従来の挙動を保ちます。

たとえば英語相当の書字モード(horizontal-tb, ltr)とすると、 span-x-start top の値は垂直軸の start 領域、 水平軸の startcenter 領域に解決されるので、 デフォルト整列は align-self: end (ボックスの下端マージンエッジが top 領域の下端にぴったり合う)と、 justify-self: end (ボックスの終端側マージンエッジが span-start 領域の終端に重なる)になります。
ボックスが inset修正包含ブロック からはみ出し、 かつ オリジナル包含ブロック内には収まる場合は、 通常は通常の整列を無視して オリジナル包含ブロック内に 「シフト」させます。 詳細は CSS Box Alignment 3 § 4.4 Overflow Alignment: the safe and unsafe keywords and scroll safety limits を参照。

この挙動により、包含ブロックが想定より小さくなっても 位置決めボックスが可視・範囲内に収まりやすくなります。

たとえば position-area: bottom span-right だと ボックスはアンカー左端から包含ブロック右端までストレッチし デフォルトでは左揃えですが、 ボックスがその範囲より大きい(アンカーが画面右端に近い等)場合は左にずれて 可視領域を保ちます。

4.2. アンカー中央揃え: anchor-center 整列値

Name: justify-self, align-self, justify-items, align-items
New values: anchor-center

自己整列プロパティ を使うと、 絶対配置ボックスinset修正包含ブロック内で自身を整列できます。 既存値や適切な insetプロパティだけでも 多くの場合十分ですが、 アンカーベースの「中央揃え」はこれまでやや複雑な指定が必要でした。

新しい anchor-center 値は、 このケースをとてもシンプルにします: 対象ボックスが デフォルトアンカーボックス を持つなら、 その軸で(可能な限り)デフォルトアンカーボックスに中央揃えされます。 さらに:

ボックスが 絶対配置でなかったり デフォルトアンカーボックスを持たない場合は、 値は center として動作し、 insetプロパティ の 解決方式には影響しません。

注記: anchor-center 使用時、 アンカーがボックスの オリジナル包含ブロックの端に近い場合は 「中央」のままではなく オリジナル包含ブロック内に収まるよう シフトします。 詳細は CSS Box Alignment 3 § 4.4 Overflow Alignment: the safe and unsafe keywords and scroll safety limits を参照。

5. アンカーベースのサイズ指定

絶対配置ボックスanchor-size() 関数を サイズ指定プロパティで使い、 1つ以上のアンカーボックスのサイズを参照できます。 anchor-size()<length> へ解決されます。 許容 @position-try プロパティ でのみ 使用でき(それ以外は無効)です。

5.1. anchor-size() 関数

Name: width, height, min-width, min-height, max-width, max-height, top, left, right, bottom, margin-top, margin-left, margin-right, margin-bottom
New values: <anchor-size()>
anchor-size() = anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )
<anchor-size> = width | height | block | inline | self-block | self-inline

anchor-size() 関数は anchor() と似ており、 引数も同じですが、<anchor-side> キーワードの代わりに <anchor-size> キーワードを使い、 2つの辺間の距離を参照します。

物理 <anchor-size> キーワード (width および height) はそれぞれ ターゲットアンカー要素の幅と高さを指します。 anchor()と違い、軸の一致縛りはありません。 たとえば width: anchor-size(--foo height); も有効です。

論理 <anchor-size> キーワード (blockinlineself-blockself-inline) は、boxの書字モード(writing mode、self-block/self-inlineの場合)または box の 包含ブロックwriting mode (block/inlineの場合)に基づいて物理キーワードに変換されます。

<anchor-size> キーワードを省略した場合は、 使用プロパティの軸に合うキーワードとして動作します。 (たとえば width: anchor-size()width: anchor-size(width) と同じ意味になります。)

anchor-size()解決可能アンカーサイズ関数 である場合は、 算出値 時(スタイル・レイアウト交錯経由)に 指定軸に対応する2辺(left・rightまたはtop・bottom)の <length>、 すなわち ターゲットアンカー要素アンカーボックス内の 間隔に解決されます。

5.1.1. anchor-size() の解決

anchor-size() 関数が 解決可能アンカーサイズ関数 となるのは、次のすべてが成立する場合のみ:

これらの条件のいずれかが偽の場合、 anchor-size() 関数は指定のフォールバック値へ解決されます。 フォールバック値未指定の場合、その宣言は 計算値時点で無効 となります。

6. オーバーフロー処理

アンカーポジショニングは強力ですが、 予測しづらい場合もあります。 アンカーボックスは ページ上のどこにでもあり得るため、 何らかの特定の位置(アンカーの上や右など)に配置しても、 配置ボックスが包含ブロックから はみ出たり画面外になることがあります。

これを緩和するため、 絶対配置ボックスは position-try-fallbacks プロパティで 予備の position option (既存のスタイルから生成する配置・整列プロパティセットや、@position-try ルールで指定)を ボックスが最初の位置ではみ出した時に試すことができます。 各オプションは position-try-order で指定した順に1つずつ適用され、 最初に 包含ブロックからはみ出さないものが「採用」となります。

一度あるオプションが選ばれると、 要素は再びオーバーフローするまでそのスタイルを維持する。 より早い(おそらくより望ましい)選択肢が、 オーバーフローを引き起こさず再び利用可能になった場合でも同様である。 (最後に成功した位置オプションを記録する を参照。)

たとえば次のCSSは、まず「ポップオーバー」を 要素の下に配置し、 画面内に収まらない場合は上に切り替えます。 デフォルトではアンカーへの「開始側」揃えですが、 それも収まらない場合「終了側」揃えに切り替えます。 どちら側にも収まらない場合は、 横領域全体を使いつつ可能な限りアンカー中心を維持します (§ 4.1 エリア固有のデフォルト整列 のおかげです)。
#myPopover {
  position: fixed;
  position-anchor: --button;
  position-area: bottom span-x-end;
  position-try-fallbacks: flip-x, flip-y, flip-x flip-y, bottom, top;

  /* The popover is at least as wide as the button */
  min-width: anchor-size(width);

  /* The popover is at least as tall as 2 menu items */
  min-height: 6em;
}

図を追加すること!

6.1. フォールバック指定:position-try-fallbacksプロパティ

名前: position-try-fallbacks
値: none | [ [<dashed-ident> || <try-tactic>] | <position-area> ]#
初期値: none
適用対象: 絶対配置ボックス
継承: no
パーセンテージ: n/a
算出値: 指定通り
正規順序: 文法に従う
アニメーション型: 離散値

このプロパティは、絶対配置ボックスinset‑modified containing blockからはみ出したときに試すための、 代替の位置付けスタイルのリストを提供します。 このposition options listは、 最初は要素のfallback base styles(すなわち computed styles に対して position-try-fallbacks を適用しない場合のスタイル) から生成された単一の position option を含みます。

リスト内の各カンマ区切りのエントリは別個のオプションです: 指定された名前の @position-try ブロックの名前、 またはボックスの既存の computed style を自動的に変換する <try-tactic> です。

値の意味は次の通りです:

none

プロパティは効果を持ちません; ボックスの position options list は空になります。

<dashed-ident>

もし指定された名前の @position-try ルールが存在するなら、 その関連する position optionposition options list に追加されます。

それ以外の場合、この値は効果を持ちません。

<try-tactic>

指定された try tactic を 実行して ボックスの base styles に対して自動的に position option を作成し、 構築した position option を ボックスの position options list に追加します。

<try-tactic> = flip-block || flip-inline || flip-start || flip-x || flip-y
flip-block

(例えば margin-block-startmargin-block-end の間で) block 軸の値を入れ替えます。要するに inline 軸に沿って鏡映する操作です。

flip-inline

inline 軸の値を入れ替えます。要するに block 軸に沿って鏡映する操作です。

flip-x

水平方向(例: margin-leftmargin-right の間で) の値を入れ替えます。 要するに垂直軸に沿って鏡映する操作です。

flip-y

垂直軸の値を入れ替えます。要するに水平方向の軸に沿って鏡映する操作です。

flip-start

start プロパティ同士を入れ替え、end プロパティ同士を入れ替えます(例えば margin-block-startmargin-inline-start の間で)。 要するに、block-start/inline-start コーナーから block-end/inline-end コーナーへ引いた対角線に沿って鏡映します。

複数のキーワードが与えられた場合、それらの変換は順に合成されて単一の position option を生成します。 論理方向は containing block の writing mode に照らして解決されます。

<dashed-ident> || <try-tactic>

前述の2つのオプションの効果を組み合わせます: 指定された名前の @position-try ルールがある場合、 その position option を base style に適用し、 指定された <try-tactic> に従って変換し、 結果をボックスの position options list に追加します。

それ以外の場合は何もしません。

<position-area>

指定された値の position-area プロパティだけで構成された position option を自動的に作成します。

6.2. フォールバック順序の決定: position-try-order プロパティ

Name: position-try-order
Value: normal | <try-size>
Initial: normal
Applies to: absolutely positioned boxes
Inherited: no
Percentages: n/a
Computed value: as specified
Canonical order: per grammar
Animation type: discrete

このプロパティは、ボックスにとって宣言された position options のうち、 指定された order に厳密に従うよりも「得られる空間を最大化する」ことが重要な場合に、 それらを利用可能な空間に基づいてソートすることを可能にします。

<try-size> = most-width | most-height | most-block-size | most-inline-size
normal

position-try-fallbacks で指定された順に position options を試します。

most-width
most-height
most-block-size
most-inline-size

position options list の各エントリについて、 その position option をボックスに適用し、 そのスタイルから生じる inset‑modified containing block のサイズを求めます (auto な inset 値は 0 と扱います)。 これらのサイズに基づいて position options list を安定ソートし、 最も大きいものを先頭にします。

論理方向は containing block の writing mode に照らして解決されます。

例えば、次のスタイルは最初にポップアップリストを アンカーとなるボタンの上または下に配置しますが、 どちらに配置するかはどのオプションが最も多くの空間を与えるかによって決まります。

.anchor { anchor-name: --foo; }
.list {
  position: fixed;
  position-anchor: --foo;
  position-area: block-end span-inline-end;
  position-try-fallbacks: --bottom-scrollable, flip-block, --top-scrollable;
  position-try-order: most-height;
}
@position-try --bottom-scrollable {
  align-self: stretch;
}
@position-try --top-scrollable {
  position-area: block-start span-inline-end;
  align-self: stretch;
}

base styles--bottom-scrollable オプションは 利用可能な高さが同じです。両者ともアンカーから包含ブロックの端まで伸びる inset‑modified containing block を持つためです。 同様に flip-block オプションと --top-scrollable オプションも同じ利用可能高さを持ちます。 position-try-order が安定ソートを使うため、 これらのペアはそれぞれリスト内で相対位置を保持し、 *-scrollable オプションが後になるでしょう; そして最も多くの空間を持つペアが先頭に来ます。

これにより、ボックスはまず大きい側でアンカーに対して自然な高さで揃えることを試み(base styles または flip-block スタイルを使用)、 しかしそれがオーバーフローを引き起こす場合は、 代わりに同じ空間を埋めてスクロール可能にする(対応する *-scrollable スタイルを使用)ことで オーバーフローを回避し、小さい方の空間に移動しようとすることを防ぎます。

6.3. ショートハンド:position-try

Name: position-try
Value: <'position-try-order'>? <'position-try-fallbacks'>
Initial: see individual properties
Applies to: see individual properties
Inherited: see individual properties
Percentages: see individual properties
Computed value: see individual properties
Animation type: see individual properties
Canonical order: per grammar

このショートハンドは position-try-fallbacksposition-try-order の両方を設定します。 <'position-try-order'> が省略された場合、 そのプロパティの初期値に設定されます。

6.4. @position-try ルール

@position-try ルールは、 与えられた名前で position option を定義し、 その名前を通して position-try-fallbacks 経由でボックスに適用できる 1つ以上の位置指定プロパティのセットを指定します。

@position-try ルールの構文は次の通りです:

@position-try <dashed-ident> {
  <declaration-list>
}

Prelude に指定された <dashed-ident> はルールの名前です。 同じ名前の @position-try ルールが複数宣言された場合、 それらは カスケードされ、@keyframe ルールと同様に扱われます。

@position-try ルールは、次に挙げる プロパティのみを 受け付けます

!important<declaration-list> 内のプロパティに使用することは無効です。 そのプロパティに !important を付けるとそのプロパティ自体が無効になりますが、 @property-try ルール全体が無効になるわけではありません。

@position-try 内のすべてのプロパティは、 Position Fallback Origin と呼ばれる新しい カスケード起源 においてボックスに適用されます。これは Author OriginAnimation Origin の間に位置します。

revert 値の使用は Animation Origin と似ており、 そのプロパティがあたかも Author Origin の一部であるかのように振る舞い、 代わりに User Origin に戻ります。 (ただし revert-layer には特別な動作はなく、通常どおり動作します。)

注記: accepted @position-try properties は、 ボックス自身のサイズと位置にのみ影響し、その内容や他のスタイルを変更しない最小限のプロパティ群です。 これにより位置フォールバックの実装が大幅に簡素化される一方で、 使用可能な空間に応じてアンカー位置決めボックスを移動するという根本的なニーズに対処します。 これらのルールは Author Origin の通常の宣言を上書きするため、 @position-try 宣言と 他のプロパティの通常のカスケードや継承との悪質な相互作用を制限します。 将来的には container queries の拡張によって、 要素がどの位置フォールバックを使用しているかに基づく条件付きスタイリングが可能になり、 この制限されたプロパティリストによって制約されているような表現が可能になることが期待されます。

注記: 複数の要素が同じ @position-try ルールを 自分のアンカー要素に対してそれぞれ適用したい場合は、 <anchor-name>anchor() 内で省略し、 各ボックスのアンカーを position-anchor で指定してください。

注記: 最も一般的なフォールバックの型(通常はアンカーの片側に配置し、 必要なら反対側に反転するようなケース)は、 position-try-fallbacks のキーワードだけで 自動的に実現でき、必ずしも @position-try を使う必要はありません。

6.5. 位置フォールバックの適用

位置決めボックスが (任意の default scroll shift を適用した後に) inset-modified containing block からはみ出し、 その position options list に複数の position option が含まれている場合、 位置フォールバックスタイルを決定 して、 はみ出しを回避できるオプションを探します。 決定されたスタイルは インターリービング を通じて要素に適用され、 それによって 算出値 に影響し(トランジション等を引き起こす可能性もあります)、 レイアウトや used values に依存する決定を行います。

実装は、必要となる過剰なレイアウト作業量を制限するために、 position options list の長さに 実装定義の上限を設けることができます。 ただしこの上限は少なくとも 5 以上でなければなりません。

位置フォールバックスタイルを決定する手順は、要素 abspos に対して次の通りです:

  1. current stylesabspos の現在の used styles (計算済み基準スタイル から求める。これは以前のフォールバックの結果である場合もある)とする。

  2. position options listoption について:

    1. もし option が現在 abspos最後に成功した位置オプション であれば、 次へ

    2. adjusted styles を、位置オプションを適用するabsposoption を適用した結果とする。

    3. el rectabspos の margin box のサイズ・位置、 cb rectabsposinset-modified containing block のサイズ・位置とする(adjusted styles でレイアウトした場合)。

    4. もし cb rect がいずれかの軸で負のサイズとなりゼロサイズに補正された場合は、 次へ

      注: これは、ゼロサイズの el rect が負サイズの cb rect の「内側」だと判断されて、成功したオプションとして選ばれるのを防ぐ。

    5. もし el rectcb rect に完全に内包されていなければ、 次へ

    6. adjusted styles と、それに対して仮想的に計算された 記憶されたスクロールオフセット のセットを返す。

  3. アサーション:前のステップはオーバーフローを回避できる position option を見つけることなく終了した。

  4. current styles を返す。

注記: 子孫要素が el からはみ出していることはこの計算には影響しません。計算対象は el 自身の margin box のみです。

注記: 現在適用中の position option を意図的にスキップするため、 その option に対する remembered scroll offsets は更新されません。 他のフォールバックがどれも機能せず現在のスタイルに留まる場合、 すべての remembered scroll offsets はそのまま維持されます。

フルレイアウトパスの間、ボックスがフォールバックスタイルを決定した(あるいは何も使わないと決めた)後は、 後にレイアウトされるボックスがこの決定を変更することはできません。

例えば、A と B の2つの位置決めボックスがあり、A が B より先にレイアウトされるとします。 もし B がオーバーフローして A の包含ブロックにスクロールバーが発生しても、 これは A がフォールバックスタイルを再決定してオーバーフローを避けようとする原因にはなりません。 (最良の場合でも指数的なレイアウトコストを招く可能性があり、 最悪の場合は循環して決着がつかなくなります。)

言い換えると、レイアウトは「後戻り」しません。

6.5.1. フォールバック選択の維持とクリア

いくつかの変更は 位置フォールバックスタイルの決定 に 特に直接的な影響を与え、特別な挙動を引き起こします。 これらの フォールバック感受性のある変更 には次が含まれます:

この目的のため、計算済み基準スタイルの変更のみを考慮する。 すなわち computed style だが、TransitionsやAnimationsの cascade origins からの宣言は無視する。

6.5.1.1. 最後に成功した位置オプションの記録

できるだけレイアウトの安定性を維持するため、 位置フォールバックスタイルの決定最後に成功した位置オプションを優先して扱う。 その決定方法は次の通りである:

ResizeObserver イベントの判定・配送タイミングで、 ボックスは次のように 最後に成功した位置オプションを記録 しなければならない:

注: この記録・削除のタイミングは last remembered size の扱いと明示的に同一である。

6.5.2. 位置オプションの適用

ボックスの要素 el に対して、与えられた position option new styles適用する 手順:

  1. new stylesposition fallback origin に挿入してカスケードを解決し、 elused styles を決定するために十分なレイアウトを行います。

    これらのスタイルを計算する目的のために、仮想的な anchor recalculation point が計算され、 それに対応する仮想的な remembered scroll offsets がスタイル決定に用いられます。

  2. elused styles を返します。

try-tactic を実行する 手順は、 ボックスの要素 el のスタイル集合 styles に対して、 方向ペア directions の間で変換したスタイル集合を返すものです:

  1. もし directions が同じ軸に沿って互いに反対方向であれば、それらは「opposing(反対)」です。 そうでなければ(異なる軸を指定している場合)、それらは「perpendicular(直交)」です。

  2. el 上の accepted @position-try properties の指定値を決定し、 styles をその結果とします。

  3. 変数の置換env() 関数、 および類似の 任意置換関数styles 内で解決します。

    env() 関数については、参照される環境変数が方向または軸に関連付けられている場合(例: safe-area-inset-top)、 directions に対応する環境変数に切り替えます。

    例えば、もし top: env(safe-area-inset-top); が指定され、directions が up と left であれば、 env() はあたかも env(safe-area-inset-left) と指定されたかのように解決されます。 (次のステップで実際に left プロパティに入れ替わります。)

  4. styles の値を directions に対応するプロパティ間で入れ替えます。

    例えば "top" と "left" を入れ替える場合、 margin-topmargin-left が入れ替わり、 widthheight も入れ替わる、等の処理が行われます。

    注記: もし directions が同じ軸で反対である場合、 width や align-self のように 自身に対応するプロパティは入れ替わらないことがありますが、 それらの値は次のステップで変更される可能性があります。

  5. 入れ替えに伴ってプロパティの値を新しい方向に合わせて修正します。修正方法は次の通り:

    • inset プロパティについては、anchor() 関数内の指定側を、 以前の方向に対する相対関係を保つように新しい方向に合わせて変更します。

      もし <percentage> が使われ、directions が反対であれば、 それを元の百分率の 100% マイナスに変更します。

      例えば "top" と "left" が入れ替わる場合、 margin-top: anchor(bottom)margin-left: anchor(right) になります。

      もし "top" と "bottom" を入れ替える場合、 margin-top: anchor(20%)margin-bottom: anchor(80%) になります。

    • sizing プロパティについては、anchor-size() 内で指定されている軸を、 以前の方向に対する相対関係を保つように新しい方向に変更します。

      例えば "top" と "left" が入れ替わる場合、 width: anchor-size(width)height: anchor-size(height) になります。

    • self-alignment プロパティについては、もし directions が反対であれば、 指定された <self-position>(または left/right キーワード)があれば、 以前の方向に対する相対関係を保つように新しい方向に変更します。

      例えば "top" と "bottom" が入れ替わる場合、 align-self: startalign-self: end になります。

      ただし align-self: center は両方向に対して同じ関係を持つため 変更されません。

      同様に align-self: first baseline も変更されません。 これは <baseline-position> であって <self-position> ではないためです。

    • position-area については、 選択される position-area グリッドの行/列が、新しい方向でも以前の方向に対する相対関係を維持するように値を変更します。

      例えば "top" と "left" が入れ替わる場合、 position-area: left span-bottomposition-area: top span-right になります。

  6. styles を返します。

6.6. 条件付き非表示:position-visibility プロパティ

名前: position-visibility
値: always | [ anchors-valid || anchors-visible || no-overflow ]
初期値: anchors-visible
適用対象: 絶対配置ボックス
継承: no
パーセント値: n/a
算出値: as specified
正規順序: per grammar
アニメーション型: discrete

絶対配置のボックスを表示することが適切でないケースがあります。 このプロパティは、一般的によくあるレイアウト条件に応じて、 そのようなボックスを条件付きで表示できるようにします。

always

このプロパティは効果を持ちません。 (アンカーやオーバーフローに関係なくボックスは表示されます。)

anchors-valid

ボックスの 必須アンカー参照 のいずれかが ターゲットアンカー要素 に解決されない場合、 ボックスの visibility プロパティは force-hidden になります。

必須アンカー参照 とは? フォールバック値を持たない anchor() 関数?デフォルトアンカーも場合によって?詳細要検討。

アンカー「いずれか」不在か、「全て」不在か。どちらにも用途ありそう。ここで決定する?制御方法設ける?

anchors-visible

ボックスが デフォルトアンカーボックス を持ち その アンカーボックス不可視 または 介在ボックスによってクリップ されている場合は、 ボックスの visibility プロパティは force-hidden になります。

no-overflow

position-try の適用後もボックスが inset‑modified containing block から はみ出している場合、 ボックスの visibility プロパティは force-hidden になります。

アンカーボックス anchor は、 それを基準とする配置ボックス abspos に対して、 anchorインクオーバーフローレクト が、 anchor の祖先であり、かつ abspos の包含ブロックの子孫でもあるボックスによって 完全にクリップされている場合、介在ボックスによってクリップされている とみなされる。 この場合のクリッピングは、(デフォルトで)IntersectionObserver でチェックされるものと同じクリッピング効果、すなわち clip-pathoverflow、 または paint containment のような オーバーフロークリップ端 へのクリッピング効果だけを指す。 anchor がゼロでない面積をもつ場合、 完全にクリップされていないとみなすには交差領域もゼロであってはならない。

anchor介在ボックスによってクリップ されているかどうかは 文書のコンテンツ関連性を更新content-visibility)後・ ResizeObserver 実行後、 だが IntersectionObserver 実行前に判定する必要があります。 レスポンス向上のため他のタイミングで判定してもよいです。

注記: これはたとえば abspos が DOM でアンカーと並んでいる場合、 デフォルトアンカーがスクロールアウトしても同じスクロール領域でクリップされているため 可視のままであることを意味します。

この clipped 定義が View Transitions と矛盾しないか確認すること。

注記: 「連鎖アンカー」状況では 1つめの abspos がこのプロパティにより不可視(アンカーがスクロールアウトなど)となった場合、 それをアンカーとする2つめの abspos も不可視となり、無意味な場所に浮かばなくなります。

7. アクセシビリティへの影響

CSSアンカーポジショニングは要素間のアクセシビリティバインディングを作成・削除・変更しません。 著者はそのようなバインディングを制御する適切なマークアップ機能を必ず利用してください。

CSSアンカーポジショニングは多様な使い方・用途が可能なため、 配置ボックスといずれかのアンカー要素の間のセマンティックな関係を 自動的に確立することはありません。 例えば、デザイン上の視覚的なアンカー関係が、 要素とセマンティックアンカーとの間かもしれず、 あるいはセマンティックアンカーの祖先・兄弟・子孫と結ぶ場合もあり、 意図するビジュアル効果により異なります。 同様に、セマンティックな関係があっても視覚的にはアンカー関係を持たない選択や、 その逆もあり得ます。

著者はCSS配置による視覚的つながりだけに頼って、 要素同士をセマンティックに結びついているとみなしてはなりません。 適切なマークアップがなければ、 視覚的にリンクされた要素同士には何の意味的なDOM関係もなく—— もし意味的関係が存在するなら—— スクリーンリーダー等の非視覚エージェントや タブ移動等の非グラフィカル操作で 使いづらくなったり、利用不能となる恐れがあります。

ウェブプラットフォームには既存・今後登場する多くの機能が、 セマンティックな関連付けを明示的に作れるようになっています。 これにより非視覚エージェントでも恩恵が受けられます。 例えばHTMLのPopover APIでは 呼出元ボタンとポップオーバー要素が自動的に接続され、 タブ順序の自動調整も行い、 さらに呼出元ボタンを ポップオーバーの暗黙的アンカー要素にもするので Anchor Positioning を容易に使えます。

ポップオーバー例を追加すること。

より一般的なケースでは、 ARIAの aria-detailsaria-describedby 属性を アンカー要素側に付けることで、 少し手動になりますが関係が作れます。 配置要素側で role 属性と組み合わせれば、 非視覚エージェントが要素間の関係をユーザーに伝え、 相互自動移動も提供できます。

ただし、そのような機能も過剰利用せず、 不要・過剰なセマンティック接続があると ページが分かりづらくなることもあるので注意してください。

このセクションの改良案(特に著者向けガイド・代表的ユースケースのベストプラクティス例)は歓迎。 [Issue #10311]

8. DOMインターフェイス

8.1. CSSPositionTryRuleインターフェイス

CSSPositionTryRule インターフェイスは @position-tryルールを表します:

[Exposed=Window]
interface CSSPositionTryRule : CSSRule {
  readonly attribute CSSOMString name;
  [SameObject, PutForwards=cssText] readonly attribute CSSPositionTryDescriptors style;
};

[Exposed=Window]
interface CSSPositionTryDescriptors : CSSStyleDeclaration {
  attribute CSSOMString margin;
  attribute CSSOMString marginTop;
  attribute CSSOMString marginRight;
  attribute CSSOMString marginBottom;
  attribute CSSOMString marginLeft;
  attribute CSSOMString marginBlock;
  attribute CSSOMString marginBlockStart;
  attribute CSSOMString marginBlockEnd;
  attribute CSSOMString marginInline;
  attribute CSSOMString marginInlineStart;
  attribute CSSOMString marginInlineEnd;
  attribute CSSOMString margin-top;
  attribute CSSOMString margin-right;
  attribute CSSOMString margin-bottom;
  attribute CSSOMString margin-left;
  attribute CSSOMString margin-block;
  attribute CSSOMString margin-block-start;
  attribute CSSOMString margin-block-end;
  attribute CSSOMString margin-inline;
  attribute CSSOMString margin-inline-start;
  attribute CSSOMString margin-inline-end;
  attribute CSSOMString inset;
  attribute CSSOMString insetBlock;
  attribute CSSOMString insetBlockStart;
  attribute CSSOMString insetBlockEnd;
  attribute CSSOMString insetInline;
  attribute CSSOMString insetInlineStart;
  attribute CSSOMString insetInlineEnd;
  attribute CSSOMString top;
  attribute CSSOMString left;
  attribute CSSOMString right;
  attribute CSSOMString bottom;
  attribute CSSOMString inset-block;
  attribute CSSOMString inset-block-start;
  attribute CSSOMString inset-block-end;
  attribute CSSOMString inset-inline;
  attribute CSSOMString inset-inline-start;
  attribute CSSOMString inset-inline-end;
  attribute CSSOMString width;
  attribute CSSOMString minWidth;
  attribute CSSOMString maxWidth;
  attribute CSSOMString height;
  attribute CSSOMString minHeight;
  attribute CSSOMString maxHeight;
  attribute CSSOMString blockSize;
  attribute CSSOMString minBlockSize;
  attribute CSSOMString maxBlockSize;
  attribute CSSOMString inlineSize;
  attribute CSSOMString minInlineSize;
  attribute CSSOMString maxInlineSize;
  attribute CSSOMString min-width;
  attribute CSSOMString max-width;
  attribute CSSOMString min-height;
  attribute CSSOMString max-height;
  attribute CSSOMString block-size;
  attribute CSSOMString min-block-size;
  attribute CSSOMString max-block-size;
  attribute CSSOMString inline-size;
  attribute CSSOMString min-inline-size;
  attribute CSSOMString max-inline-size;
  attribute CSSOMString placeSelf;
  attribute CSSOMString alignSelf;
  attribute CSSOMString justifySelf;
  attribute CSSOMString place-self;
  attribute CSSOMString align-self;
  attribute CSSOMString justify-self;
  attribute CSSOMString positionAnchor;
  attribute CSSOMString position-anchor;
  attribute CSSOMString positionArea;
  attribute CSSOMString position-area;
};

そのname属性は、 規則プレリュードで宣言された名前を表します。

そのstyle属性は、 規則本体で宣言されたプロパティを 指定順で表します。 取得時には、CSSPositionTryDescriptors オブジェクトを返します。 @position-tryアトルール用であり、 以下のプロパティを持ちます:

computed flag

未設定

readonly flag

未設定

declarations

規則中で宣言された記述子を指定順で並べたもの。

parent CSS rule

コンテキストオブジェクト

owner node

Null

9. 付録:スタイルとレイアウトのインターリーブ

スタイルとレイアウトのインターリーブとは、 レイアウト処理中にサブツリーにスタイル更新が発生し、 要素の算出スタイルが遡って更新される技法です。

この概念はこの仕様書の正しい場所ではなく、 Cascadeに入るべきですが、 参照用のスケッチが必要なので暫定で記載しています。

注: スタイルとレイアウトのインターリーブコンテナクエリコンテナクエリ長ですでに使われています。 10cqwのような長さは クエリコンテナのサイズ情報を用いて算出長に解決され、 コンテナサイズがレイアウト間で変化すると トランジションが発生します。

許可された@position-tryプロパティも フォールバック解決時にインターリーブされます (position-try参照)。

当然詳細化が必要ですが、 今は「コンテナクエリと同様に振る舞う」で十分です。 この挙動も未定義ですが、少なくともある程度は相互運用されているようです。

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

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

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

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

12. 変更点

2025年12月22日作業草案(22 December 2025 Working Draft)以降の主な変更点:

2025年10月7日作業草案以降の主な変更点:

前回までの変更点は Previous Changes も参照してください。

適合性

文書の規約

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

この仕様書の本文は、明示的に非規範と記載されたセクション、例、および注釈以外はすべて規範的です。[RFC2119]

この仕様書内の例は「例えば」という導入語で始まるか、class="example"として規範文から区別されます。例えば:

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

情報提供的な注釈は「注:」で始まり、class="note"で区別されます。例えば:

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

アドバイス文は規範的なセクションとして特別な注意を喚起するスタイルになっており、<strong class="advisement">で他の規範文と区別されます。例えば: UAはアクセシブルな代替手段を必ず提供しなければなりません。

適合性クラス

この仕様書への適合性は 3つの適合クラスで定義されています:

スタイルシート
CSSスタイルシート
レンダラー
UA(ユーザーエージェント)。 スタイルシートの意味を解釈し、それを使った文書をレンダリングします。
オーサリングツール
UA。 スタイルシートを作成するツール。

スタイルシートは、 このモジュールで定義された文法を使った全ての記述が 一般CSS文法と各機能固有の文法に従い有効である場合、 この仕様に適合しているとみなされます。

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

オーサリングツールは、 一般CSS文法およびこのモジュールの各機能固有文法に従い 構文的に正しいスタイルシートを作成し、 本モジュールで記載されたスタイルシートの適合要件も満たす場合、 この仕様に適合しているとみなされます。

部分的実装

著者が将来互換性のあるパース規則を利用して フォールバック値を割り当てられるようにするため、 CSSレンダラーは必ず 利用できるレベルのサポートがない@規則、プロパティ、プロパティ値、キーワード、 その他の構文要素を無効として(適切に無視)しなければなりません。 特に、ユーザーエージェントは絶対に サポートされていない部分値のみを選択的に無視し、 サポートされている値だけを複数値プロパティ宣言で適用してはいけません。 どれかの値が無効(サポートされていない値は必ず無効です)なら、 CSS仕様では宣言全体を無視する必要があります。

不安定機能・独自拡張の実装

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

非実験的実装

仕様がCandidate Recommendation段階に達したら 非実験的実装が可能となり、実装者は 仕様通り正しく実装できているCRレベル機能について ベンダープレフィックス無しの実装を公開するべきです。

CSSの相互運用性を確立・維持するため、 CSSワーキンググループは、非実験的CSSレンダラーに対し 実装報告(必要に応じてそのテストケースも)をW3Cへ提出するよう要請しています。 W3Cに提出されたテストケースはCSSワーキンググループによるレビューと修正の対象となります。

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

索引

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

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

参考文献

規範的参考文献

[CSS-ALIGN-3]
Elika Etemad; Tab Atkins Jr.. CSS ボックスアライメントモジュールレベル3。2025年3月11日。WD。URL: https://www.w3.org/TR/css-align-3/
[CSS-BOX-4]
Elika Etemad. CSSボックスモデルモジュールレベル4。2024年8月4日。WD。URL: https://www.w3.org/TR/css-box-4/
[CSS-BREAK-4]
Rossen Atanassov; Elika Etemad. CSSフラグメンテーションモジュールレベル4。2018年12月18日。FPWD。URL: https://www.w3.org/TR/css-break-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSSカスケーディングおよび継承レベル5。2022年1月13日。CR。URL: https://www.w3.org/TR/css-cascade-5/
[CSS-CASCADE-6]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSSカスケーディングおよび継承レベル6。2024年9月6日。WD。URL: https://www.w3.org/TR/css-cascade-6/
[CSS-CONTAIN-2]
Tab Atkins Jr.; Florian Rivoal; Vladimir Levin. CSSコンテインメントモジュールレベル2。2022年9月17日。WD。URL: https://www.w3.org/TR/css-contain-2/
[CSS-DISPLAY-3]
Elika Etemad; Tab Atkins Jr.. CSSディスプレイモジュールレベル3。2023年3月30日。CR。URL: https://www.w3.org/TR/css-display-3/
[CSS-DISPLAY-4]
Elika Etemad; Tab Atkins Jr.. CSSディスプレイモジュールレベル4。2025年11月6日。WD。URL: https://www.w3.org/TR/css-display-4/
[CSS-ENV-1]
CSS環境変数モジュールレベル1。2025年9月23日。FPWD。URL: https://www.w3.org/TR/css-env-1/
[CSS-LOGICAL-1]
Elika Etemad; Rossen Atanassov. CSS論理プロパティと値モジュールレベル1。2025年12月4日。WD。URL: https://www.w3.org/TR/css-logical-1/
[CSS-MASKING-1]
Dirk Schulze; Brian Birtles; Tab Atkins Jr.. CSSマスキングモジュールレベル1。2021年8月5日。CRD。URL: https://www.w3.org/TR/css-masking-1/
[CSS-OVERFLOW-3]
Elika Etemad; Florian Rivoal. CSSオーバーフローモジュールレベル3。2025年10月7日。WD。URL: https://www.w3.org/TR/css-overflow-3/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal; Elika Etemad. CSSオーバーフローモジュールレベル4。2023年3月21日。WD。URL: https://www.w3.org/TR/css-overflow-4/
[CSS-POSITION-3]
Elika Etemad; Tab Atkins Jr.. CSS配置レイアウトモジュールレベル3。2025年10月7日。WD。URL: https://www.w3.org/TR/css-position-3/
[CSS-POSITION-4]
Elika Etemad; Tab Atkins Jr.. CSS配置レイアウトモジュールレベル4。2025年10月7日。WD。URL: https://www.w3.org/TR/css-position-4/
[CSS-PSEUDO-4]
Elika Etemad; Alan Stearns. CSS疑似要素モジュールレベル4。2025年6月27日。WD。URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SCOPING-1]
Tab Atkins Jr.; Elika Etemad. CSSスコーピングモジュールレベル1。2014年4月3日。FPWD。URL: https://www.w3.org/TR/css-scoping-1/
[CSS-SHADOW-1]
CSS Shadow Module Level 1.エディタドラフト. URL: https://drafts.csswg.org/css-shadow-1/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSSボックスサイジングモジュールレベル3。2021年12月17日。WD。URL: https://www.w3.org/TR/css-sizing-3/
[CSS-SYNTAX-3]
Tab Atkins Jr.; Simon Sapin. CSS構文モジュールレベル3。2021年12月24日。CRD。URL: https://www.w3.org/TR/css-syntax-3/
[CSS-TRANSFORMS-1]
Simon Fraser; 他. CSSトランスフォームモジュールレベル1。2019年2月14日。CR。URL: https://www.w3.org/TR/css-transforms-1/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS値・単位モジュールレベル3。2024年3月22日。CRD。URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS値・単位モジュールレベル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値・単位モジュールレベル5。2024年11月11日。WD。URL: https://www.w3.org/TR/css-values-5/
[CSS-VARIABLES-1]
Tab Atkins Jr.. CSSカスタムプロパティ(変数)モジュールレベル1。2022年6月16日。CR。URL: https://www.w3.org/TR/css-variables-1/
[CSS-VIEWPORT-1]
Florian Rivoal; Emilio Cobos Álvarez. CSSビューポートモジュールレベル1。2024年1月25日。FPWD。URL: https://www.w3.org/TR/css-viewport-1/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS書字モードレベル4。2019年7月30日。CR。URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS2]
Bert Bos; 他. カスケーディングスタイルシート レベル2 リビジョン1(CSS 2.1)仕様。2011年6月7日。REC。URL: https://www.w3.org/TR/CSS2/
[CSSOM-1]
Daniel Glazman; Emilio Cobos Álvarez. CSSオブジェクトモデル(CSSOM)。2021年8月26日。WD。URL: https://www.w3.org/TR/cssom-1/
[HTML]
Anne van Kesteren; 他. HTML標準。リビングスタンダード。URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Anne van Kesteren; Domenic Denicola. Infra Standard。リビングスタンダード。URL: https://infra.spec.whatwg.org/
[INTERSECTION-OBSERVER]
Stefan Zager; Emilio Cobos Álvarez; Traian Captan. インターセクションオブザーバ。2023年10月18日。WD。URL: https://www.w3.org/TR/intersection-observer/
[MOTION-1]
Tab Atkins Jr.; Dirk Schulze; Jihye Hong. モーションパスモジュールレベル1。2024年11月5日。WD。URL: https://www.w3.org/TR/motion-1/
[RESIZE-OBSERVER-1]
Aleks Totic; Greg Whitworth. リサイズオブザーバ。2020年2月11日。FPWD。URL: https://www.w3.org/TR/resize-observer-1/
[RFC2119]
S. Bradner. RFCで要求レベルを示すキーワード。1997年3月。Best Current Practice。URL: https://datatracker.ietf.org/doc/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. セレクターズレベル4。2026年1月22日。WD。URL: https://www.w3.org/TR/selectors-4/
[STREAMS]
Adam Rice; 他. ストリーム標準。リビングスタンダード。URL: https://streams.spec.whatwg.org/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL標準。リビングスタンダード。URL: https://webidl.spec.whatwg.org/

参考文献

[CSS-CONDITIONAL-5]
Chris Lilley 他. CSS 条件付きルールモジュール レベル5.2025年10月30日.WD.URL: https://www.w3.org/TR/css-conditional-5/
[CSS-SIZING-4]
Tab Atkins Jr.;Elika Etemad;Jen Simmons.CSS ボックスサイジングモジュール レベル4.2021年5月20日.WD.URL: https://www.w3.org/TR/css-sizing-4/
[CSS-TRANSITIONS-1]
Chris Marrin 他.CSS トランジションズモジュール レベル1.2026年1月8日.WD.URL: https://www.w3.org/TR/css-transitions-1/
[DOM]
Anne van Kesteren.DOM 標準.リビングスタンダード. URL: https://dom.spec.whatwg.org/
[WEB-ANIMATIONS-1]
Brian Birtles 他.Web アニメーションズ.2023年6月5日.WD.URL: https://www.w3.org/TR/web-animations-1/

プロパティ一覧

名前 初期値 適用対象 継承 %指定 アニメーション型 正規順序 算出値 新しい値
align-items anchor-center
align-self anchor-center
anchor-name none | <anchor-name># none principal box を生成するすべての要素 no n/a 離散値 文法に従う 指定通り
anchor-scope none | all | <anchor-name># none すべての要素 no n/a 離散値 文法に従う 指定通り
justify-items anchor-center
justify-self anchor-center
position-anchor normal | none | auto | <anchor-name> normal 絶対配置ボックス no n/a 離散値 文法に従う 指定通り
position-area none | <position-area> none 既定アンカーボックスを持つpositioned box no n/a TBD 文法に従う キーワードnone またはキーワードのペア(詳細は参照)
position-try <'position-try-order'>? <'position-try-fallbacks'> 各プロパティを参照 各プロパティを参照 各プロパティを参照 各プロパティを参照 各プロパティを参照 文法に従う 各プロパティを参照
position-try-fallbacks none | [ [<dashed-ident> || <try-tactic>] | <position-area> ]# none 絶対配置ボックス no n/a 離散値 文法に従う 指定通り
position-try-order normal | <try-size> normal 絶対配置ボックス no n/a 離散値 文法に従う 指定通り
position-visibility always | [ anchors-valid || anchors-visible || no-overflow ] anchors-visible 絶対配置ボックス no n/a 離散値 文法に従う 指定通り

IDL インデックス

[Exposed=Window]
interface CSSPositionTryRule : CSSRule {
  readonly attribute CSSOMString name;
  [SameObject, PutForwards=cssText] readonly attribute CSSPositionTryDescriptors style;
};

[Exposed=Window]
interface CSSPositionTryDescriptors : CSSStyleDeclaration {
  attribute CSSOMString margin;
  attribute CSSOMString marginTop;
  attribute CSSOMString marginRight;
  attribute CSSOMString marginBottom;
  attribute CSSOMString marginLeft;
  attribute CSSOMString marginBlock;
  attribute CSSOMString marginBlockStart;
  attribute CSSOMString marginBlockEnd;
  attribute CSSOMString marginInline;
  attribute CSSOMString marginInlineStart;
  attribute CSSOMString marginInlineEnd;
  attribute CSSOMString margin-top;
  attribute CSSOMString margin-right;
  attribute CSSOMString margin-bottom;
  attribute CSSOMString margin-left;
  attribute CSSOMString margin-block;
  attribute CSSOMString margin-block-start;
  attribute CSSOMString margin-block-end;
  attribute CSSOMString margin-inline;
  attribute CSSOMString margin-inline-start;
  attribute CSSOMString margin-inline-end;
  attribute CSSOMString inset;
  attribute CSSOMString insetBlock;
  attribute CSSOMString insetBlockStart;
  attribute CSSOMString insetBlockEnd;
  attribute CSSOMString insetInline;
  attribute CSSOMString insetInlineStart;
  attribute CSSOMString insetInlineEnd;
  attribute CSSOMString top;
  attribute CSSOMString left;
  attribute CSSOMString right;
  attribute CSSOMString bottom;
  attribute CSSOMString inset-block;
  attribute CSSOMString inset-block-start;
  attribute CSSOMString inset-block-end;
  attribute CSSOMString inset-inline;
  attribute CSSOMString inset-inline-start;
  attribute CSSOMString inset-inline-end;
  attribute CSSOMString width;
  attribute CSSOMString minWidth;
  attribute CSSOMString maxWidth;
  attribute CSSOMString height;
  attribute CSSOMString minHeight;
  attribute CSSOMString maxHeight;
  attribute CSSOMString blockSize;
  attribute CSSOMString minBlockSize;
  attribute CSSOMString maxBlockSize;
  attribute CSSOMString inlineSize;
  attribute CSSOMString minInlineSize;
  attribute CSSOMString maxInlineSize;
  attribute CSSOMString min-width;
  attribute CSSOMString max-width;
  attribute CSSOMString min-height;
  attribute CSSOMString max-height;
  attribute CSSOMString block-size;
  attribute CSSOMString min-block-size;
  attribute CSSOMString max-block-size;
  attribute CSSOMString inline-size;
  attribute CSSOMString min-inline-size;
  attribute CSSOMString max-inline-size;
  attribute CSSOMString placeSelf;
  attribute CSSOMString alignSelf;
  attribute CSSOMString justifySelf;
  attribute CSSOMString place-self;
  attribute CSSOMString align-self;
  attribute CSSOMString justify-self;
  attribute CSSOMString positionAnchor;
  attribute CSSOMString position-anchor;
  attribute CSSOMString positionArea;
  attribute CSSOMString position-area;
};

課題索引

上記の例を修正してください。なぜなら、このユースケースは現在自動で処理されます。
より良い例を追加すること。この例は anchor-center だけで容易に実現可能。[Issue #10776]
transform もスクロールと同じ課題を持つため、Anchor Positioning も通常は考慮しない仕様。しかし transform の効果もここで取り込めるか?
スナップショットタイミングの厳密定義: 各フレームごと、スタイル再計算前に更新。
記憶スクロールオフセット と同様に、 デフォルトアンカー要素 の transform も考慮できるか?
図を追加すること!
必須アンカー参照 とは何か? フォールバック値を持たない anchor() 関数? デフォルトアンカーの場合も?詳細要検討。
いずれかアンカー未解決か、 すべて未解決か? どちらにも使い道がありそう。明示決定/制御方法を定めたい?
この clipped の定義が View Transitions と矛盾しないか確認すること。
ポップオーバー例を追加すること。
このセクション改善案(特に著者ガイダンス・代表ユースケースのベストプラクティス例)歓迎。[Issue #10311]
この概念の正しい仕様場所は本仕様ではなく Cascade だろうが、参照用スケッチが必要。
もちろん詳細が大幅に不足しているが、今は「コンテナクエリと同様の扱い」としておけば十分。 その挙動も未定義だが、少なくともある程度は相互運用可能?