ARIA ラベルと関係

ARIA ラベルを使用してアクセス可能な要素の説明を作成する

Alice Boxhall
Alice Boxhall
Dave Gash
Dave Gash
Meggin Kearney
Meggin Kearney

ラベル

ARIA には、要素にラベルと説明を追加するためのメカニズムがいくつか用意されています。実際、ARIA はユーザー補助ヘルプや説明テキストを追加する唯一の方法です。では、ARIA がアクセス可能なラベルの作成に使用するプロパティを見てみましょう。

aria-label

aria-label を使用すると、アクセス可能なラベルとして使用する文字列を指定できます。これは、label 要素などの他のネイティブのラベル付けメカニズムをオーバーライドします。たとえば、button にテキスト コンテンツと aria-label の両方がある場合は、aria-label 値のみが使用されます。

要素の目的を視覚的に示している(テキストの代わりにグラフィックを使用するボタンなど)が、画像のみを使用して目的を示すボタンなど、視覚的表示にアクセスできない人に対してその目的を明確にする必要がある場合に、aria-label 属性を使用できます。

aria-label を使用して画像のみのボタンを識別。

Aria のラベル付き

aria-labelledby を使用すると、DOM 内の別の要素の ID を要素のラベルとして指定できます。

aria-labelledby を使用してラジオグループを識別します。

これは label 要素を使用する場合とほぼ同じですが、重要な違いがいくつかあります。

  1. aria-labelledby は、ラベル付け可能な要素だけでなく、どの要素に対しても使用できます。
  2. label 要素はラベル付けするものを参照しますが、aria-labelledby の場合には関係が逆になります。つまり、ラベル付けされるものは、ラベル付けするものを指します。
  3. ラベル可能な要素に関連付けることができるラベル要素は 1 つだけですが、aria-labelledby は IDREF のリストを使用して、複数の要素からラベルを作成できます。ラベルは、IDREF が指定された順序で連結されます。
  4. aria-labelledby を使用すると、非表示の要素やユーザー補助ツリーに存在しない要素を参照できます。たとえば、ラベルを付ける要素の横に非表示の span を追加し、その要素を aria-labelledby で参照します。
  5. ただし、ARIA はアクセシビリティ ツリーにのみ影響するため、aria-labelledby では、label 要素を使用した場合と同様のラベルクリック動作は行われません。

重要な点として、aria-labelledby は、ある要素の他の名前ソースをすべてオーバーライドします。そのため、たとえば、要素に aria-labelledbyaria-label の両方がある場合や、aria-labelledby とネイティブ HTML label がある場合、aria-labelledby ラベルが常に優先されます。

人間関係

aria-labelledby関係属性の例です。関係属性は、DOM の関係に関係なく、ページ上の要素間にセマンティックな関係を作成します。aria-labelledby の場合、その関係は「この要素はその要素によってラベル付けされます」です。

ARIA の仕様には、8 つのリレーション属性がリストされています。このうち、aria-activedescendantaria-controlsaria-describedbyaria-labelledbyaria-owns の 6 つは、1 つ以上の要素への参照を受け取って、ページ上の要素間に新しいリンクを作成します。それぞれの場合の違いは、リンクの意味とユーザーへの表示方法です。

Aria-owns

aria-owns は、最も広く使用されている ARIA 関係の一つです。この属性を使用すると、DOM 内で分離されている要素を現在の要素の子として扱うよう支援技術に指示したり、既存の子要素を異なる順序で再配置したりできます。たとえば、ポップアップ サブメニューが親メニューの近くに視覚的に配置されているものの、表示に影響するため親の DOM 子にできない場合は、aria-owns を使用して、サブメニューを親メニューの子としてスクリーン リーダーに表示できます。

aria-own を使用してメニューとサブメニューの関係を確立。

aria-activedescendant

aria-activedescendant は関連する役割を果たします。ページのアクティブな要素がフォーカスされているのと同様に、要素のアクティブな子孫を設定することで、親が実際にフォーカスを保持しているときに要素をフォーカスされた要素としてユーザーに表示するよう支援技術に指示できます。たとえば、リストボックスで、ページのフォーカスをリストボックス コンテナにしたまま、その aria-activedescendant 属性を現在選択されているリストアイテムに更新したままにできます。これにより、現在選択されている項目がフォーカスされた項目であるかのように支援技術に表示されます。

aria-activedescendant を使用してリストボックスで関係を確立します。

Aria の記述

aria-describedby は、aria-labelledby がラベルを提供するのと同様に、アクセス可能な説明を提供します。aria-labelledby と同様に、aria-describedby は、DOM で隠されているか、支援技術のユーザーには見えないかを問わず、通常は表示されない要素を参照できます。これは、補助技術を使用しているユーザーのみを対象とするか、すべてのユーザーを対象とするかにかかわらず、ユーザーが必要とする可能性のある追加の説明テキストがある場合に便利な手法です。

一般的な例は、最小パスワード要件を説明するテキストを伴うパスワード入力フィールドです。ラベルとは異なり、この説明はユーザーに表示される場合と表示されない場合があります。ユーザーはその内容にアクセスするか、他のすべての情報の後に表示されるか、他の情報より先に表示される場合があります。たとえば、ユーザーが情報を入力すると、入力内容がエコーバックされ、要素の説明が妨げられることがあります。したがって、説明は補足的な情報ですが、必須ではない情報を伝達する優れた方法です。要素の役割などのより重要な情報の妨げになることはありません。

aria-describedby を使用してパスワード フィールドとの関係を確立。

aria-posinset と aria-setsize

残りの関係属性は少し異なり、連携して機能します。aria-posinset(「セット内の位置」)と aria-setsize(「セットのサイズ」)は、リストなど、セット内の兄弟要素間の関係を定義するものです。

DOM 内の要素ではセットのサイズを決定できない場合(遅延レンダリングを使用して DOM 内の大きなリストがすべて同時に表示されない場合など)は、aria-setsize で実際のセットサイズを指定し、aria-posinset でセット内の要素の位置を指定できます。たとえば、1,000 個の要素を含むセットで、特定の要素が DOM で最初に出現していても aria-posinset が 857 であると指定したとします。次に、ダイナミック HTML の手法を使用して、ユーザーがオンデマンドで全リストを閲覧できるようにします。

aria-posinset と aria-setsize を使用してリスト内の関係を確立します。