このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

ARIA: tree ロール

tree は、ユーザーが階層的に整理されたコレクションから 1 つ以上のアイテムを選択できるウィジェットです。

説明

tree ウィジェットは、展開および折りたたみ可能な親ノードと子ノードを持つ階層リストです。階層内の任意のアイテムは、role="treeitem" で設定された子ツリーアイテムを持つことができます。子を持つツリーアイテムは展開または折りたたみできて、その子を表示または非表示にします。

tree の例は、ファイルシステム選択ユーザーインターフェイスです。フォルダーとファイルを表示するツリービューです。フォルダーアイテムは展開してフォルダーのコンテンツ(ファイル、フォルダー、またはその両方)を表示し、折りたたんでそのコンテンツを隠すことができます。

ARIA ツリービューは、Tab ではなく主にキーボードの矢印キーでナビゲートされます。この形式のナビゲーションは、ほとんどのブラウザーコンテンツでは一般的ではありませんが、ネイティブアプリケーションでは普通で期待されるものです。このため、ツリービューを作成する前に、必要な機能に対処する代替オプションを検討してください。

警告: ツリービューは、ウェブアプリケーションよりもネイティブアプリケーションに似たナビゲーションを使用します。このため、ツリービューを作成する前に、必要な機能に対処する代替オプションを検討してください。

単一選択および複数選択のツリー

ツリーは「単一選択」にして、ユーザーがアクションのために 1 つのアイテムのみを選択できるようにしたり、「複数選択」にして、ユーザーがアクションのために複数のアイテムを選択できるようにしたりできます。複数選択ツリーでは、treearia-multiselectable が true に設定されています。それ以外の場合、aria-multiselectablefalse に設定されているか、デフォルト値の false が暗示されます。どちらの場合でも、キーボードアクセシブルにするために、すべてのツリーの子孫に対してフォーカスを管理する必要があります。

単一選択ツリーの一部の実装では、フォーカスされたアイテムが選択状態も持ちます。これは「選択がフォーカスに従う」として知られています。単一選択ツリーがフォーカスを受け取る際、ツリーがフォーカスを受け取る前にツリーアイテムが選択されていない場合、フォーカスは最初のノードに設定されます。ツリーがフォーカスを受け取る前にツリーアイテムが選択されている場合、フォーカスは選択されたツリーアイテムに設定されます。単一選択ツリーでは、選択されたツリーアイテムに aria-selectedtrue に設定され、ツリー内の他のツリーアイテムには存在しません。

複数選択ツリーでは、選択されたすべてのツリーアイテムに aria-selected="true" が設定され、選択可能だが現在選択されていないすべてのツリーアイテムノードに aria-selected="false" が設定されています。選択できないツリーアイテムには aria-selected 属性を含めないでください。

複数選択ツリーがフォーカスを受け取る際、ツリーがフォーカスを受け取る前にツリーアイテムが選択されていない場合、フォーカスは最初のツリーアイテムに設定されます。ツリーがフォーカスを受け取る前に 1 つ以上のツリーアイテムが選択されている場合、フォーカスは最初に選択されたノードに設定されます。

複数選択ツリーでは、選択状態は常にフォーカスとは独立しています。例えば、典型的なファイルシステムナビゲーターでは、ユーザーはフォーカスを移動して、コピーや移動などのアクションのために任意の数のファイルを選択できます。視覚的なデザインでは、どのアイテムが選択されているか、どのアイテムがフォーカスを持っているかを明確にする必要があります。

ツリー階層

ツリービューでは、tree ノードがルートノードです。子、孫、およびさらなる子孫 treeitem ノードを持つことができます。

ツリーノードとして機能する各要素は、ルートツリーノード(tree のロールを持つ)を除いて、treeitem ロールを持ちます。tree は親 tree ノードを持ちません - それはルートノードです。ノードがツリーにネストされており、かつ子孫ツリーアイテムを持つ場合、それは treeitem ロールと aria-expanded 属性を持ちます。ノードが閉じた状態の場合は aria-expanded="false" が設定され、ノードが開いた状態の場合は aria-expanded="true" が設定されます。

treeitem ノードは、tree ルートノードの直接の子にしたり、treeitem ノード内にネストしたり、または group 要素内にオプションでネストしたりできます。tree 内にネストされた group は、treeitem 要素の展開可能なコレクションです。

終端ノード(ツリーアイテムの子を持たないもの)には aria-expanded を含めないでください。支援技術に対してノードが親ノードであると誤って説明することになるためです。

DOM 配置と存在

すべてのツリーアイテムは、tree ロールを持つ要素に含まれているか、またはそれによって所有されています。マークアップで tree の直接の子孫でないツリーアイテムがある場合は、コンテナーの DOM の子でない要素を含めるために、所有するツリーコンテナーに aria-owns を含めてください。これらの子でない所有要素は、参照される順序で読み取り順序に表示され、DOM の子であるツリーアイテムの後に表示されます。フォーカスを管理するスクリプトは、視覚的なフォーカス順序がこの支援技術の読み取り順序と一致することを確認する必要があります。

ユーザーがツリー内でフォーカスを移動したりツリーをスクロールしたりする際の動的読み込みのために、利用可能なノードの完全なセットが DOM に存在しない場合、各ノードには aria-levelaria-setsize 、および aria-posinset が指定されています。

アクセシブル名

