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ではできないこと 4選

「これってSharePointでできないの!?」なんていう瞬間、開発やカスタマイズの現場では意外と多くあります。SharePointはとても柔軟なプラットフォームですが、実は“万能ツール”ではありません。「コードを書けば何とかなる」と思って構築を進めると、モダンページの仕様や制限に阻まれて苦い思いをすることもしばしば。今回は、実際のプロジェクトや運用の中で見えてきた「SharePointではできないこと」をまとめて紹介します。 目次1 1.CSSとJSが直接使えない1.1 ク […]

Webサイト制作

WordPress納品後にクライアントが安心して運用できる仕組みづくりをしよう

ホームページ制作において、更新機能を手軽に導入できるのがWordPressです。 専門知識がなくても記事の投稿やページ編集を行いやすい一方で、クライアントが自分で運用するには、が欠かせません。 今回は、そのための仕組みづくりについてご紹介します。 制作側の方はもちろん、クライアント側でホームページ運用を担当される方も、制作時のご相談などにぜひ参考にしてみてください。 目次1 管理画面のロゴを企業ロゴに変更する2 管理画面のURLを変更する・認証などを付けてセキュリティ面を強化 […]

Webデザイン

アプリのロゴアニメーションをAfter Effectsで作成→Lottieに変換【iOS/Android対応】

こちらは、当社でリリースしたアプリ「ピンピタ」で使用しているロゴアニメーションです。 スプラッシュ画面でロゴが動くと、ぐっとアプリらしい印象になりますし、作ってみたいですよね。 今回は、After Effects(以降AE)でロゴアニメーションを作成し、アプリに組み込むまでをご紹介します。 AEと聞くと難しい印象がありますが、PremiereやFlashなどを触った経験がある方なら、すぐに慣れます。 もう一度再生 目次1 作業フロー1.1 注意点:グラデーションが使用不可2 […]

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

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

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

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