今回の聖櫃
今回ご紹介する古代WEB魔法は、三種の神器『 Dialog API 』。
- 三つの魔道体系が互いに作用することで顕現するモーダルUIやあ、古代WEB魔法の紹介も今回で4回目だ。
もううんざりかもしれないけど、今回もまた、私ジェミパラが解説&講義を続ける。
え?次の講義が楽しみで待ち遠しかったって?な、なんだい、ずいぶん嬉しいこと言ってくれるじゃないか え、ホントに最近の子はほんと、もう調子が狂っちゃうよ、はは。
ていうか、こ、講義を続けるよ!おほん!
さて、古代WEB魔法Dialog APIだが、APIと呼ばれるだけあって、これは単体ではなく、複合的に作用しあう術式なんだ。 - 概要通常、WEB魔法でモーダルウィンドウ魔法陣を作ろうとすれば、門を召喚、背景をカバー、外側クリック禁止、センター配置、閉じるボタン、その他アクセシビリティの管理……などの術式を自前で錬成し、なかなか大がかりな作業が必要になる。
ところがすでに古代魔法に、この複雑な処理を実行する術式API【API】
ブラウザにあらかじめ実装する、プログラムを動かすための関数や決まりごと。が存在していた事が分かったんだ。
そしてこの古代魔法の解析を進めると、三つの言語・術式の高次元錬成で異次元の門を召喚するという、まったく革新的な術式が見えてきたんだ。
- 古代魔法に存在したWEB APIこのDialog API WEB魔法は、術式単体で処理するわけじゃないんだ。
三つの術式---
1.HTMLエレメンツで構造を定義し、
2.CSS神聖魔法で幻影と障壁を操り、
3.珈琲魔道術式【珈琲魔道術式】
こちらの世界のJavaScriptで召喚の儀式を行う。
このように三つの魔道体系を高次元で錬成させることで、単なる「表示・非表示」を超えた、アクセシブルなモーダルUI(異界への門)を召喚できるんだ。 - 単純な異界の門を召喚するだけじゃないしかも面白い点は、単に「アクセシブルなモーダルUIを表示できるようになった」だけじゃないんだ。
ちょっと見てごらん。これがdialog要素のコード
<dialog>
<h2>古代WEB魔法</h2>
<p>dialog APIが召喚されました。</p>
</dialog>
一見するとただのHTMLだよね。だけど
dialog要素をJavaScriptから、dialog.showModal();と召喚すると、ただ表示されるだけじゃなくて。
dialogは最上位レイヤー(top layer)へ移動し、背後の文書は自動的に操作不能になってしまう。さらに、その背後にはCSSの`::backdrop`という特殊な領域まで出現する。スクリーンで覆い隠すわけだ。
つまりDialog APIは3っつの魔法言語体系を高次元で錬成することで、
1. モーダル化
2. フォーカス管理
3. 背景コンテンツの操作制限
4. 最上位レイヤーへの配置
5. ::backdrop
6. Escによる終了
7. フォームとの連携
8. スクリーンリーダーなどのアクセシビリティ
など、従来JavaScriptライブラリなどで多層的に個々で実現していた機能をたったひとつの術式で実現可能にしてしまうんだ。 - Dialog API策定の歴史Dialog API、三つの術式を練り合わせるって考え方が非常に新しく感じるね。
だけど仕様そのものは非常に古いんだ、古代WEB魔法といわれる所以だな。
W3CのHTML 5.2では、すでにdialog要素とHTMLDialogElementが仕様として定義されていた。
時期は2017年12月14日。この時すでにW3C Recommendationとなっている。
つまり、10年近く前に定義されていたわけだ。
それどころか、
dialog.show();
dialog.showModal();
dialog.close();
というjavascriptによる基本的なAPIまで定義されていた。
しかし、考え方が先進すぎたためか主要ブラウザ魔法具での対応が揃うまでには時間がかかった。
特に最後まで対応しなかったのが林檎魔導院のSafarium【林檎魔導院のSafarium】
こちらの世界のAppleが開発するブラウザ:
Safariのこと。以後、safariと省略。。
2022年3月のSafari 15.4でdialog apiをようやく実装した。
これでWeb制作の現場で広く普及するようになった。
超古代より存在のみが語り継がれていた召喚魔法がようやく形になったんだ。
モーダルで異次元の門を召喚するシンプルなデモ:https://labo.studio-happyvalley.com/backdrop-dialog-popover/dialog/