CSS アンカーポジショニング ジェネレーター

anchor-name / position-anchor / position-area / anchor() を使ってツールチップ・ポップオーバー・ドロップダウンの配置を組み立て、ライブプレビューしてプロダクションレディなCSSをコピー。

このツールについて

CSS Anchor Positioning は、ある要素を別の要素に「貼り付ける」ことを宣言的に実現する、モダンブラウザ初のネイティブ機能です。これが登場する以前は、ツールチップ・ドロップダウン・ポップオーバー・ダイアログのいずれも Floating UI / Popper.js / Tippy といった JavaScript ライブラリでトリガーを計測し、resize や scroll を毎フレーム監視して再配置する必要がありました。anchor-nameposition-anchoranchor() 関数、position-area ショートハンドが揃った今、その作業をブラウザのレイアウトエンジン側に任せられ、JavaScript はゼロにできます。

このジェネレーターは機能セット全体のサンドボックスです。プレビューエリア内で アンカー をドラッグすれば、ターゲット がリアルタイムに追従する様子を確認できます。9方向の position-area グリッド(top、top-end、right、bottom-start など)から配置を選ぶか、軸ごとに細かく制御したい場合は明示的な anchor() 関数に切り替えてください。position-try-fallbacks パネルをONにすると flip-blockflip-inline といったオーバーフロー回避用の代替配置を追加でき、ビューポートからはみ出しそうなときにブラウザが自動で位置を反転してくれます。生成されたCSSパネルからアンカー要素とターゲット要素両方のスニペットをコピーペースト可能です。

注意点はブラウザサポートです。Chrome と Edge は 125(2024年5月)でフル対応しました。Safari 26 はコアのプリミティブをサポートしますが、position-area ショートハンドは未対応です。Firefox は2026年4月時点で未実装 のため、本番コードにはフォールバック戦略が必須です:JavaScript ポリフィル(Oddbird の CSS anchor positioning polyfill が事実上の標準)、@supports ルールで position: absolute のデフォルトを用意する、あるいは静的配置にグレースフルにデグレードするプログレッシブエンハンスメントです。ページ上部のサポートバナーは CSS.supports('anchor-name', '--x') で現在の環境を検出し、必要に応じてプレビューを手動の位置フォールバックに切り替えます。

コンポーネント駆動のレイアウトをスタイリングするなら、コンテナサイズごとにアンカー配置を切り替えるContainer Query Builder、狭いポップオーバー内での折り返し挙動を比較するCSS text-wrap プレイグラウンド、トリガー要素を子孫セレクターから狙うCSSセレクターリファレンスと一緒に使うと効果的です。小さなモバイルビューポートでも破綻しないフォールバック位置を選ぶにはViewport Size Referenceも役立ちます。

入力・ドラッグ・生成されたCSSはすべてこのブラウザタブの中だけで完結します。サーバーには何も送信されず、入力に紐づくアナリティクスもなく、一度読み込めばオフラインでも動作します。

使い方

  1. Identifiers カードで アンカー名 を決めます。-- で始まる必要があります(アンカーポジショニング専用にスコープされたCSSカスタムプロパティです)。デフォルトの --anchor-1 で一回限りのスニペットには十分ですが、本番コードでは --menu-trigger--tooltip-source のように意味のある名前を使ってください。
  2. ターゲット側の position-anchor はアンカー名に自動同期します。別のアンカーに追従させたい場合のみ変更してください(上級者向け — ほとんどのアプリは1ターゲット1アンカーです)。
  3. 配置を選ぶ:9方向の position-area グリッド(top、top-end、right、bottom-start など)をクリック。プレビューがライブ更新するので、ターゲットがアンカーに対してどう配置されるかが一目でわかります。
  4. 「Use anchor() instead」 をONにすると、position-area ショートハンドから明示的な anchor() 関数に切り替わります。軸ごとの制御が可能になり、「ターゲットの top をアンカーの bottom に」「ターゲットの left をアンカーの right に」といった指定ができます。
  5. Offset スライダーでアンカーとターゲットの隙間を調整します(一般的な値:ツールチップ 4〜12px、ドロップダウン 0〜4px、ポップオーバー 8〜16px)。
  6. プレビュー内の アンカー をドラッグしてエッジケース(角・端・ビューポートはみ出し)をテストします。ビューポート端でのテストには position-try-fallbacks を有効にして flip-block を追加すると、はみ出しそうなときに自動で反転してくれます。
  7. Copy CSS(または Ctrl+Shift+C)で、.anchor ルールと .target ルールの両方を含むスタイルシート全体をクリップボードへコピーします。

代表的なユースケース

すべての 15 件を見る →

よくある質問

