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

W3C作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2025/WD-css-anchor-position-1-20251222/
最新公開バージョン:
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 プロパティ

Name: anchor-name
Value: none | <dashed-ident>#
Initial: none
Applies to: 主ボックスを生成するすべての要素
Inherited: no
Percentages: n/a
Computed value: as specified
Canonical order: per grammar
Animation type: discrete

anchor-name プロパティは 要素をアンカー要素とし、 その主ボックスアンカーボックスとみなします。 また、その要素にターゲットとなるアンカー名リストを持たせます。 値の意味は以下の通りです:

none

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

<dashed-ident>#

要素が主ボックス を生成する場合、 その要素はアンカー要素となり、 指定されたリストのアンカー名を持ちます。 各アンカー名ルーズマッチツリー・スコープ名です。

それ以外の場合、このプロパティは効果を持ちません。

アンカー名は一意である必要はありません。 すべての要素が ターゲットアンカー要素 になれるわけではありません。 したがって、適切にスコープすれば 同じ名前を複数箇所で使うことができます。

注記: 複数の要素が同じアンカー名を共有し、 すべてがある位置決めボックスから見える場合、 ターゲットアンカー要素は DOM順で最後のものになります。 anchor-scopeプロパティを使って、 参照ボックスに対して見える名前をさらに限定できます。

アンカー名はデフォルトでは 包含でスコープされません。 要素がstyleまたはlayout containment (その他類似の包含)を持つ場合でも、 その子孫のアンカー名は ページ上の他の要素から見える状態です。

注記: 要素が他の要素のスキップ内容にある場合 (例えばcontent-visibility: hidden など)、 それは有効なアンカー要素とはなりません。 事実上、名前がないものとして扱われます。

注記: シャドウツリー内の 位置決め要素は、「上位」のツリーで定義された アンカー名を参照できます。 現状、「下位」シャドウツリーで定義されたアンカー名 を参照することはできません。

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

Name: anchor-scope
Value: none | all | <dashed-ident>#
Initial: none
Applies to: all elements
Inherited: no
Percentages: n/a
Computed value: as specified
Canonical order: per grammar
Animation type: discrete

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

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

none

アンカー名のスコープに変更はありません。

all

この要素またはその子孫によって定義された、かつ子孫がさらに anchor-scope によって既にスコープが限定されていないすべてのアンカー名を、 この要素の子孫のみにスコープされるように指定します。 また、子孫がマッチできるアンカー名をこのサブツリー内のアンカー要素に限定します。

この値は同じツリー・スコープ内のアンカー名にのみ影響し、 それを厳密マッチのツリー・スコープ名であるかのように扱います。 (つまり、anchor-scope: all は 実質的に anchor-scope: --foo, --bar, ... と同じ動作をし、 関連するすべてのアンカー名を列挙するのと同じになります。)

<dashed-ident>

この要素またはその子孫によって定義された、かつ子孫がさらに anchor-scope によって既にスコープが限定されていない、 一致するアンカー名を この要素の子孫のみにスコープされるように指定します。 また、子孫がマッチできるこれらのアンカー名を このサブツリー内のアンカー要素に限定します。

<dashed-ident>厳密マッチツリー・スコープ名を表し、 すなわち同じシャドウツリー内のアンカー名にのみマッチします。[CSS-SCOPING-1]

このプロパティは暗黙的アンカー要素には影響しません。

デザインパターンを再利用する際、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> です。 次の条件を満たすツリー順で最後の要素 el を返します:

    もしこれらの条件を満たす要素が存在しなければ、何も返しません。

    注記: anchor-scope は特定のアンカー名の可視性を制限し、 これがどの要素が特定のルックアップのアンカー要素になり得るかに影響することがあります。

注記: あるシャドウツリー内のスタイルで定義された anchor-name は別のシャドウツリー内のスタイルにおける anchor 関数 から見えないため、 カプセル化が維持されます。 しかし、異なるシャドウツリーの 要素同士 は引き続き相互にアンカーでき、 その場合は anchor-name と anchor 関数の両方が同じツリー内のスタイルから来ていることが必要です(例えば ::part() を使ってシャドウ内の要素をスタイリングする場合など)。 (暗黙的アンカー要素 も本質的に単一のツリーに限定されるわけではありませんが、 その詳細はそれらを割り当てる API に依存します。)

