popover - ポップオーバー

属性

<tagName popover> - ポップオーバー

サポート状況

https://caniuse.com/mdn-api_htmlelement_popover

説明

popover を指定したコンテンツをポップオーバーとして表示します。ポップオーバーは次のような動作となります。

基本的なサンプル

下記に簡単なサンプルを示します。

CSS
*:popover-open {
  padding: 1rem;
  border: 1px solid #ccc;
  box-shadow: 5px 5px 10px 0px #999;
  text-align: center;
}
*::backdrop {
  background-color: rgba(0, 0, 0, 0.3);
}
HTML
<button popovertarget="pop1">Pop</button>
<dialog id="pop1" popover>
  This is a sample dialog.
</dialog>
表示
This is a sample dialog.

popovertargetaction="toggle", "show", "hide"

popovertargetaction には "toggle", "show" または "hide" を指定することができます。何も指定しない場合は "toggle" となり、ボタンを押すたびにポップオーバーの表示と非表示をトグルします。"show" はポップオーバーを表示します。"hide" はポップオーバーを閉じます。

HTML
<button popovertarget="pop2" popovertargetaction="show">Pop</button>
<dialog id="pop2" popover>
  This is a sample dialog.<br><br>
  <button popovertarget="pop2" popovertargetaction="hide">Close</button>
</dialog>
表示
This is a sample dialog.

popover="manual"

popover 属性には "auto" または "manual" を指定することができます。何も指定しない場合は "auto" と見なされます。"manual" を指定すると下記の動作が変わります。

下記にサンプルを示します。[Pop] ボタンをもう一度押すことでポップオーバーを閉じることができます。

HTML
<button popovertarget="pop3">Pop</button>
<dialog id="pop3" popover="manual">
  This is a sample dialog.
</dialog>
表示
This is a sample dialog.

showPopover(), hidePopover()

JavaScript の showPopover(), hidePopover() でポップオーバーを制御することもできます。ダイアログを除くメインコンテンツの inert 属性を制御することで popover="manual" の場合でもポップオーバー以外のメインコンテンツを非活性化することができます。

HTML
<body>

<div id="main">
  <!-- メインコンテンツ -->
  <button id="btn-open">Pop</button>
  <!-- メインコンテンツ -->
</div>

<dialog id="pop4" popover="manual">
  This is a sample dialog.<br><br>
  <button id="btn-close">Close</button>
</dialog>

<script>
document.getElementById("btn-open").addEventListener("click", () => {
  document.getElementById("main").inert = true;
  document.getElementById("pop4").showPopover();
});
document.getElementById("btn-close").addEventListener("click", () => {
  document.getElementById("main").inert = false;
  document.getElementById("pop4").hidePopover();
});
</script>

</body>
HTML
This is a sample dialog.

リンク