Modal モーダル UI
特徴
特定のアクションが実行されるまで、ユーザーがアプリケーションの他の部分とやり取りすることを妨げるオーバーレイ OverLay UI
TODO
gif 置く
オーバーレイ OverLay UI仲間
Dialog ダイアログ UI
PopUp ポップアップ UI
Accessibility アクセシビリティ Web
role html: dialog
ユーザーにネイティブのダイアログウィンドウのように動作することを伝える
aria-labelledby
ヘッダーのタイトルに付与してモーダルの目的伝える
Keyboard support
XやESCで閉じることができる
ライブラリ調査メモ
要件
accessible
focusがいい感じに移動してくれる
モーダル触っている時、後ろがscrollしない
ライブラリ
star多いもので、良さそうなものをチェック
react-modal
Reactじゃないと使えないので調査は、あとで。
⚠️jquery-modal
focus周りが整ってないので、利用は無さそう
💯willmcpo/body-scroll-lock: Body scroll locking that just works with everything 😏
後ろrockしてくれないライブラリと一緒に使ったり、スクラッチモーダルと組み合わせたりできる。
Safariなどでも動くのが良い。
⚠️ghosh/Micromodal: ⭕ Tiny javascript library for creating accessible modal dialogs
依存無し
accessibleで良さげ→✗
focus周りで、Safariの挙動にバグあるらしい(Issues参照)
scroll周りの挙動どんなか不明
accessibleバグあるなら使う理由ないので、調査しない。
⚠️KittyGiraudel/a11y-dialog: A very lightweight and flexible accessible modal dialog script.
accessibleで良さげ
Mac Safariがクラッシュする気がする。(13)
Mac Safari のtab移動が一部おかしい。(15)
scroll周りの挙動は、body-scroll-lock利用することを推奨されている
💯dialog タグとdialog-polyfill
Google Chromeがサポートしていて安心。挙動も一番安定してる。
accessible
dialog タグ
mac Chrome 101
最初に開いた際に、フォーカス インジケーター Focus indicator表示されていないのが気になる。
Mac Safari 15 問題なし
そもそも、Safariは、Tab移動の設定オンにする必要あり。
iOS Safari 15 基本問題なし
Dialog内に、input formあると、ブラウザの挙動で画面拡大されるのがストレス。Web kit Chromeでも起きるので、Webkitの問題かな?
Android Chrome 問題なし
dialog-polyfill
Safari 13 問題なし
scroll周り
特にロック無し。body-scroll-lock利用で解決するのが良さそう
↑の組み合わせ検証
https://js-pxojf1.stackblitz.io
Js (forked) - StackBlitz
参考
iOSにおける半モーダルビューの解釈|usagimaru ⌘ Satori Maru|note
実装しながら理解するモーダルのアクセシビリティ with React