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

関連記事

Webサイト制作

はじめてのShraePoint 実践的活用事例3選【業務効率化・DX】

目次1 SharePointとは?1.1 高い機密性が特長2 SharePointの活用法2.1 1.社内マニュアルや手順書を整備する2.2 2.営業資料や契約書の保管と共有に活用する2.3 3.情報の回覧やアンケート、意見収集の場として活用3 SharePointで作成したポータルサイト4 まとめ5 8bit公式 YouTube Channelのご紹介 SharePointとは? SharePointはMicrosoftが提供する情報共有サービスです。WordやExcel、 […]

Webデザイン

【Premiere Pro】動画素材の音声を自動で文字起こしする方法

Premiere Proの機能を使って、動画素材の音声を自動で文字起こししてみましょう。起こしたテキストは、発話タイミングに合わせて字幕として表示することもできます。とても簡単にできるので、ぜひ試してみてください。 目次1 自動文字起こし機能の使い方1.1 1.テキストパネルから文字起こしを行う1.2 2.文字スタイルの変更2 8bit公式 YouTube Channelのご紹介 自動文字起こし機能の使い方 1.テキストパネルから文字起こしを行う 音声データを含んだ動画をタイ […]

Webデザイン

【Photoshop】AI生成した画像を自然にレタッチする

AIで生成する画像は、素材として使うには「人工的な違和感」が残ります。 なんとなくAIと分かってしまうので、Photoshopでひと手間レタッチして自然な雰囲気に近づけてみましょう。 目次1 レタッチ前後の比較2 レタッチの大まかな手順3 レタッチ開始3.1 1.ゆがみフィルターで笑顔を自然にする3.2 2.ノイズなどのフィルターを追加3.3 3.肌を補正3.4 4.微調整4 8bit公式 YouTube Channelのご紹介 レタッチ前後の比較 今回は、Adobe Fir […]

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

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

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

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