a11y/deprecated-aria · 非推奨の ARIA role または属性
ARIA 1.3 が全体として、または置かれた role 上で非推奨にした role や aria-* 属性は、いまも動くが、そこではもう定義されていません。
重大度: info · カテゴリ: a11y
warning ではなく info としています。role や属性は現行の支援技術ではまだ動くためです。この検出が言っているのは、ARIA 1.3 がそれを定義から外したので、そこでの意味がもう保証されないということです。
チェック内容
ARIA 1.3 の表に照らして 3 つを、コンポーネントのソースから検出します。
- 非推奨の role:
role="directory"(代替はlist)。 - 全体として非推奨の属性:
aria-dropeffectとaria-grabbed。どの要素でも。 - 解決した role 上で非推奨の属性:
checkboxのaria-haspopup、generic(素の<div>/<span>)のaria-disabled、その他 ARIA 1.2 と 1.3 が外した組み合わせ。role の解決はa11y/disallowed-aria-propsと同じです。明示的な role の最初の具体的トークン、または要素が取り得るすべての implicit role で、そのすべての下で非推奨のときにだけ検出します。
<div role="checkbox" tabindex="0" aria-checked="false" aria-haspopup="true">…</div>
<div aria-grabbed="true">…</div>
検出しないもの: a11y/unknown-aria-attribute が既に報告する属性。role ごとの判定は、DPUB-ARIA の role、式による role、literal な role のない spread では判定しません。role が不明なためです。一方、非推奨の role と 2 つのグローバル属性はそれに関わらず報告されます。
Svelte コンパイラとの重複。 明示的な role については、コンパイラは role ごとのケースを非対応として(a11y_role_supports_aria_props、warning)報告します。その ARIA データは非推奨属性にフラグを付けるのではなく削除したためです。判定は同じで、ラベルと重大度が異なります。素の <div>/<span>、実際に多いケースの aria-disabled では、コンパイラは沈黙します。role="directory" と 2 つのグローバル属性についても沈黙します。
なぜ重要か
ARIA における非推奨は role の定義からの削除です。今日の支援技術の多くは古い意味をまだ尊重しますが、次の版がそうする必要はなく、属性を残したままの書き換えは未定義の挙動への依存を残します。
修正方法
role="directory" は role="list" に置き換え、aria-dropeffect/aria-grabbed は削除し(ドラッグ&ドロップはいまはウィジェット自身の意味論で表現します)、role 上で非推奨の属性はその role がまだ定義している要素へ移すか削除します。
<div role="checkbox" tabindex="0" aria-checked="false">…</div>
モードによる違い
ありません。このルールが読むのは同じ .svelte / .ts のソースファイルなので、CLI、Vite プラグインのビルド、ライブダッシュボードの静的ベースラインのいずれでも結果は同一で、レンダリング済み HTML の解析で再評価されることもありません。--route で実行範囲を絞ると、このルールは動きません。コンポーネントスコープのルールには、検出を紐づけるルートが無いためです。
無効化
個別の要素を抑制するには <!-- svelte-vitals-disable-next-line a11y/deprecated-aria --> を置きます。ルールごと無効化するには、次のように設定します。
export default {
rules: {
'a11y/deprecated-aria': 'off'
}
};