理解可能

この記事では、ウェブコンテンツ・アクセシビリティガイドライン(WCAG)2.0 および 2.1 の理解可能原則に概説されている達成基準に準拠するようにウェブコンテンツを作成する方法について実用的なアドバイスを提供します。 理解可能とは、情報とユーザーインターフェイスの操作が理解可能でなければならないと述べています。

メモ: 理解可能の W3C の定義とそのガイドラインおよび達成基準を読むには、原則 3: 理解可能 — 情報とユーザーインターフェイスの操作が理解可能でなければならない(英語)を参照してください。

ガイドライン 3.1 — 読みやすさ: テキストコンテンツを読みやすく理解しやすいものにする

このガイドラインは、テキストコンテンツをできるだけわかりやすくすることに焦点を当てています。

達成基準 基準への準拠方法 実用的なリソース
3.1.1 ページの言語 (A) 各ウェブページのデフォルトの人間の言語はコードで検出できるべきです。 これは、読者が自分に合った言語で書かれたページにアクセスしたことを確認するなどの目的に不可欠です。 これを実現する最も簡単な方法は、ページの <html> 要素に lang 属性を設定して、ページが書かれている言語を最もよく表す言語コードをそれに与えることです。 文書の第一言語の設定を参照してください。
3.1.2 パーツの言語 (AA) ページのコンテンツに第一言語とは異なる言語の単語や語句が含まれている場合は、問題の用語を囲む要素(例えば、意味論の要素が利用できない場合は <span>)に lang 属性を使用して適切な言語を設定します。言語に関係なく同じである単語や語句に異なる言語を設定する必要はありません(例えば、固有名詞、特定の言語の一部ではない専門用語など)。
3.1.3 珍しい単語 (AAA) 専門用語、業界用語、または慣用句やスラングが使用されている場合は、そのような語句や単語に対して定義を提供するべきです。 サイトでは、そのような言葉や用語の定義を含む用語集を、それらが現れたときにリンクできるように提供するか、少なくとも周囲のテキストやページ下部の説明リストのどこかに定義を提供するべきです。
3.1.4 略語 (AAA) 略語が使用されている場合は、それらの展開や、必要に応じて定義を提供するべきです。<abbr> 要素は、略語の展開を提供するための推奨される方法と考えられています — 展開を含む title 属性を取り、略語をマウスオーバーしたとき、これが表示されます。 ただし、title の内容はキーボードからはアクセスできず、スクリーンリーダーによって確実に読み上げられるわけでもありません。 これを扱うためのより良い方法は、この場合も先と同様に略語の展開と説明を含む用語集のページへのリンクを提供するか、少なくともコンテキスト内の周囲のテキストにそれらを含めることです。 略語を参照してください。
3.1.5 読解力 (AAA) 前期中等教育レベル(通常 11〜14 歳前後の子供)より高い読解力を必要とするテキストが提供される場合は、それを読むことができない人々を支援する補足説明資料を提供するか、あるいは前期中等教育レベルで書かれた代替バージョンを提供します。これは、全ての主題が全ての人に理解されるべきであるという意味ではありませんが、書くスタイルは全ての人にアクセス可能であるべきです。 そうしない正当な理由や(例えば、詩的効果のための代替的なスタイル)、厳密なスタイルで記述する必要(例えば、W3C の仕様)がない限り、プログラミングチュートリアルのような技術文書でさえも、全てのコンテンツを前期中等教育レベルで書くことをお勧めします。
3.1.6 発音 (AAA) コンテンツを完全に理解するために必要な単語の発音へのアクセスをユーザーに与えるためのメカニズムを提供するべきです。HTML5 の <audio> 要素を使用して、正しい発音を含む音声ファイルを読者が再生できるようにするコントロールを作成できます。 そして、辞書のエントリーと同じように難しい言葉の後にテキストの発音ガイドを含めるのも理にかなっています。 動画と音声のコンテンツ、および英語辞書の発音ガイド(英語)を参照してください。

ガイドライン 3.2 — 予測可能: ウェブページを予測可能な方法で表示して操作させる