要素 possible anchor が、絶対配置された要素 positioned el にとって 有効なアンカー要素 であるのは、以下すべてが真である場合です:

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

Name: position-anchor
Value: none | auto | <anchor-name>
Initial: none
Applies to: 絶対配置ボックス
Inherited: no
Percentages: n/a
Computed value: as specified
Canonical order: per grammar
Animation type: discrete

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

none

このボックスはデフォルトアンカー要素を持ちません。

auto

存在する場合は暗黙的アンカー要素を使用し、 そうでなければボックスはデフォルトアンカー要素を持ちません。

<anchor-name>

指定されたターゲットアンカー要素が ボックスのデフォルトアンカー要素となります。

初期値をより自動的(magical)なものにし、 noneauto の間を position-area の有無で自動選択するように したほうがよいかもしれません。[Issue #13067]

主ボックスデフォルトアンカー要素の場合、 それがボックスのデフォルトアンカーボックスとなります。

例えば、以下のコードでは .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 プロパティ

Name: position-area
Value: none | <position-area>
Initial: none
Applies to: デフォルトアンカーボックスを持つ位置決めボックス
Inherited: no
Percentages: n/a
Computed value: none キーワードまたはキーワードの組み合わせ。詳細は§ 3.1.3 <position-area> の算出値とシリアライズ参照
Canonical order: per grammar
Animation type: 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-name> = <dashed-ident>
<anchor-side> = inside | outside
       | top | left | right | bottom
       | start | end | self-start | self-end
       | <percentage> | center

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

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

注記: これは transitionanimation でアンカー関数を使ったプロパティも ボックスの動き、アンカーの追加・削除、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:none / display:contents から それ以外の display に変化したとき)に発生します。これはCSSアニメーションの開始タイミングと同じです。

アンカー再計算ポイントは、 当該要素のフォールバックスタイル決定時にも発生し、 適用スタイルが切り替わった場合は新しいフォールバックスタイルの アンカー再計算ポイントを用います。

要素 absposアンカー再計算ポイントが発生したときは、 absposアンカー参照で 参照されている各要素 anchor に対し、 その時点の全てのscroll container祖先の スクロールオフセットの合計を 記憶スクロールオフセットとして保持します (ただし abspos包含ブロック未満まで)。 記憶スクロールオフセットには stickyなどスクロール依存の他の位置調整も加味されます。 absposデフォルトアンカー要素を持つ場合は アンカー参照が無くても必ずそれに対し計算します。

すべてのアンカー参照は すべてのscroll container初期スクロール位置にいるものとして計算し、 その後に記憶スクロールオフセットを加算します。

変形(transform)もスクロール同様の課題があり、 Anchor Positioningは通常それらを考慮しません。 transformの効果もここで取り入れられるか?

この仕組みで、要素は アンカー参照 の スクロール位置の最初の1回には追従できますが、 その後さらにスクロールされても 見た目上アンカーから離れ続けます (ただしスクロール以外の動きには引き続き追従)。 この問題は一般には解決できませんが、 特定の アンカー参照 ―つまり デフォルトアンカー要素― については追従可能です:

絶対配置ボックス abspos が 横軸または縦軸で スクロール補正するのは、 次のどちらも成立する場合:

注記: absposposition optionsリスト を持っている場合は、どの軸でスクロール補正するかは 適用中のフォールバックスタイルの影響も受けます。

absposデフォルトスクロールシフト は 水平・垂直軸ごとの長さペアであり、それぞれ次の計算式:

レイアウト終了後、absposデフォルトスクロールシフトぶんさらに移動されます。 これは他のtransform適用前の transform のように働きます。

スナップショット(スクロール位置記憶)のタイミングを厳密に定義すること: 毎フレーム更新・スタイル再計算前。

記憶スクロールオフセット同様に デフォルトアンカー要素のtransformにも対応できるか?

