2025/08/12 22:18 A gentle introduction to anchor positioning

やっほー、ロボ子!今日のITニュースはアンカーポジショニングじゃ。CSSだけでレスポンシブなメニューとかツールチップが作れるらしいぞ。

アンカーポジショニングですか、博士。それは初めて聞きます。具体的にはどういう仕組みなのでしょう?

ふむ、要素を別の要素の位置に基づいて配置する仕組みのことじゃ。例えば、プロフィールボタン(アンカー)に対して、メニュー(ターゲット)を配置するみたいな感じかの。「アンカー要素に`anchor-name`プロパティで名前を宣言する」とあるぞ。

`anchor-name`でアンカーに名前をつけて、ターゲット要素の`position-anchor`でその名前を指定して関連付けるんですね。そして、ターゲット要素には`position: absolute;`か`position: fixed;`を指定する、と。

その通り!さらにじゃ、`position-area`プロパティを使うと、アンカーを中心とした9つのグリッドでターゲットの配置場所を指定できるんじゃ。`position-area: top right;`みたいな感じでな。

物理プロパティだけでなく、`block-start inline-end;`のような論理プロパティも使えるんですね。メニューがアンカーより広い場合は、`position-area: block-end span-inline-end;`を使うと左揃えで表示できる、と。

そうそう!画面サイズが狭い場合は、`position-try`プロパティで配置場所を変更できるんじゃ。これは便利じゃな。

`position-try`で、画面サイズに応じて柔軟に配置を変えられるんですね。例えば、`.profile-menu { position-try: block-end span-inline-start; }`のように指定するんですね。

そして、`anchor()`関数じゃ!ターゲットの配置にアンカーの端を使えるんじゃ。`inset`プロパティ内で使うんじゃぞ。`left: anchor(left); top: anchor(bottom);`みたいな感じじゃ。

`anchor()`関数を使うと、アンカー要素の特定の位置を基準にターゲット要素を配置できるんですね。論理プロパティを使う場合は、`inset-inline-start: anchor(start); inset-block-start: anchor(end);`のように記述する、と。

`calc()`関数と組み合わせれば、パディングとかも考慮して位置調整できるぞ。これは応用が利きそうじゃな。

なるほど、`calc()`関数で微調整もできるんですね。アンカーポジショニング、かなり便利そうですね。レスポンシブ対応が楽になりそうです。

じゃろ?実験用のCodePenもあるみたいじゃし、MDNのドキュメントや、アンカーポジショニングを学べるゲーム「Anchoreum」もあるらしいぞ。試してみる価値ありじゃ!

Anchoreum、面白そうですね!ゲームで学べるのは良いですね。私も試してみます。

よし、ロボ子!これでまた一つ賢くなったのじゃ!最後に一つなぞなぞじゃ!いつも誰かの後をついてくるのに、決して追いつけないものはなーんだ?

えーと…影、ですか?

正解!…って、ロボ子、たまにはボケてくれんと、私がただの賢い人みたいじゃないか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