このガイドラインは、ユーザーインターフェイスを直感的でわかりやすくすることに焦点を当てています。

達成基準 基準への準拠方法 実用的なリソース
3.2.1 フォーカス時 (A) コントロールや他のページ機能がフォーカスを受けたときに、ユーザーが混乱したり迷ったりするような方法でコンテキストを変更するべきではありません。これは賢明なデザインの問題です — 人々はインターフェイスによって驚かされることを望みません。 彼らは物事が直感的で期待通りに振る舞うことを望みます。 例えば、ナビゲーションメニューのオプションにフォーカスを置いても、表示されたページは変わりません — 表示が変わる前にアクティブにする必要があります。 GlobalEventHandlers.onfocus には、役に立つ情報がいくつか含まれています。 役に立つ実装のアイデアについては、キーボードアクセシビリティを呼び戻すように盛り込むを参照してください。
3.2.2 入力時 (A) データがコントロールに入力されたとき、または設定が変更されたときに、コンテキストが予期せずに変更されるべきではありません。 差し迫った変更が発生する前に、ユーザーに警告や通知をする必要があります。繰り返しますが、賢明なデザインを実装するべきです。 例えば、ボタンを押してアプリケーションが現在のビューを終了すると、ユーザーは必要に応じて作業内容を保存するかなど、この操作の確認を求められるべきです。 GlobalEventHandlers.oninput はここで役に立ちます。
3.2.3 一貫したナビゲーション (AA) ナビゲーションのメニューやコントロールのスタイルと配置は、ウェブページの異なるページやビューの間で一貫しているべきで、例えば、新しい項目が追加されたとしても、既存の項目は同じ順序で現れるべきです。 ユーザーが変更を始めた場合、例えば、ナビゲーションのために異なる配色や位置を選択すると、それらの選択は全てのページにわたって尊重されるべきです。繰り返しますが、賢明なデザイン — 全てのページやビューでナビゲーションコントロールを同じにします。 モダンなレイアウトのマークアップについては、ページレイアウトを参照してください。 便利なアクセス可能なナビゲーションメニューの例については、ボタンとしてのリンクのスタイリングも参照してください。
3.2.4 一貫した識別 (AA) 同じ機能を持つコントロールやコンポーネントは、異なるページやビューでも同じように識別されるべきです。 例えば、世界旅行サイトの全てのページに表示される通貨換算機は、意味論的にもラベルの観点からもまったく同じであるべきです。繰り返しますが、賢明なデザイン! 「ラベル」とは、テキストコンテンツ内の説明的な情報、または HTML フォームのラベルのことです。 詳細については、意味の通るテキストラベルを参照してください。
3.2.5 要求に応じた変更 (AAA) ユーザーを混乱させたり、迷わせたりする可能性があるコンテキストの変更は、ユーザーから要求された場合にのみ行われるべきか、あるいは、ユーザーはそれらをオフにできるべきです。現在のビュー(例えば、コンテンツやコントロール)を大幅に変更するものが必要な場合は、変更をいつ実行するかをユーザーに制御させます(例えば、どのページを表示するか、いつギャラリーの次の写真に進むか...)。ページに回転木馬のようなものが必要な場合は、自動的に進まないようにするオプションを提供します。 可能であれば、そのような機能を避ける方が良いでしょう。

メモ: ガイドライン 3.2: 予測可能: ウェブページを予測可能な方法で表示して操作させる(英語)に関する WCAG の説明も参照してください。

ガイドライン 3.3 — 入力支援: ユーザーが間違いを避けて修正できるようにする

このガイドラインは、必要なときにユーザーが正しい情報を間違いを最小限にとどめて入力できるように手助けすることを中心にしています。

達成基準 基準への準拠方法 実用的なリソース
3.3.1 エラーの識別 (A)

ユーザーがフォームに入力したりオプションを選択したりするときに検出したエラーは、エラーに関連するフォームコントロールと共に、ユーザーに明確に報告するべきです。

