コンポーネントアクセシビリティ属性

スクリーンリーダーや他の支援技術でコンポーネントを使用できるようにするには、コンポーネントで HTML 属性を使用します。HTML 属性は、含まれる UI 要素を記述します。アクセシビリティソフトウェアは属性を読み上げることで UI 要素を解釈します。

アクセシビリティの重要な点の 1 つに、title 属性を使用することがあります。スクリーンリーダーでは title 属性の値がユーザに読み上げられます。title 属性を持つ Lightning Web コンポーネントを使用する場合は、必ず値を指定します。たとえば、lightning-button コンポーネントには title 属性があります。

このテンプレートでは次のような HTML 出力が作成され、これをスクリーンリーダーはユーザに「Log In」 (ログイン) と読み上げます。

Lightning Web コンポーネントを作成するときに、スクリーンリーダーで値をユーザに読み上げるようにする場合、@api を使用して title 公開属性を公開します。

属性を公開プロパティとして公開することで属性を制御する場合、デフォルトでは属性は HTML 出力に表示されなくなります。表示される HTML に値を属性として渡す (プロパティを反映するため) には、プロパティの getter と setter を定義して setAttribute() メソッドをコールします。

setter 内で操作を実行することもできます。非公開プロパティを使用して、計算された値を保持します。

setAttribute() の使用法についての詳細は、「HTML 属性への JavaScript プロパティの反映」を参照してください。

スクリーンリーダーでボタンの現在の状態を読み上げるなど、より高度なアクセシビリティを提供するには、ARIA 属性を使用します。この属性により、より詳細な情報が ARIA 標準をサポートするスクリーンリーダーに提供されます。

ARIA 属性を HTML テンプレート内の id 属性に関連付けることができます。コンポーネントのテンプレートファイル内で id 値を一意にする必要があります。これで、スクリーンリーダーは ARIA 属性 (aria-describedbyaria-detailsaria-owns など) を特定の要素に関連付けることができます。

テンプレートを表示するときに、id 値が、グローバル一意値に変換される場合があります。CSS または JavaScript 内で id セレクタを使用しないでください。変換された id に一致しなくなります。代わりに、要素の class 属性、または data-id のような data-* 属性を使用してください。

次にいくつかコードを見てみましょう。aria-pressed 属性は、ボタンが押されたときに通知するようにスクリーンリーダーに指示します。lightning-button コンポーネントを使用する場合、次のように記述します。

このコンポーネントで ARIA 属性を公開プロパティとして定義し、フィールドを使用して公開プロパティを取得および設定します。

コンポーネントの JavaScript はキャメルケースの属性の対応付けを使用して、lightning-button.js の値を取得および設定します。

生成される HTML は次のようになります。

ARIA をサポートするスクリーンリーダーが表示ラベルを読んで、ボタンが押されたことを示します。

ARIA 属性はアクセス機構関数内でキャメルケースを使用します。たとえば、aria-labelariaLabel になります。完全な対応付けリストは、GitHub リポジトリ (lwc/packages/@lwc/template-compiler/src/parser/constants.ts) を参照してください。

コンポーネント作成者は、カスタムコンポーネントでデフォルトの ARIA 属性を定義し、属性値をコンポーネントコンシューマが指定できるようにしたいと考える場合があります。この場合、コンポーネント作成者はコンポーネントの要素でデフォルトの ARIA 値を定義します。

属性は connectedCallback() で定義してください。constructor() では属性を定義しないでください。

このコンポーネントを使用して、aria-label 値を提供した場合、提供した値が表示されます。

生成される HTML は次のようになります。

aria-label 値を提供しない場合、デフォルト値が表示されます。

生成される HTML は次のようになります。

カスタムコンポーネントを作成し、属性の値が変更されないようにしたいと考えています。この場合はどうすればよいでしょうか? 適切な例として role 属性があります。コンポーネントのコンシューマが buttontab に変更することは望まれません。ボタンはボタンです。

次の例のように、生成された HTML には buttonrole が常に含まれるようにしたいと考えています。

属性の値をコンシューマが変更できないようにするには、単に文字列を返します。次の例では、role 値に常に "button" が返されます。

同じテンプレートの ID および ARIA 属性は自動的にリンクされます。別のテンプレートに属性がある場合、その属性を手動でリンクする必要があります。

ネイティブの Shadow DOM では、別々のテンプレートにある要素間で ID や ARIA 属性をリンクすることはできません。

2 つの要素を ID や ARIA 属性を使ってリンクするには、Light DOM を使用して同じシャドウルートに配置します。「Light DOM」アクセシビリティセクションを参照してください。