息を吐くようにアクセシブルな実装をする
<header role="banner">
hogehoge
</header>
WAI-ARIAはアクセシビリティを高めるため
マークアップ言語のセマンティクスを
補強するためのもの
WAI-ARIAは何を補強できるか
role
aria-*
aria-*
<ul role="tree" aria-label="menu tree">
<li role="treeitem" aria-selected="true">...</li>
<li role="treeitem" aria-selected="false">...</li>
</ul>
role
<ul role="tree"></ul>
これはツリーウィジェットである
<li aria-selected="true" role="treeitem">...</li>
このツリーアイテムは選択されている(いない)
<ul aria-label="menu tree" role="tree"></ul>
このツリーウィジェットの名前プロパティはmenu tree
である
これらの付与されたセマンティクスはどのようにユーザー(支援技術)に伝わるか
OSが支援技術にセマンティクスなどの
情報を伝えるAPI
ブラウザがレンダリングしているコンテンツを
アクセシビリティAPIのオブジェクトに変換して
支援技術に伝える
まじで
<a href>
/ <button>
<h1>
/ <section>
<table>
/ <th>
/ <td>
データの参照構造を示す
input
/ label
<datalist>
Can I Use datalist? Data on support for the datalist feature across the major browsers from caniuse.com.
alt
/ title
<a href="#" class="right-off-canvas-toggle show-for-small globalNavButton" aria-expanded="true">
<img src="https://www.m-g-n.me/wp-content/themes/mgn/src/svg/sandwich.svg">
</a>
<abbr title="point">pt</abbr>
tabindex
0
or -1
を使用するhoge
WAI-ARIAはホスト言語のセマンティクスを補強する
role
role
tab
alert
dialog
search
alert
ライブリージョン、要素内の変化を監視
<div role="alert" aria-live="assertive">
<p>!</p>
</div>
aria-label
名前プロパティを与えるaria-expanded
展開されているかどうかaria-hidden
隠されているかどうかaria-controls
制御する要素を示すaria-current
現在位置であることを示すaria-describedby
説明テキストがある要素を示すaria-live
自動更新される要素を示すalt
の代替
aria-expanded
要素の開閉状態を表す
≠ 表示/非表示
<nav aria-expanded="true" aria-labelledby="menu-toggle-link">
<a href="#menu" id="menu-toggle-link">Menu</a>
<ul aria-hidden="false" id="menu"> <!-- こっちが非表示 -->
<li><a href="./works">Works</a></li>
...
</ul>
</nav>
<h7></h7>
<div role="heading" aria-level="7"></div>
HTMLの持つ機能を代替的に実装する場合
<input type="datatime-local" />
<div aria-expanded="true">
<input role="combobox" type="text" aria-haspopup="grid" aria-activedescendant="date-2018-12-09" />
<div role="grid">
table widget...
</div>
</div>
通常のHTMLネイティブ要素を装飾のためだけに代替しなくても良い
<span role="checkbox" aria-checked="true" tabindex="0"></span>
<input type="checkbox" checked style="opacity: 0;/* visually hidden style */" />
<span aria-hidden="true">
<svg>...</svg>
</span>
role
やプロパティを上書きする必要がある時例) role[tablist] > role[tab]
<ul role="tablist">
<li role="tab"></li>
</ul>
<ul role="tablist">
<li role="none">
<a href="#tabpanel-1" role="tab">Tab</a>
</li>
</ul>
ARIAの実装例、キーボード操作の標準も例示
ホスト言語をHTMLにしたときのARIAの使用規範
グローバルaria-*
属性を除くaria-*
属性は付与できる要素 or role
が定められている
ありがとうございました!