コンテンツにスキップ
svelte-vitals
日本語
Esc
移動開く⌘Jプレビュー
このページの内容

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-dropeffectaria-grabbed。どの要素でも。
  • 解決した role 上で非推奨の属性: checkboxaria-haspopupgeneric(素の <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'
  }
};