CSSアンカーポジショニング

JSなしで要素を他の要素にアンカー固定

ツールチップ、ポップオーバー、ドロップダウンメニューなどのUI要素をトリガー要素に正確に位置づけることはPopper.jsのようなJavaScriptライブラリに依存していました。CSSアンカーポジショニングはanchor-nameで基準要素を指定し、position-anchorとanchor()関数で相対位置を計算します。

ビューポート境界を超える場合はposition-tryフォールバックで自動再配置まで処理でき、複雑なJavaScript位置計算コードを置き換えます。

適用方法

1

基準要素にanchor-name: --triggerを宣言する

2

位置づける要素にposition-anchor: --triggerを指定する

3

anchor()関数でtop、leftなどの位置を計算する

4

position-tryでビューポート外のフォールバック位置を定義する

メリット

  • JavaScript位置計算ライブラリ(Popper.jsなど)が不要になる
  • ビューポート境界フォールバックをCSSだけで処理できる

デメリット

  • まだChromiumベースのブラウザでのみ完全サポート
  • 複雑なアンカー関係のデバッグが厄介な場合がある

ユースケース

フォームフィールド横に表示されるバリデーションツールチップ ボタンクリック時に表示されるコンテキストメニューの位置自動決定

参考資料