CSS Anchor Positioning とは何ですか?

CSS Anchor Positioning は2024年に登場したCSS機能で、ある要素(ターゲット)を別の要素(アンカー)に対して純粋なCSSだけで配置できるようにします。アンカーが anchor-name: --x で識別子を宣言し、ターゲットが position-anchor: --x で参照を表明し、あとは position-area ショートハンド(例:position-area: top)か明示的な anchor() 関数(例:top: anchor(--x bottom))でターゲットを配置します。スクロールもリサイズも再フローも、計算はすべてブラウザがJavaScriptなしで処理します。ツールチップ・ドロップダウン・ポップオーバー・ダイアログでよく使われていた Floating UI / Popper.js / Tippy ライブラリの代替になります。

Firefox はいつ CSS Anchor Positioning に対応しますか?

2026年4月時点で Firefox は未実装です。Bugzilla(bug 1838746)でトラッキングされておりロードマップ上にはありますが、具体的なリリース時期は約束されていません。Firefox 対応を含めた本番コードには、Oddbird の CSS Anchor Positioning Polyfill(未対応ブラウザで構文をバックフィルする小さなJSシム)を使うか、@supports (anchor-name: --x) { ... } でアンカースタイルをラップして position: absolute のフォールバックを明示的に用意する方法があります。本ページの「browser-fallback-strategy」記事で両方のアプローチを詳しく解説しています。

anchor-name と position-anchor の違いは?

anchor-name はアンカー要素側に設定するもので、「自分はアンカーです、識別子はこれです」と宣言します。position-anchor はターゲット要素側に設定するもので、「この名前のアンカーに追従したい」と宣言します。接続が成立するには、両方が同じカスタムプロパティ識別子(どちらも -- で始まる)を使う必要があります。anchor-name はアンカーに貼るラベル、position-anchor はターゲットが配送される住所、というイメージです。シンプルなケースでは両者の値は同じになりますが、複数のターゲットが1つのアンカーを共有する場合や、JavaScript でターゲットのアンカーを切り替える場合などの上級ケースでは値が分離されます。

アンカーポジショニングは position: fixed と一緒に使えますか?

はい。アンカーポジショニングは position: absolute でも position: fixed でも動作します。意味的な違いは従来通りで、absolute はターゲットを最も近い配置済み祖先(containing block)に対して配置し、fixed はビューポートに対して配置します。どちらの場合もページのスクロールや再フローに合わせてアンカーの解決位置に追従します。overflow: hidden な祖先要素から脱出すべきツールチップやポップオーバー(カードの境界でツールチップが切れてしまうおなじみの問題)には position: fixed が最適です。本ジェネレーターのトグルで absolute / fixed を切り替え、対応するCSSをコピーできます。

position-try-fallbacks はいつ使うべきですか?

position-try-fallbacks は、ターゲットが containing block からはみ出しそうなときにブラウザが順番に試す代替配置のリストです。最もよく使う値は flip-block(ブロック軸の反対側を試す、例:top → bottom)、flip-inline(インライン軸を反転、例:left → right)、'flip-block flip-inline'(両方反転)です。'top, bottom, right, left' のように具体的な position-area 値を優先順位付きでリストすることもできます。ターゲットがビューポートからはみ出す可能性があるとき、つまりほぼすべてのツールチップ・ポップオーバーで使うべきです。Floating UI の flip ミドルウェアのネイティブ等価物です。

HTML Popover API との連携は?

CSS Anchor Positioning は HTML Popover API([popover] 属性、popovertarget など)と組み合わせて使うことを念頭に設計されています。ポップオーバー要素がターゲット、トリガーボタンがアンカーになります。ボタンに anchor-name を、ポップオーバーに position-anchor を設定するだけで、ポップオーバーがトリガーに自動追従します — 配置のためのJavaScriptは一切不要です。両機能をサポートするブラウザ(Chrome 125+、Edge 125+、Safari 26+)では、ツールチップ・メニュー・ダイアログを完全に宣言的に実装できます。本ページの「anchor-with-popover-api」記事で完全なパターンを紹介しています。

データは安全ですか?

はい。このジェネレーターはブラウザ内だけで完結します。アンカー・ターゲットの識別子、position-area の値、フォールバックリスト、生成されたCSSはすべて React のステートとCSSで計算・描画されており、サーバーには何も送信されません。ブラウザサポートバナーはローカルの CSS.supports() API を使っており、外部の機能検出サービスは利用しません。入力に紐づくアナリティクスもなく、一度読み込めばオフラインでも動作するので、独自のコンポーネントライブラリAPI('--my-app-tooltip' のようなアンカー名)をプロトタイプしても、データが端末から外に出ることはありません。

関連ツール