状況に最適なものであれば、HTML5 フォームの検証機能や JavaScript を使用して、クライアント側のエラー検出と処理を実装することをお勧めします。 エラーを検出したら、ユーザーが入力を修正するのを助けるために、直観的なエラーメッセージをフォーム入力の横に表示するべきです。 スクリーンリーダーのユーザーの場合は、ARIA のライブリージョンを使用して、ページ上の変更についてユーザーに警告することができます。

サーバー側の検証は、クライアント側の検証と同時に常に使用するべきです。 クライアント側の検証は、無効にしたり回避したりするのが簡単すぎるため、単独では信頼できません。

包括的な検証情報についてはフォームデータの検証を、ライブリージョンに関する情報については WAI-ARIA: 動的コンテンツの更新を参照してください。
3.3.2 ラベルや指示 (A)

データ入力が必要な場合は、明確な指示を提供するべきです。 単純な指示やプロンプトが必要な場合は、名前や年齢のような単一入力には <label> 要素を使用したり、(生年月日や住所の要素のような)複数を一緒にした入力には <label><fieldset> / <legend> を組み合わせて使用できます。

より複雑な説明が必要な場合は、常に説明段落を含めることも、フォームをより直感的にすることを試みる必要があるかもしれません。

意味の通るテキストラベルと便利な例については HTML フォームの作成方法を参照してください。
3.3.3 エラーに対する提案 (AA)

エラーが検出され、修正の提案が判明したら、セキュリティ上の問題(例えば、パスワード入力時)やコンテキスト上の問題(例えば、クイズアプリでの回答時)が発生しない限り、ユーザーにこれらの情報を提供してください(例えば、ユーザーが既に選らんだことがあるユーザー名についての選択肢の提案)。

このような場合、これが適切であれば、おそらく JavaScript とサーバー側の機能の組み合わせを使用して、エントリーが正しいかどうかを確認し、正しくない場合は、ユーザーに実行可能な提案を提示できます。 そのような提案は、エラーメッセージのようなコンテキストの中で有用に表示されるべきです(3.3.1 を参照)。

まだチュートリアルの提案はありません。
3.3.4 エラー防止(法務、財務、データ) (AA)

機密データの入力に関わるフォーム(法的契約、電子商取引、個人データなど)の場合は、少なくとも次のいずれかに該当するべきです。

  • 提出は可逆的です。
  • データにエラーがないかチェックされ、ユーザーにはエラーを修正する機会が与えられます。
  • 最終提出の前に情報を確認し修正するためのメカニズムが利用可能です。

可逆的 — データを入力できるビューには、必要に応じてエントリーを編集または削除することもできる同等のビューを提供します(例えば、Django ウェブフレームワークを参照)。

データのチェック — 3.3.1 で説明したように、クライアント側とサーバー側の検証を組み合わせてエラーを検出し、入力を修正できるようにユーザーに役立つメッセージを表示するべきです。

確認と修正 — 必要に応じて、(製品の購入のような)一連のフォームフィールドに入力するタスクを実行した後、ユーザーに確認画面を表示して入力内容を見直し、正しくないものは修正できるようにするべきです。 このパターンは、Amazon のような電子商取引サイトで一般的に使用されています。

3.3.5 状況依存ヘルプが利用可能 (AAA) フォームの完成と提出を助けるために、コンテキストの中で指示と他の適切な合図を提供してください。 これは実際には単に 3.3.1 や他の同様の基準に基づいていますが、もっと徹底的なコンテキスト上のヘルプ情報とサービスを必要とします。 例えば、各ページのヘルプページまたはサービスへの専用リンクを提供し、正常に完了したらどのように見えるか示す例を提供します。
3.3.6 エラー防止(全て) (AAA) この原則は 3.3.4 に基づいており、機密データを含むものだけでなく、全てのユーザー入力状況に要件を拡張しています。 繰り返しますが、3.3.4 を参照してください。

メモ: ガイドライン 3.3: 入力支援: ユーザーが間違いを避けて修正できるようにする(英語)に関する WCAG の説明も参照してください。

関連情報