WAI-ARIA の IDL 属性について
https://gyazo.com/db02711295480193878aff69b8be22fb
この資料は Saitama.js vol.6 のLT資料です。
https://gyazo.com/5510d4e88c34b7dc94f91817952946e7
メニューのドキュメントアイコンより「Start presentation」クリックでプレゼンテーションが始まります
自己紹介
yamanoku.icon @ yamanoku
大山奥人, おおやまみちのく a.k.a やまのく
Twitter
GitHub
得意領域
マークアップ・フロントエンド・UIデザイン・アクセシビリティ
千葉県流山市在住
takanoripさんとお元気ですか.fmをやってます
既婚で1児の父と猫🐈🐈🐈と犬🐶の飼い主
2023-06-19をもちましてジュンくんが一歳になりました
https://gyazo.com/93e565d87ab03c58701d31ee4d685837
改めてsaitama.js、池袋開催おめでとうございます
めでたいね
池袋は論理埼玉!
WAI-ARIA 1.2がW3C勧告になったぞ!
こちらもめでたい
2023-06-06に勧告になりました
Accessible Rich Internet Applications (WAI-ARIA) 1.2 is a W3C Recommendation | W3C News
勧告案(1つ前の段階)が2023-03-28
勧告候補(2つ前の段階)が2023-03-02
作業草案(3つ前の段階)の最終更新が2019/12/18
およそ5年半かかってます
新たに策定された仕様に ARIA IDL というものがある
今回話す部分
WAI-ARIA の IDL 属性とは?
これまでの WAI-ARIA 変更について
code:js
const toggleButton = document.getElementById('toggle');
toggleButton.setAttribute('role', 'button');
toggleButton.setAttribute('aria-disabled', isAriaDisabled ? 'false' : 'true');
IDL 属性を使用した変更方法について
code:js
const toggleButton = document.getElementById('toggle');
toggleButton.role = 'button';
toggleButton.ariaDisabled = isAriaDisabled ? false : true;
DOMのコンテンツ属性を直接参照していたものが必要なくなった
setAttributeやgetAttributeでの操作が不要に
booleanとして扱えるものも
サンプル(Chromeブラウザでご覧ください)
ARIA IDL を使えると何が良くなる?
Accessibility Object Model(AOM)との連動
JavaScriptでアクセシビリティツリーを操作できるようにするAPI
Custom Element の WAI-ARIA 操作
デフォルトのセマンティクス情報を渡せる
setAttributeで操作するとroleなどが上書きできない
this.setAttribute('role', 'button');って書くと
<some-button role="switch"></some-button>のような上書きできない
Shadow DOMにおいては境界が閉じているためID属性を超える事ができない
code:html
<custom-label>
#shadow-root
<label id="foo">Hello world</label>
</custom-label>
<custom-input>
#shadow-root
<input type="text" id="foo">
</custom-input>
みたいなパターンがあったときに
code:html
<custom-input>
#shadow-root
<input type="text" aria-labelledby="foo">
</custom-input>
という参照ができない
input.ariaLabelledByElements = [label]
みたいな形で ShadowRoot の内容を IDL から反映させることができる
低レイヤ層にアクセシビリティツリーを生やす
canvasで描かれたコンテンツはアクセシブルではない
なぜならばアクセシビリティツリーがないので
DOMではない仮想ノードを追加してアクセシビリティツリーを生やす
code:js
canvas.attachAccessibleRoot();
const table = canvas.accessibleRoot.appendChild(new AccessibleNode());
table.role = "table";
table.colCount = 10;
table.rowcount = 100;
フォーカスさせる場合はfocusableを設定する
code:js
VirtualNode.focusable = true;
DOMを操作するよりもパフォーマンスを減らせるかもしれない
それでいてアクセシブルなものが作れるようになるかも
みんなハッピーになるかも
まだまだ全ブラウザで使えるものではない
https://gyazo.com/e445f1731f74e8bca2e466bb0cd4815e https://wicg.github.io/aom/caniuse.html#summary
※2022年4月時点のデータ
Firefox以外の場所で活かせるかも?
iOS WebView
Electronデスクトップアプリ
Chromium
夢が広がる!ARIA IDL(とAOM)
Thank you for listening !
https://gyazo.com/4c1d0df4903765cc351797c10f903ba1
参考
Add ARIA property string reflection on Element · Issue #691 · w3c/aria · GitHub
あのWAI-ARIAがIDL属性として実装される!? | フロントエンドBlog | ミツエーリンクス
WAI-ARIA 1.2がW3C勧告に到達 | アクセシビリティBlog | ミツエーリンクス
New in ARIA 1.2: ARIA IDL attributes | scottohara.me
Button Examples (IDL Version) | APG | WAI | W3C
The Accessibility Object Model (AOM) | aom
ElementInternals and Form-Associated Custom Elements | WebKit
Shadow DOM and accessibility: the trouble with ARIA | Read the Tea Leaves
セマンティクスの作り方、これまで、今、そして未来