Web制作、Webサービスに関する技術やノウハウを発信するコラムサイト

WEBサイトのアクセシビリティ対応をしてみよう!【ダイアログ(モーダルウィンドウ)編】

  • このエントリーをはてなブックマークに追加

以前公開した WEBサイトのアクセシビリティ対応では、全体的な考え方について触れました。

今回はその中でも利用頻度の高いダイアログ(モーダルウィンドウ)に焦点を当てて解説します。

ダイアログは、入力フォームの送信確認や画像の拡大表示など、Webサイトでよく利用される便利な仕組みです。
しかし、アクセシビリティ対応が不十分なまま実装されるケースも少なくありません
特にキーボードだけで操作するユーザーや、スクリーンリーダーを利用するユーザーにとっては、誤ったダイアログの実装が操作不能や情報取得の妨げにつながることもあります。

この記事では、アクセシビリティ対応をしたダイアログ(モーダルウィンドウ)の実装ポイントを紹介していきます。

外側の要素のHTMLを書いていこう

まずはコンテンツや、ダイアログを開くトリガーになるボタンを設置しましょう。


ポイント

『aria-haspopup=”dialog”』をつける

aria-haspopup=”dialog”』をbuttonにつけます。
こうすることでこのボタンはダイアログ(モーダル)を開くものだと支援技術に伝えることができます。

『aria-controls=””』をつける

どの要素を開くか(対応するダイアログのID)を示します。
今回の場合はモダールの要素に『id=”sampleModal”』と記述して、『aria-controls=”sampleModal”』で関連付けをしました。


ダイアログ本体のHTMLを書いていこう

次にダイアログ本体のHTMLを書いていきましょう。


ポイント

『role=”dialog”』をつける

ダイアログになるdivに対して『role=”dialog”』を付けましょう。
これで支援技術などに「オーバーレイを使用して、ページコンテンツの上に表示されるようなダイアログやモーダルウィンドウ」、と認識してくれます。

『aria-modal=”true”』を付ける

aria-modal=”true”』を付けましょう。
先ほどの「role=”dialog”」と何が違うの?と思うかもしれませんが、こちらでは背景の扱いについて指定をします。
このダイアログが開いている間、背景は無効(操作不可)で、現在の操作対象はダイアログだけ」ということを伝えてくれます。

『aria-labelledby=””』を付ける

こちらはタイトル要素とダイアログ全体を関連づけるために使用します。
ダイアログのタイトル要素と、ダイアログ全体を関連付けることで、スクリーンリーダーがダイアログの内容を正しく認識できます。
タイトル要素にはidを付与し、そのidをダイアログのaria-labelledbyに指定します。
今回の場合はモダールの中のタイトル要素に『id=”dialogTitle”』と記述して、『aria-labelledby=”dialogTitle”』で関連付けをしました。

『aria-describedby=””』を付ける

先ほどのaria-labelledbyと似ていますが、こちらは具体的な説明をスクリーンリーダーに読ませるために使います。
説明部分にidを付与し、そのidをダイアログの aria-describedbyに指定します。
今回は『id=”dialogDesc”』と記述して、『aria-describedby=”dialogDesc”』で関連付けをしました。

閉じるボタンをbutton要素で置き、必要に応じてaria-labelを付ける

tabキーなどでのフォーカスでの制御をしやすくするために、閉じるボタンをbutton要素で置きます。
また、『×』のように記号のみでボタンの挙動を表している場合は、スクリーンリーダーにどのような動きをするボタンか読ませるためにaria-label』でボタンの説明を加えましょう。
『閉じる』とテキストで元から書いてある場合は不要です。

hiddenをつける

最初からダイアログを隠すためにhiddenをつけます。
ここについてはJavaScriptやCSSで後程細かい設定をします。


JavaScriptを書いていこう

次にアクセシビリティ対応をしたJavaScriptを記述していきます。


ポイント

初期非表示の設定をする

ページ読み込み時にモーダルが見えないよう、hidden属性を使って非表示にしておきます。

背景を無効化する

