アクセシブルな
ブラウザの
独自に
アクセシビリティーを
結果を
外部仕様と して 考える こと
外部仕様と
モーダルと 非モーダルダイアログ: 用いるべき 場合と そうでない 場合 – U-Site
モーダルと
それぞれ
ダイアログ
ダイアログ(=dialog。
dialogueともいう)とは、 2人の 人の間で 交わされる 対話の ことをさす。 ユーザーインタフェースに おける ダイアログとは、 システムと ユーザーの 間の 「対話」であり、 ユーザーへの 情報や 行動の 要求であることが 多い。 モーダル
モーダルダイアログとは、
メインコンテンツの 上に 表示される ダイアログで、 ユーザーに インタラクションを 要求する 特別な モードに システムを 移行させる ものの ことである。 この ダイアログは、 ユーザーが その モーダルダイアログに 明確に インタラクトするまで、 メインコンテンツを 無効に する。 非モーダル
非モーダル(モードレスともいう)な
ダイアログや ウィンドウは、 メインコンテンツを 無効にしない。すなわち、 ダイアログボックスが 表示されても、 ユーザーインタフェースの 機能が 変わる ことはない。
WAI-ARIA 1.2の 抜粋
Accessible Rich Internet Applications (WAI-ARIA) 1.2 日本語訳 には、
モーダルダイアログを
表示する 場合、 ユーザーが 操作できる コンテンツを モーダルに 限定する。 モーダル要素を
する 際に、 フォーカスが 明示的に 別の 場所に 設定されない 限り、 支援技術は 要素に ナビゲートすべき。 支援技術は、
モーダル要素の コンテンツへの ナビゲーションを 制限してもよい。 インターフェイスが
モーダル要素の 子孫のみを 用いて 制御する ことができる ことを 保証しなければならない。
言い換えると、 モーダルダイアログが 閉じる ボタンを 持つ 場合、 ボタンは ダイアログの 子孫と なるべきである。
モーダルウィンドウを 考える — Website Usability Info
モーダルウィンドウの
印象深い
モーダルウィンドウは、
ある ページを 開いていると いう コンテキストを 維持しつつ 付加的に コンテンツの 提示が できる 利点が ある 反面、 基本的な ユーザビリティや アクセシビリティが 欠落している ケースが 多く 見受けられます。 モーダルウィンドウの
ユーザビリティ問題で よく 見られるのが、 ブラウザの 「戻る」 ボタンを 押してしまい、 ユーザーの 予測と 異なった ページに 戻ってしまう ことです。 そもそも
モーダルウィンドウは、 ウェブサイトに おける 一般的な コンテンツ表示の 変化 (ページ遷移) とは 異なる 特殊な インタラクションなので 安易な 採用は おすすめしません
ブラウザの<wbr>「戻る」<wbr>ボタンを<wbr>押してしまい、<wbr>ユーザーの<wbr>予測と<wbr>異なった<wbr>ページに<wbr>戻る
ですが、
戻るの 動作が ライブラリに 実装されない 理由
Support native “back” buttons on mobile as “cancel” triggers. · Issue #1814 · sweetalert2/sweetalert2 に
モーダルライブラリは
サイズの 小さい ライブラリが 多く、 このような 小さな ライブラリで History APIを 使用するのは ライブラリ実装が 煩雑に なる。 定義上、
モーダルは ブラウザの 履歴に エントリを 追加しない。 モーダルは、 ページに オーバーレイする ウィンドウであり、 ユーザーの 注意を 引くようになっている。 ブラウザの 戻るで モーダルを 閉じるのは、 ブラウザの 履歴ロジックを 壊す事になる。
ただ、
よく
Google等の
検索エンジンの 検索結果画面から ユーザーが サイトに 流入する。 サイト表示直後に、
モーダルが ポップアップ表示する。だいたい 広告であることが 多い。 ポップアップの
閉じ方が わからず、 スマートフォンの ブラウザの 戻る ボタンを クリックする。 検索エンジンの
検索結果画面に 戻る。
ブラウザバックで、 Modal を 閉じる
ライブラリが
SwAl doesn’t disappear on back navigation · Issue #231 · t4t5/sweetalert
SweetAlert 使用時にブラウザバックで Modalを 閉じる 方法が 記載されています。 bootstrapの
modalを ブラウザの 「戻る」で 閉じる 方法 - Qiita
Bootstrap のモーダル を ブラウザバックで 閉じる 方法が 記載されています。
JavaScript Modal Library
sorrycc/awesome-javascript: 🐢 A collection of awesome browser-side JavaScript libraries, resources and shiny things. に
JavaScript の
SweetAlert2
Github のスター数が 多い モーダルライブラリです。 アクセシビリティ対応も されているようです。 Micromodal
SweetAlert2 と似たような モーダルライブラリですが、 こちらの 方が 機能は 少なくて、 サイズが 小さそうです。 jquery-accessible-modal-window-aria
jQuery を使った アクセシブルな モーダルの 実装です。 pluginではない 気が します。 van11y-accessible-modal-window-aria
ES2015で書かれた 薄い、 モーダルライブラリです。
作者は、jquery-accessible-modal-window-aria
と同じ人です。 a11y-dialog
アクセシビリティな モーダルダイアログの 実装例
ライブラリを
Examples
Modal Dialog Example | WAI-ARIA Authoring Practices 1.1
www.w3.org
のモーダル実装の サンプルです。 Building an Accessible Widget: WAI-ARIA Modal Alert Dialogs
jQueryのサンプル実装の demoと、 demoの 解説が 記載されています。
スライド
- アクセシブルな
モーダルダイアログの 作り方 #scripty05
何故、モーダルの 実装が 辛いのかを 説明してくれている スライドです。
- アクセシブルな
BackSpaceキーと、 ブラウザの 戻るに 反応する モーダルの サンプル
ライブラリを
各ライブラリの
Sweetalert2
Micromodal
van11y-accessible-modal-window-aria
a11y-dialog
実装内容の 補足説明
実装内容の
- Sweetalert2
- デフォルトでは
モーダルは keydownイベントを 検知しない。
Sweetaltert2は、デフォルトでは モーダル表示時に、 keydownイベントを 検知しません。
モーダル表示時に、stopKeydownPropagation: false
を設定すると keydownイベントを 検知するようになります。 function executeExample() { Swal.fire({ title : 'The Internet?', text : 'That thing is still around?', icon: 'question', stopKeydownPropagation: false }); }
- デフォルトでは
Micromodal
- モーダル表示を
判定する 関数が ない。
Mictomodalには、モーダル表示を 判定する 関数が ありません。
モーダルに特定の class名が 付与されるので、 以下のような モーダル表示判定関数を 作成しました。 MicroModal.isVisible = function() { return document.querySelector('.is-open') != null }
- モーダル表示を
van11y-accessible-modal-window-aria
- モーダル表示を
判定する 関数が ない。
van11y-accessible-modal-window-ariaにも、モーダル表示を 判定する 関数が ありません。
モーダルに特定の id名が 付与されるので、 以下のような モーダル表示判定関数を 作成しました。 function isVisible(){ return document.querySelector('#js-modal') != null }
- モーダルを
非表示に するための、 関数が ない
van11y-accessible-modal-window-ariaにはモーダルを 非表示に する 関数が ありません。
Close ボタンにidが 付与されているので、 ボタンの 要素を 取得して、 クリックするようにしました。 document.querySelector('#js-modal-close').click();
- モーダル表示を
a11y-dialog
- モーダルを
非表示に するための、 関数が ない
van11y-accessible-modal-window-ariaにも、モーダル表示を 判定する 関数が ありません。
モーダル表示、非表示を 検知する イベントリスナーが あるので、 イベントリスナーで フラグを 設定するようにしました。 var isVisible = false; var targetDialog = null; (function () { document.addEventListener('DOMContentLoaded', function () { var dialogEl1 = document.getElementById('my-accessible-dialog1'); var mainEl = document.getElementById('main'); var dialog1 = new window.A11yDialog(dialogEl1, mainEl); dialog1.on('show', function (dialogEl, event) { // 表示を検知して、フラグをtrueにする isVisible = true; targetDialog = dialog1; }); dialog1.on('hide', function (dialogEl, event) { // 非表示を検知して、フラグをfalseにする isVisible = false; }); ...
- モーダルを
実装して 思った こと
BackSpaceクリックを
戻る
ただ、
この
参考
以下、
Accessible modal window using ARIA and Vanilla Javascript - Van11y
WindowEventHandlers.onbeforeunload - Web API | MDN
戻るイベントを 拾う、 beforeunload に ついて ページの アンロードで 発動する ため、 進む イベントも 拾います。 jQuery非依存の
Vanilla JavaScriptモーダルウィンドウライブラリ Micromodal.js | Hypertext Candy
以上です。
コメント