Popover

Baseline 2025HTMLの属性だけで、最前面に表示されるポップオーバーを開閉するMDN ↗

最前面に表示されます。外側のクリックや Esc キーで閉じます。

開くときも閉じるときも、フェードと拡大縮小で切り替わります。

通知を出したあとに画面のどこかを押しても、通知は閉じません。

使っている機能

popover
要素をポップオーバーにする属性。最前面に表示され、外側のクリックや Esc キーで閉じる
popovertarget
ボタンに付ける属性。押すと、指定したIDのポップオーバーを開閉する
popovertargetaction
ボタンの動作を show(開く)・hide(閉じる)・toggle(切り替え)から選ぶ
:popover-open
ポップオーバーが開いている間だけ一致する疑似クラス

CSS

/* 開いている間だけ一致する疑似クラス */
#basic-popover:popover-open {
	outline: 3px solid #3a5bd9;
}

HTML

<button type="button" popovertarget="basic-popover">Popoverを開く</button>
<div id="basic-popover" popover>
	<p>最前面に表示されます。外側のクリックや Esc キーで閉じます。</p>
	<button type="button" popovertarget="basic-popover" popovertargetaction="hide">閉じる</button>
</div>

使っている機能

@starting-style
表示された直後の状態を指定する。ここから通常の状態へ遷移するので、開くときのアニメーションになる
allow-discrete
display のように段階的に切り替わるプロパティも遷移させる。閉じるアニメーションの間、表示を残せる
overlay
閉じるアニメーションの間、最前面に残す。Chrome系のみ対応

CSS

/* 閉じているときの状態 */
#anim-popover {
	opacity: 0;
	scale: 0.9;
	/* display と overlay も遷移させ、閉じるアニメーションの間は表示を残す */
	transition:
		opacity 0.3s,
		scale 0.3s,
		display 0.3s allow-discrete,
		overlay 0.3s allow-discrete;
}

/* 開いているときの状態 */
#anim-popover:popover-open {
	opacity: 1;
	scale: 1;
}

/* 開いた直後の状態。ここから :popover-open の状態へ遷移する */
@starting-style {
	#anim-popover:popover-open {
		opacity: 0;
		scale: 0.9;
	}
}

HTML

<button type="button" popovertarget="anim-popover">アニメーション付きで開く</button>
<div id="anim-popover" popover>
	<p>開くときも閉じるときも、フェードと拡大縮小で切り替わります。</p>
	<button type="button" popovertarget="anim-popover" popovertargetaction="hide">閉じる</button>
</div>

使っている機能

popover="manual"
外側のクリックや Esc キーでは閉じない。ほかのポップオーバーを開いても閉じない
showPopover() / hidePopover()
JavaScriptからポップオーバーを開閉するメソッド

CSS

#toast-region {
	/* 標準の「画面中央」ではなく右下に表示する */
	inset: auto 16px 16px auto;
	margin: 0;
}

JavaScript

// popover="manual" は、外側のクリックや Esc では閉じない。開閉はJavaScriptで行う
if (!region.matches(':popover-open')) region.showPopover();

HTML

<div id="toast-region" popover="manual"></div>