注記: 記憶スクロールオフセットanchor() の値に影響しますが、 デフォルトスクロールシフトは 要素自身の移動に直接効きます(insetプロパティ・alignment適用後)。 通常この2つの違いは区別できませんが、 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プロパティ

Name: position-try-fallbacks
Value: none | [ [<dashed-ident> || <try-tactic>] | <position-area> ]#
Initial: none
Applies to: absolutely positioned boxes
Inherited: no
Percentages: n/a
Computed value: as specified
Canonical order: per grammar
Animation type: discrete

このプロパティは、絶対配置ボックス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. For each として、position options list 内の各 option について:

    1. もし option が現在 absposlast successful position option であれば、 continue します。

    2. adjusted stylesoptionabspos に適用した結果とします (apply a position option を参照)。

    3. el rectabspos の margin box のサイズと位置とし、 cb rectabsposinset-modified containing block のサイズと位置とします、 これらは adjusted styles でレイアウトしたときのものです。

    4. もし cb rect がいずれかの軸で負のサイズになり 0 に修正されていたら、 continue します。

      注記: これは負のサイズの cb rect に対して 0 サイズに修正された場合でも、ゼロサイズの el rect が「内部にある」と判断されて 成功オプションに選ばれるのを防ぎます。

    5. もし el rectcb rect に完全に収まっていなければ、 continue します。

    6. adjusted styles と、それに対して仮に計算された remembered scroll offsets の集合を返します。

  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. フォールバック選択の維持とクリア

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

レイアウトの安定性をなるべく維持するために、 位置フォールバックスタイルの決定最後に成功した位置オプション を優先します。 これは次のように決定されます:

ResizeObserver イベントが決定され配信される時点で、 ボックスは次の手順で 最後に成功した位置オプションを記録 しなければなりません:

注記: この記録/削除のタイミングは、 last remembered sizes の扱いと意図的に同じです。

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 が 介在ボックスによってクリップ されるのは、anchorインクオーバーフローレクト が、anchor の祖先にあたり abspos の包含ブロックの子孫であるボックスによって 完全にクリップされた場合です。 ここでのクリッピングは、IntersectionObserver が(デフォルトで)判定するクリッピング効果と同じです。 すなわち clip-pathoverflowpaint containment などで オーバーフロークリップエッジへクリッピングされた場合です。

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年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-ANCHOR-POSITION-1]
Tab Atkins Jr.; Elika Etemad; Ian Kilpatrick. CSSアンカーポジショニング。2025年10月7日。WD。URL: https://www.w3.org/TR/css-anchor-position-1/
[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-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。2022年11月11日。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-SHADOW-PARTS-1]
Tab Atkins Jr.; Fergal Daly. CSSシャドウパーツモジュールレベル1。2025年12月16日。WD。URL: https://www.w3.org/TR/css-shadow-parts-1/
[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]
David Baron; 他. CSSトランジション。2018年10月11日。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 | <dashed-ident># none 主ボックスを生成するすべての要素 no n/a discrete per grammar as specified
anchor-scope none | all | <dashed-ident># none すべての要素 no n/a discrete per grammar as specified
justify-items anchor-center
justify-self anchor-center
position-anchor none | auto | <anchor-name> none 絶対配置ボックス no n/a discrete per grammar as specified
position-area none | <position-area> none デフォルトアンカーボックスを持つ位置決めボックス no n/a TBD per grammar the keyword none or a pair of keywords, see
position-try <'position-try-order'>? <'position-try-fallbacks'> 各個別プロパティ参照 各個別プロパティ参照 各個別プロパティ参照 各個別プロパティ参照 各個別プロパティ参照 per grammar 各個別プロパティ参照
position-try-fallbacks none | [ [<dashed-ident> || <try-tactic>] | <position-area> ]# none 絶対配置ボックス no n/a discrete per grammar as specified
position-try-order normal | <try-size> normal 絶対配置ボックス no n/a discrete per grammar as specified
position-visibility always | [ anchors-valid || anchors-visible || no-overflow ] anchors-visible 絶対配置ボックス no n/a discrete per grammar as specified

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;
};

課題索引

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