.my-anchor { position: relative; top: 6rem; left: 20rem; background-color: #339; color: #fff; padding: .2rem; width: 5rem; text-align: center; anchor-name: --my-anchor; } .my-positioned-box { background-color: #eee; border: 1px solid #ccc; width: 10rem; padding: .2rem; position-anchor: --my-anchor; position: absolute; position-area: bottom span-right; position-try-fallbacks: top span-left; }
<div class="my-anchor">Anchor</div> <div class="my-positioned-box"> <div>Menu1</div> <div>Menu2</div> <div>Menu3</div> </div>
枠のサイズを変更してメニューが隠れるようにすると、メニューが左上に移動します。
anchor-name
でポジショニングの対象となるアンカーにアンカー名をつけます。アンカー名は --
で始まる名前を指定します。
.my-anchor { : anchor-name: --my-anchor; }
配置ボックスには、position-anchor
で対象とするアンカーを指定します。
.my-positioned-box { : position-anchor: --my-anchor; }
position-area
は配置ボックスの位置を指定します。配置ボックスには position: absolute
も指定する必要があります。
.my-positioned-box { : position-anchor: --my-anchor; position: absolute; position-area: bottom span-right; }
bottom span-right
などの位置は下記の ①~⑧ のどの位置に表示するかを指定しています。
① | ② | ③ |
④ | Anchor | ⑤ |
⑥ | ⑦ | ⑧ |
position-try-fallbacks
には、配置ボックスが画面からはみだした場合に移動させる位置を指定します。下記の例では、通常は bottom span-right
の位置に表示しますが、画面からはみ出す場合は bottom span-left
、それでもはみ出す場合は top span-right
、それでもはみ出す場合は top span-left
の位置に表示します。
.my-positioned-box { : position-area: bottom span-right; position-try-fallbacks: bottom span-left, top span-right, top span-left; }
position-try-fallbacks
には下記の値を指定することもできます。
下記の例では、横方向にはみ出す場合は左側に反転し、縦方向にはみ出す場合は上側に反転します。
.my-positioned-box { : position-area: bottom span-right; position-try-fallbacks: flip-inline, flip-block; }
position-try-fallbacks
には @position-try
で定義した名前を指定することもできます。下記の例では配置ボックスがはみ出す場合、--bottom-left
の位置に、それでもはみ出す場合は --top-right
の位置に、それでもはみ出す場合は --top-left
の位置に表示します。
@position-try --bottom-left { position-area: bottom span-left; } @position-try --top-right { position-area: top span-right; } @position-try --top-left { position-area: top span-left; } .my-positioned-box { position-area: bottom span-right; position-try-fallbacks: --bottom-left, --top-right, --top-left; }
position-try-order
には、position-try-fallbacks
で指定した補正位置の優先度を指定します。
下記の例では通常時は右上(top span-right
)に表示します。横幅が狭くなり表示しきれなくなると、左下(bottom span-left
) と右下(bottom span-right
) の内、横幅を最大限に確保できる方に位置補正します。
.my-positioned-box { : position-area: top span-right; position-try-fallbacks: bottom span-left, bottom span-right; position-try-order: most-width; }
<div class="my-anchor">Anchor</div> <div class="my-positioned-box">あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん</div>
position-try
は、position-try-fallbacks
と position-try-order
をまとめて指定することができるショートハンドです。
.my-positioned-box { /* position-try-order: most-width; */ /* position-try-fallbacks: bottom span-right, top-span-left; */ position-try: most-width bottom span-right, top-span-left; }
anchor-scope
で指定したアンカー名はこの要素の子孫要素からのみ参照可能な名前となります。ひとつのページにアンカーと配置ボックスのペアを複数記述する場合、個々に別々のアンカー名を指定する必要がありますが、anchor-scope
でアンカー名の参照可能スコープを指定することにより、同じ名前を使用できるようになります。Chrome 131 からサポートされます。
.my-anchor-and-positioned-box { anchor-scope: --my-anchor; .my-anchor { anchor-name: --my-anchor; } .my-positioned-box { position-anchor: --my-anchor; } }
<div class="my-anchor-and-positioned-box"> <div class="my-anchor">Anchor</div> <div class="my-positioned-box"> <div>Menu1</div> <div>Menu2</div> <div>Menu3</div> </div> </div> <div class="my-anchor-and-positioned-box"> <div class="my-anchor">Anchor</div> <div class="my-positioned-box"> <div>Menu1</div> <div>Menu2</div> <div>Menu3</div> </div> </div>
position-visibility
はアンカーや配置ボックスの状態によって配置ボックスの表示・非表示を制御します。no-overflow
を指定すると配置ボックスの一部でもスクロールアウトすると配置ボックス全体が非表示になります。他の値については position-visibility
を参照してください。
.my-positioned-box { : position-visibility: no-overflow; }
position-area
の代わりに anchor()
関数を用いて配置ボックスの位置を指定することもできます。下記の例では配置ボックスの上端(top)をアンカーの下部(bottom)に、配置ボックスの左端(left)をアンカーの左端(left)に位置づけます。
.my-positioned-box {
position-anchor: --my-anchor;
/* position-area: bottom span-right; */
top: anchor(bottom);
left: anchor(left);
}
position-anchor
でアンカー名を指定する代わりに anchor()
の第1引数でアンカー名を指定することもできます。
.my-positioned-box {
/* position-anchor: --my-anchor; */
top: anchor(--my-anchor bottom);
left: anchor(--my-anchor left);
}
引数には top
, bottom
, left
, right
, start
, end
, self-start
, self-end
, inside
, outside
, center
, <percentage>
を指定することができます。詳細は anchor()
を参照してください。
anchor-size()
関数はアンカーの横幅や高さを計算します。下記の例では、配置ボックスの高さをアンカーの2倍、横幅もアンカーの2倍の大きさに指定しています。
.my-positioned-box { height: calc(anchor-size(height) * 2); width: calc(anchor-size(width) * 2); }
配置ボックスをアンカーの中央に表示するために、justify-self
, align-self
, justify-items
, align-items
プロパティに新しい値 anchor-center
が追加されました。通常 justify-
は横方向、align-
は縦方向を意味します。-self
はアイテム自身に、-items
はアイテムを含むコンテナに指定します。
.my-positioned-box { justify-self: anchor-center; align-self: anchor-center; }