Anchor positioning

Baseline 未達(対応: Safari)ある要素の位置を基準に、ツールチップやメニューを CSS だけで配置するMDN ↗

STEP 1

表のメニューが箱で切れる

表は、狭い画面で横にスクロールできるよう overflow-x: auto の箱に入れるのが一般的です。各行の「…」を押すとメニューが開きます。メニューは position: absolute でボタンの下に置いていますが、最後の行のメニューは箱の下端で切れ、箱の中のスクロールになってしまいます。

ファイル更新日サイズ所有者
見積書.pdf10月1日120 KB山田
…
議事録.docx10月5日240 KB山田
…
予算.xlsx10月8日360 KB山田
…

STEP 2

ボタンを基準に、最前面に出す

メニューを Popover にして、Anchor positioning でボタンの下に置きました。最後の行の「…」を押すと、メニューは箱の外まで切れずに表示されます。

ファイル更新日サイズ所有者
見積書.pdf10月1日120 KB山田
議事録.docx10月5日240 KB山田
予算.xlsx10月8日360 KB山田

使っている機能

popovertarget
ボタンで開いた Popover は、そのボタンが自動でアンカー(基準にする要素)になる
position-area
アンカーのどちら側に置くかを決める。bottom span-left は、アンカーの下に置き、右端をそろえて左へ広げる
anchor-name / position-anchor
Popover 以外の要素を配置するときは、アンカーに名前を付け、配置する要素からその名前を指定する

CSS

/* popovertarget で開いた Popover は、開いたボタンが自動でアンカーになる */
.anchor-popover {
	/* アンカーの下に置き、右端をそろえて左へ広げる */
	position-area: bottom span-left;
	margin: 4px 0 0;
}

HTML

<button type="button" class="anchor-menu-button" popovertarget="anchor-menu-1" aria-label="操作">…</button>
<ul id="anchor-menu-1" class="anchor-menu anchor-popover" popover>
	<li><button type="button">名前を変更</button></li>
	<li><button type="button">複製</button></li>
	<li><button type="button">削除</button></li>
</ul>