Open7

[Scrap] Popover API を試す

へぶんへぶん
へぶんへぶん

モーダル・非モーダルでベターな制御が異なりそう

MDN にポップオーバーは、モーダル・非モーダルがあると書いてあるのが地味に勉強になった。

そのポップオーバーがモーダルなのか・非モーダルなのかで、ベターな制御が変わってくる。もちろんプロダクトやポップオーバーの使用状況によってベターな振る舞いは変わるが以下のようなもの。

  • ポップオーバー外クリックでポップオーバーを閉じるべきか否か。
    • モーダルの場合は領域外クリックで閉じるべき
    • 非モーダルの場合は条件による
  • ポップオーバーを開く元の画面でショートカットが設定されていた時、どのように振る舞うべきか
    • モーダルの場合は、開く元の画面のショートカットは無効化されているべき
    • 非モーダルの場合は、操作性を損なわないために、ポップオーバーからフォーカスが外れている時はショートカットが動作するべき
へぶんへぶん

showPopover した時だけ要素を表示する

何もしていなければ、popover を指定しても showPopover 前でも要素が表示されてしまう。

:popover-open 擬似クラスを見ればいい

showPopover した際は popover-open という擬似クラスがつくので、その有無で 要素を非表示すればいい。

#item:not(:popover-open) {
  display: none;
}

https://developer.mozilla.org/ja/docs/Web/CSS/:popover-open

へぶんへぶん

Popover API と CSS Anchor Positioning の併用は無理そう

CSS Anchor Positioning というポップオーバーを表示する際に、ある要素に対して相対的な位置に表示したyいことがありますが、今のところ併用は出来なさそうでした。あくまで現状の話で今後変わるかも知れません。
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_anchor_positioning/Using

例:ポップオーバー指定なしで Anchor Positioning を使った場合

#button {
  anchor-name: --myAnchor;
}

#item {
  position: fixed;
  position-anchor: --myAnchor;
  left: anchor(right);
}

例:Popover API と CSS Anchor Positioning と併用を試みた場合

前述と同じ CSS を指定しても、ポップオーバー要素は button の真横には表示されない。ただ中央ではなく少し右にずれた位置に表示されるので、何らかの計算が行われているのかも知れない。

#button {
  anchor-name: --myAnchor;
}

#item {
  position: fixed;
  position-anchor: --myAnchor;
  left: anchor(right);
}