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を触るのが好きです。よろしくお願いします。

関連記事

WordPress

アンケートフォームをホームページに設置できるWordPressプラグインの活用事例4選

WordPressでアンケートフォームを作成したい!けれどきちんと日本語対応しているプラグインが見つからない…と思ったことはありませんか? 弊社でリリースをしたフォーム作成作成プラグイン「Easy Form Maker」であれば、完全日本語対応で、通常のお問い合わせフォームだけでなく、アンケートフォームの作成を行うことができます。 今回は、実際にどんなアンケートフォームが作成できるかご紹介します。 目次1 Easy Form Makerって?2 イベントなどのフィードバックア […]

WordPress

カレンダーをホームページに表示できるWordPressプラグインの活用事例4選

イベントのお知らせをカレンダー形式で掲載したいけれど、なかなかWordPressの日本語プラグインでピッタリなものが見つからない…と思ったことはありませんか? 弊社でリリースをしたWordPressのイベントカレンダープラグイン「Event Calendar Maker」であれば、完全日本語対応で、ホームページ上に簡単にイベントカレンダーを掲載することができます。 今回は、実際にどんなシーンでこのカレンダーが活用できるのかをご紹介します! 目次1 Event Calendar […]

スマホアプリ

高齢者を見守るアプリ「みまもりシルバー」をリリースしました!

高齢のご家族が外出中、いつもと違う時間に帰ってこないと、ちょっとした不安が頭をよぎることはありませんか? 「道に迷っていないかな」「転んでいないかな」…心配事はなかなか尽きないですよね。 そんな心配をすぐに解消できるGPS見守りアプリ「みまもりシルバー」をリリースしました。 メールアドレスなどによる会員登録やサービス契約は不要!基本無料で、かんたんに使うことができます。 この記事では、アプリの魅力や使い方を詳しくご紹介します。 目次1 みまもりシルバーはなにができるの?1.1 […]

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

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

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

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