tree にはアクセシブル名を提供する必要があります。aria-labelledby で参照される可視ラベルを参照するか、aria-label でラベルを指定してください。

メニューの方向

tree ロールを持つ要素は、暗黙的な aria-orientation 値として vertical を持ちます。ツリー要素が水平方向の場合は、aria-orientation="horizontal" を含めてください。

関連する WAI-ARIA ロール、状態、プロパティ

role="treeitem"

ツリー内のアイテムです。

role="group"

ツリーアイテムの展開可能なコレクションです。

aria-labelledby

可視ラベルが存在する場合に必要なアクセシブル名を提供して、tree にラベルを付ける要素を識別します。それ以外の場合は aria-label を使用してください。

aria-label

可視ラベルが存在しない場合に tree にラベルを付ける文字列値を定義します。

aria-orientation

ツリーの方向が水平か垂直かを示します。省略した場合のデフォルトは vertical です。

aria-multiselectable

true に設定した場合、ユーザーがツリーの現在選択可能な子孫から複数のツリーアイテムを選択できることを示します。

キーボードインタラクション

デフォルトの向きである垂直方向の tree の場合:

  • フォーカスが閉じたノードにある場合、ノードを開きます。フォーカスは移動しません。
  • フォーカスが開いたノードにある場合、フォーカスを最初の子ノードに移動します。
  • フォーカスが終端ノード(子を持たないツリーアイテム)にある場合、何もしません。
  • フォーカスが開いたノードにある場合、ノードを閉じます。
  • フォーカスが終端ノードまたは閉じたノードでもある子ノードにある場合、フォーカスをその親ノードに移動します。
  • フォーカスが閉じたツリーにある場合、何もしません。
ノードを開いたり閉じたりすることなく、フォーカス可能な次のノードにフォーカスを移動します。
ノードを開いたり閉じたりすることなく、フォーカス可能な前のノードにフォーカスを移動します。
Home ノードを開いたり閉じたりすることなく、ツリーの最初のノードにフォーカスを移動します。
End ノードを開くことなく、ツリーのフォーカス可能な最後のノードにフォーカスを移動します。
Enter 現在フォーカスされているノードのデフォルトアクションを実行します。親ノードの場合、ノードを開いたり閉じたりします。単一選択ツリーで、ノードに子がない場合、まだ選択されていない場合は現在のノードを選択します(これがデフォルトアクションです)。
文字を入力*
  • フォーカスは、入力された文字で始まる名前を持つ次のノードに移動します。
  • 複数の文字が連続して素早く入力された場合、フォーカスは入力された文字列で始まる名前を持つ次のノードに移動します。
* (オプション) 現在のノードと同じレベルにあるすべての兄弟を展開します。

* タイプアヘッドは、特に 7 つ以上のルートノードを持つツリーの場合、すべてのツリーに推奨されます

複数選択のキーボードインタラクション

複数選択ツリーには 2 つのインタラクションモデルがあります。選択状態を失わないようにリストをナビゲートする際に ShiftControl などの修飾キーを押すことをユーザーに要求することもできますが、修飾キーを保持することをユーザーに要求しないモデルが推奨されます。

推奨される複数ユーザー選択モデル

Space フォーカスされたノードの選択状態を切り替えます。
Shift + ↓ (オプション) フォーカスを次のノードに移動し、その選択状態を切り替えます。
Shift + ↑ (オプション) フォーカスを前のノードに移動し、その選択状態を切り替えます。
Shift + Space (オプション) 最近選択されたノードから現在のノードまでの連続するノードを選択します。
Control + Shift + Home (オプション) フォーカスを持つノードと最初のノードまでのすべてのノードを選択します。オプションで、フォーカスを最初のノードに移動します。
Control + Shift + End (オプション) フォーカスを持つノードと最後のノードまでのすべてのノードを選択します。オプションで、フォーカスを最後のノードに移動します。
Control + A (オプション) ツリー内のすべてのノードを選択します。オプションで、すべてのノードが選択されている場合、すべてのノードの選択を解除することもできます。

代替の複数選択モデル

代替の複数選択モデルは修飾キーモデルで、ShiftControl などの修飾キーを保持せずにフォーカスを移動すると、フォーカスされたノード以外のすべての選択されたノードの選択が解除されます:

Shift + ↓ フォーカスを次のノードに移動し、その選択状態を切り替えます。
Shift + ↑ フォーカスを前のノードに移動し、その選択状態を切り替えます。
Control + ↓ 選択状態を変更せずに、フォーカスを次のノードに移動します。
Control + ↑ 選択状態を変更せずに、フォーカスを前のノードに移動します。
Control + Space フォーカスされたノードの選択状態を切り替えます。
Shift + Space (オプション) 最も最近選択されたノードから現在のノードまでの連続するノードを選択します。
Control + Shift + Home (オプション) フォーカスを持つノードと最初のノードまでのすべてのノードを選択します。オプションで、フォーカスを最初のノードに移動します。
Control + Shift + End (オプション) フォーカスを持つノードと最後のノードまでのすべてのノードを選択します。オプションで、フォーカスを最後のノードに移動します。
Control + A (オプション) ツリー内のすべてのノードを選択します。オプションで、すべてのノードが選択されている場合、すべてのノードの選択を解除することもできます。

仕様書

Specification
Accessible Rich Internet Applications (WAI-ARIA)
# tree
Unknown specification