Dialog と Popover #8
Intro
ここまで解説した仕様を踏まえ、いくつかの代表的なユースケースの実装について考えていく。
あくまで仕様の組み合わせ方についての解説であり、実装そのものの推奨ではない。
また、ここで紹介する仕様はまだ変更の可能性があり、かつ実装も揃っていないものがある点に注意
Cookie バナー
次は、「Cookie 利用への同意」、いわゆる Cookie バナーの UI について考えてみる。想定するのは以下のようなものだ。
前回の規約への同意と異なり、このバナーは画面表示時から右下に表示され、同意か拒否を選択するまで表示し続ける。つまり、表示中は他の操作をブロックしたりはしない。
つまり Dialog ではあるが Modal ではないため、 HTML の注意点は、前回の規約と大きくは変わらない。
まず、最初から表示しておくために コントローラとしてはボタンが 2 つあり、ここに value を設定しておく。
次に CSS を考える。( まず、配置としては画面の右下に固定配置するため、 アニメーションは規約と異なり、初期表示はアニメーションなしで、閉じる時だけアニメーションを行う実装にする。
表示する場合は 最後は JS だ。
同意の取得時にそのまま form を submit し、結果は この値で Cookie の利用を分岐すれば良さそうだ。
show()
する前提で実装を考えていく。
HTML
open
属性を付与しておく。
<dialog open>
</dialog>
<form method="dialog">
<button type="submit" value="reject">拒否する</button>
<button type="submit" value="accept">同意する</button>
</form>
CSS
<dialog>
と関係ない部分は省略)
position: absolute
で配置する。
dialog {
position: absolute;
top: auto;
right: 1%;
bottom: 1%;
left: auto;
}
/* transition style */
dialog:not([open]) {
opacity: 0;
transition:
display var(--duration) allow-discrete,
overlay var(--duration) allow-discrete,
opacity var(--duration);
}
display: none
からのトランジションになり、@starting-style
が必要だが、今回は消すだけなので不要だ。
JS
<button value>
の値として、"close"
イベントのなかで取得できる。
document.querySelector("dialog").addEventListener("close", (e) => {
const returnValue = e.target.returnValue
if (returnValue === "reject") {
}
if (returnValue === "accept") {
}
})
DEMO
動作する DEMO を以下に用意した。
- Term Dialog DEMO | labs.jxck.io