モーダルを開いたら背景コンテンツ(今回だと#pageContent部分)に inertを付与して、誤操作や不要なフォーカス移動を防ぎます。

Escキー対応を行う

モーダルは閉じるボタンだけでなく、Escキーでも閉じられるようにするとユーザーが迷いません。

フォーカストラップを行う

フォーカストラップとは、Webサイトをキーボードで操作する際に、フォーカスをとある領域からはみ出さないようにすることです。
Tabキー操作でフォーカスがモーダル外に逃げないよう制御し、操作対象をモーダル内に限定します。

フォーカスの返却をする

モーダルを閉じたら、開いたときのボタン(今回だと「画像を拡大」ボタン)にフォーカスを戻し、操作の流れを途切れさせないようにします。


CSSを書いていこう

CSSについては、特にこれといったアクセシビリティ対応に関係するものはありません。
普通にダイアログの表示用に記述をしていきましょう。



完成!

これで無事完成しました!

See the Pen
ダイアログ(モーダルウィンドウ)のアクセシビリティ対応
by kkdd (@kk8kk)
on CodePen.


大きな画面はこちら

正直パッと見た感じはわかりにくいとは思うのですが、開発者モードで見るとスクリーンリーダー用の切り替えがされていたり、キーボードのみで操作ができるような配慮がされています。


まとめ

長すぎてよくわからない、という方もいると思うので要点をまとめました。
とりあえず上のコードをコピーしたうえで設定をしてみるといろいろわかってくるかなと思います。

  • 適切な役割付与をする
    role=”dialog” と aria-modal=”true”などでダイアログであることを明示します。

  • タイトルと説明を加える
    aria-labelledbyとaria-describedbyで内容を正しく伝えましょう。

  • 初期非表示の設定をする
    hidden属性などでページロード時に表示されないようにしましょう。

  • 背景の操作無効化をする
    ダイアログ表示中は背景にinertを付けるなどして、誤操作を防止しましょう。

  • フォーカス管理をする
    ダイアログ内にフォーカスを制限(フォーカストラップ)、閉じたら元の要素に戻しましょう。

  • 閉じるボタンの工夫をする
    閉じるボタンについてはクリックまたはEscキーで閉じられるようにしましょう。


執筆者:工藤 [ WEBデザイナー ]

WEBデザイナー。 最近はWordPressを触るのが好きです。よろしくお願いします。

関連記事

マークアップ

SharePoint クラシックUIの通知機能をPower Automateで再現する

SharePoint サイトをモダンUIへ移行すると、よく耳にするのが「クラシックUIにあった通知機能を使いたい」という声です。しかし、モダンUIにはクラシック時代のような「標準の通知機能」が用意されていません。 そこで活躍するのが「Power Automate」です。クラシック通知の代わりとして、リストの変更を自動で検知し、メールで知らせる仕組みを簡単に構築できます。 本記事では、クラシックUIの通知に近い形で、Power Automate を使ったメール通知フローを作成す […]

Webサイト制作

制作会社が考える、WordPressとオリジナルCMSの選定ポイント

弊社では「WordPress」を使った制作と、弊社のオリジナルCMSツール「ProG(プログ)」を使った制作の、いずれについても多くのご相談をいただいています。 それぞれにメリットがある一方で、運用時に気を付けるべき点もあり、サイトの目的や運用方法によって向き・不向きがあります。 この記事ではそれぞれの特徴を整理しながら、WordPressとオリジナルCMSを併用できるケースについてもご紹介します! 目次1 WordPressを使用するメリット1.1 多機能で自由度が高い1. […]

WordPress

本当に使う機能だけを残した、シンプルなWordPressのSEOプラグインを作成しました

WordPressでSEO周りの設定が簡単にできる、SEOプラグイン。 SEO対策には便利ですが、設定項目が多すぎて「どこを触ればいいのか分からない」と感じることはないでしょうか? そこで今回、社内の案件用にシンプルなSEOプラグインを作成してみました。 『最低限の設定のみでシンプルに』というのが今回のテーマです。 今回の記事では「どんな考え方で設計したのか」といった、制作背景などを紹介していきます。 ※本記事ではコードの全公開やダウンロードは行いません 追記:無事リリースで […]

株式会社8bit (エイトビット)

東京都目黒区でWebサイト制作、Webシステム開発などを行っております。
コーポレートサイトやWebサービスの企画・提案を得意としており、自社での経験を元にアイデアをカタチにするお手伝いをさせていただいております。

Web制作に関するご相談はお気軽にどうぞ

弊社に制作をご依頼いただく際の費用感をご確認いただける、
見積りシミュレーションをご用意いたしました。