<html>
ページのルート要素です。lang属性でページの主な言語を指定すると、スクリーンリーダーが正しい音声と発音で読み、ブラウザーも適切なフォントやハイフネーションを使います。
<html lang="en">アクセシビリティに関わるHTMLとARIAの役割を、使用例と使っているガイドとともにまとめました。
<html>ページのルート要素です。lang属性でページの主な言語を指定すると、スクリーンリーダーが正しい音声と発音で読み、ブラウザーも適切なフォントやハイフネーションを使います。
<html lang="en"><title>タブに表示され、ページを開いたときに最初に読み上げられるページ名です。ページごとに固有にし、具体的な部分を先に書きます(「お支払い – Fern & Fold」)。
<title>Order confirmed – Fern & Fold</title><meta>文字コード、ビューポート、説明文などのメタデータです。ビューポートにmaximum-scale=1やuser-scalable=noを指定しないでください。モバイルで拡大表示できなくなります。
<meta name="viewport" content="width=device-width, initial-scale=1">これを使うガイド
<header>ロゴやナビゲーションなどの導入部分です。<article>、<aside>、<main>、<nav>、<section>の中にないときだけbannerランドマークになり、その中ではその部分の見出し部分にすぎません。
<header>
<a href="/">Fern & Fold</a>
<nav aria-label="Main">…</nav>
</header><nav>主要なナビゲーションリンクのまとまりです。1ページに複数あるときは、それぞれaria-labelで名前を付けます(「メイン」「フッター」など)。「ナビゲーション」という語はスクリーンリーダーが読むので含めません。
<nav aria-label="Main">
<ul>…</ul>
</nav><search>検索や絞り込みのフォームを囲み、searchランドマークにします。formにrole="search"を付ける必要がなくなります。
<search>
<form action="/search">…</form>
</search><main>ページの主な内容です。1ページに1つだけ置きます(ほかは非表示にする必要があります)。スクリーンリーダーの利用者はここへ直接移動でき、スキップリンクの行き先にもなります。
<main id="content">
<h1>Your basket</h1>
</main>role="main"<a><section>通常は見出しを持つ、テーマごとのまとまりです。名前(見出しを指すaria-labelledbyなど)を持つときだけregionランドマークになります。
<section aria-labelledby="faq">
<h2 id="faq">Questions</h2>
</section>role="region"aria-labelledby<article>投稿、コメント、商品カードなど、単独でも意味が通る独立した内容です。見出しから始めます。
<article>
<h2>Spring opening hours</h2>
<p>…</p>
</article><h1>–<h6>レベル付きの見出しです。スクリーンリーダーの利用者は見出しを一覧にして移動するので、<h1>を1つ置き、下る方向でレベルを飛ばさず、大きさではなく構造でレベルを選びます。
<h1>Delivery</h1>
<h2>UK orders</h2>
<h2>International orders</h2><aside>サイドバーなど、ページに関連するが主な内容とは別の部分です。complementaryランドマークになります。複数あるときは名前を付けます。
<aside aria-label="Related articles">…</aside>role="complementary"<footer>著作権、連絡先、規約へのリンクなどの末尾部分です。<article>、<aside>、<main>、<nav>、<section>の中にないときだけcontentinfoランドマークになります。
<footer>
<a href="/contact">Contact us</a>
</footer><ul>順序のない項目のリストです。Safari と VoiceOver では、<nav>の外でlist-style: noneを指定するとリストとして扱われなくなります。項目数を伝えたい場合はrole="list"を付けます。
<ul>
<li>Free returns</li>
<li>Next-day delivery</li>
</ul><ol>手順など、順序に意味があるリストです。スクリーンリーダーは項目数と現在の位置を伝えます。
<ol>
<li>Add to basket</li>
<li>Pay</li>
</ol><li><ol>、<ul>、<menu>の項目です。それらの直接の子でないと、リストの項目として数えられません。
<ul>
<li><a href="/shop">Shop</a></li>
</ul><dl>仕様や用語集など、用語と説明の組のリストです。直下には<dt>、<dd>、それらを囲む<div>だけを置きます。
<dl>
<dt>Weight</dt>
<dd>220 g</dd>
</dl>これを使うガイド
<figure>画像、グラフ、コード例など、まとまった内容です。通常は<figcaption>で名前を付けます。キャプションは画像のaltの代わりにはなりません。
<figure>
<img src="chart.png" alt="Sales doubled from May to June">
<figcaption>Sales, 2026</figcaption>
</figure><figcaption><figure>のキャプションで、最初か最後の子として置きます。図のアクセシブル名になります。
<figcaption>Figure 2: the checkout flow</figcaption><figure>これを使うガイド
<a>別のページや場所へのリンクです。hrefがあるときだけリンクになり、TabキーとEnterキーで操作できます。リンクテキストで行き先がわかるようにします。ページ上の操作には<button>を使います。
<a href="/returns">Returns policy</a>role="link"hrefaria-current<abbr>略語です。title属性は確実には読まれず、タッチ画面では表示されないので、初出時に本文で正式名称を書きます。
<p>Web Content Accessibility Guidelines (<abbr>WCAG</abbr>)</p>title<ruby>ルビ注記です。漢字の読みを示すふりがななど、文字の上や横に小さな文字を付けます。読み上げ方はスクリーンリーダーによって異なり、親文字とルビの両方を読むことがよくあります。
<ruby>漢字<rp>(</rp><rt>かんじ</rt><rp>)</rp></ruby><mark>検索に一致した語など、参照のために強調表示するテキストです。多くのスクリーンリーダーは読み分けないので、強調表示だけで情報を伝えないでください。
<p>Results for <mark>notebook</mark> covers</p><s>元の価格など、正しくなくなった、または関係なくなったテキストです。スクリーンリーダーは取り消し線を読まないことが多いので、必要なら「旧価格」などの言葉を添えます。
<p><s>£30</s> Now £20</p><del>これを使うガイド
<del>編集の記録として、文書から削除されたテキストです。多くのスクリーンリーダーは既定では読み分けないので、変更が重要なら言葉で伝えます。
<p>Open <del>until 6pm</del> <ins>until 8pm</ins>.</p><ins>編集の記録として、文書に追加されたテキストです。多くのスクリーンリーダーは既定では読み分けません。
<p>Open <ins>until 8pm</ins> on Fridays.</p><del><img>画像です。altは必須です。画像が伝える内容を書くか、装飾の画像ならalt=""にしてスクリーンリーダーに読み飛ばさせます。altがないと、ファイル名を読むスクリーンリーダーが多くあります。
<img src="mug.jpg" alt="Blue enamel mug with a white rim"><area>イメージマップ内のクリック領域です。hrefがあるとリンクになり、altがリンクテキストになるので必須です。
<area shape="circle" coords="120,80,30" href="/toilets" alt="Toilets"><svg>インラインのSVG図形です。意味のある画像にはrole="img"を付け、aria-labelか<title>で名前を付けます。装飾ならaria-hidden="true"を付けます。
<svg role="img" aria-label="Rated 4 out of 5" viewBox="0 0 80 16">…</svg><canvas>スクリプトで描画する領域です。描いた内容は支援技術に伝わらないので、同じ情報を代替コンテンツか近くのテキストで提供します。
<canvas width="400" height="200">
<p>Visitors rose from 200 in May to 450 in June.</p>
</canvas><iframe>地図や動画プレーヤーなど、別のページを埋め込みます。内容を表すtitleを付け、スクリーンリーダーの利用者が中に入るかどうか判断できるようにします。
<iframe src="https://maps.example.com/shop" title="Map to our shop"></iframe>title<video>動画プレーヤーです。controls、<track>による字幕、音声解説か文字起こしを付けます。音声付きで自動再生しないでください。
<video src="tour.mp4" controls>
<track kind="captions" src="tour.en.vtt" srclang="en" label="English">
</video><audio>音声プレーヤーです。controlsを付け、文字起こしを用意します。3秒を超えて自動再生する音声には、止める方法が必要です。
<audio src="episode-12.mp3" controls></audio>
<a href="episode-12.html">Transcript</a><track><video>に字幕や音声解説を付ける仕組みで、WebVTTファイルの種類をkindで指定します。音声のある収録済み動画には、字幕が必要です(WCAG 1.2.2)。
<track kind="captions" src="tour.en.vtt" srclang="en" label="English" default><table>データ表です。スクリーンリーダーは各セルを見出しとともに読みます。行と列のデータに使い、レイアウトには使いません。<caption>を付けます。
<table>
<caption>Delivery prices</caption>
…
</table><caption>表のタイトルで、最初の子として置きます。表の名前になり、スクリーンリーダーの利用者はセルを読む前に内容がわかります。
<caption>Opening hours</caption><table><th>列または行の見出しセルです。scope="col"かscope="row"で向きを明示します。複雑な表ではheadersを使います。
<th scope="col">Price</th><td>データセルです。スクリーンリーダーは、<th>またはheaders属性から求めた行と列の見出しとともに読みます。
<td>£3.50</td><form>入力欄を送信するフォームです。Enterキーでの送信はこの中でだけ動きます。名前を持つときだけformランドマークになります。
<form action="/subscribe" method="post" aria-label="Newsletter">…</form><fieldset>ラジオボタンの組や住所など、関連する入力欄を<legend>の問いのもとにまとめます。スクリーンリーダーは入力欄とともに<legend>を読みます。
<fieldset>
<legend>Delivery speed</legend>
…
</fieldset><legend><fieldset>のキャプションで、最初の子として置きます。スクリーンリーダーによってはグループ内の入力欄ごとに繰り返すので、短くします。
<legend>Payment method</legend><label>入力欄の見える名前です。forと入力欄のidで結び付けるか、入力欄を囲みます。入力欄にフォーカスすると読まれ、クリックすると入力欄にフォーカスが移ります。
<label for="email">Email</label>
<input id="email" type="email" autocomplete="email"><input>typeで種類が決まる入力欄です(text、email、checkbox、radio、number、dateなど)。どれにもラベルが必要です。適切なtypeとautocompleteで、合ったキーボードと自動入力が使えます。
<label for="tel">Phone</label>
<input id="tel" type="tel" autocomplete="tel">role="textbox"role="searchbox"role="checkbox"role="radio"role="button"role="slider"role="spinbutton"role="combobox"<label>typeautocompletename<textarea>複数行の入力欄です。ほかの入力欄と同じくラベルが必要です。広さが必要になる場合に備え、サイズ変更を禁止しないでください。
<label for="note">Gift message</label>
<textarea id="note" rows="4"></textarea><select>選択肢から選ぶリストで、キー操作とスクリーンリーダー対応が組み込まれています。ラベルを付け、選択の変更だけで送信やページ移動をしないでください。
<label for="size">Size</label>
<select id="size" name="size">
<option>A5</option>
</select><optgroup><select>の関連する選択肢をラベルの下にまとめます。多くのスクリーンリーダーは選択肢とともにそのラベルを読みます。
<optgroup label="Notebooks">
<option>A5 dotted</option>
</optgroup><datalist><input>の入力候補で、入力欄のlist属性で結び付けます。候補以外も入力できます。候補の読み上げはブラウザーによって異なります。
<label for="city">City</label>
<input id="city" list="cities">
<datalist id="cities">
<option value="Osaka">
</datalist><input>これを使うガイド
<button>ページ上で何かを実行するボタンです。標準でフォーカスでき、EnterキーとSpaceキーで動きます。フォームの中では既定で送信するので、それ以外の操作にはtype="button"を付けます。
<button type="button" aria-expanded="false">Menu</button>role="button"typearia-pressed<output>合計など、計算や操作の結果です。statusのライブリージョンなので、変更がスクリーンリーダーで読まれることがあります。
<output for="qty price" name="total">£24</output><progress>アップロードなど、作業の進み具合です。ラベルを付けます。valueがないと、進行中であることだけを示し、どれだけ進んだかは示しません。
<label for="up">Uploading</label>
<progress id="up" max="100" value="40">40%</progress>role="progressbar"これを使うガイド
<meter>パスワードの強さのような、決まった範囲の中の測定値で、スクリーンリーダーは値とともに読み上げます。ラベルを付け、強さは色だけでなく文字でも示します(WCAG 1.4.1)。作業の進み具合には<progress>を使います。
<label for="disk">Storage</label>
<meter id="disk" min="0" max="10" value="7">7 of 10 GB</meter>role="meter"<details><summary>を押すと内容を開閉する折りたたみウィジェットです。キー操作とスクリーンリーダー対応が組み込まれています。同じnameのものは一度に1つだけ開きます。
<details>
<summary>Delivery and returns</summary>
<p>Free returns within 30 days.</p>
</details><summary><details>の常に表示されるラベルで、開閉を切り替えます。多くのブラウザーは展開状態付きのボタンのようなコントロールとして伝えますが、ロールはブラウザーによって異なります。中にほかの操作できる要素を入れないでください。
<summary>Size guide</summary><dialog>ダイアログです。showModal()で開くとモーダルになり、フォーカスが中に移り、ページのほかの部分が操作できなくなり、Escキーで閉じます。見出しから名前を付けます。
<dialog aria-labelledby="del-title">
<h2 id="del-title">Delete this list?</h2>
…
</dialog>lang要素の内容の言語を指定し、スクリーンリーダーが正しい音声で読み、ブラウザーが正しく改行・翻訳できるようにします。ページ全体は html 要素に(WCAG 3.1.1)、別の言語の部分にはその部分に指定します(WCAG 3.1.2)。
<html lang="en">
…
<p>The French call it <i lang="fr">l'esprit de l'escalier</i>.</p><html>dirdirltrrtlauto文字の方向を指定します。アラビア語やヘブライ語など右から左に書く文字には rtl を、方向が事前に分からない利用者の投稿には auto を使います。
<p lang="ar" dir="rtl">مرحبا بكم</p>langtitleマウスを重ねたときにツールチップとして表示される補足情報です。キーボードやタッチの利用者には表示されず、スクリーンリーダーの読み上げもまちまちなため、頼りにしません。確実に役立つのは iframe に名前を付けるときだけです。
<iframe src="/map" title="Map of our shop on Hill Street"></iframe>inert要素とその中身すべてを操作できなくします。表示はされたままですが、フォーカス、クリック、スクリーンリーダーでの移動ができません。独自に作ったモーダルの背後のページや、表示はしているがまだ使えない内容に使います。
<main inert>…</main>
<div role="dialog" aria-modal="true" aria-labelledby="dlg-title">…</div>aria-modalこれを使うガイド
tabindexinteger (use 0 or -1)要素がキーボードフォーカスを受け取るかを決めます。0 はソース順でTabキーの順序に加え、-1 はTabキーの順序に入れずにスクリプトからだけフォーカスできるようにします。正の値は、その要素を他のすべてより先にするため、使いません。
<h2 id="results-title" tabindex="-1">12 results</h2>autofocusページやダイアログが開いたときに、その要素へフォーカスを移します。ダイアログの最初の入力欄など、利用者が操作を始めると予想できる場所だけに使います。それ以外では、スクリーンリーダー利用者がまだ聞いていない内容を飛ばしてしまいます。
<dialog>
<label for="rename">New name</label>
<input id="rename" autofocus>
</dialog>accesskey要素にキーボードショートカットを割り当てます。スクリーンリーダー、ブラウザー、OSのショートカットと衝突し、修飾キーもブラウザーごとに異なり、存在も利用者に伝わらないため、使用は避けます。
<a href="/search" accesskey="s">Search</a>contenteditabletruefalseplaintext-only要素の内容をその場で編集できるようにします。ブラウザーは編集可能なテキスト領域として伝えますが、名前はないため、aria-labelledby や aria-label でラベルを付け、複数行を入力する場合は aria-multiline も付けます。
<p id="note-label">Note</p>
<div contenteditable="true" role="textbox" aria-labelledby="note-label" aria-multiline="true"></div>inputmodenonetextdecimalnumerictelsearchemailurlワンタイムコードに数字キーパッドを出すなど、表示するスクリーンキーボードの種類を選びます。type="number" のような検証や増減ボタンは付きません。
<label for="code">Security code</label>
<input id="code" inputmode="numeric" autocomplete="one-time-code">これを使うガイド
role要素にARIAロールを与え、それが何であるかを支援技術に伝えます。変わるのは読み上げだけで、動作は変わりません。そのロールを持つHTML標準の要素があれば、そちらを使います(下のARIAロールを参照)。
<div role="status">3 results</div>popoverautomanualhint要素を最前面に表示するポップオーバーにし、popovertarget を持つボタンで開きます。auto のポップオーバーはEscapeキーや外側のクリックで閉じます。フォーカスを閉じ込めず、背後も操作できるため、モーダルダイアログではありません。
<button type="button" popovertarget="help">Help</button>
<div id="help" popover>Codes are on the back of your card.</div>http-equivcontent-typedefault-stylerefreshcontent-security-policyx-ua-compatiblemeta 要素をHTTPヘッダーのように働かせます。遅延付きの http-equiv="refresh" は避けます。自動で再読み込みやリダイレクトをすると、読み終える前にページが変わってしまいます(WCAG 2.2.1)。
<meta http-equiv="content-security-policy" content="default-src 'self'"><meta>これを使うガイド
hrefリンク先のURLです。href のない a 要素はリンクではなく、フォーカスもできません。href="#" や javascript: でリンクをボタンとして使うことはしません。
<a href="/returns">Returns policy</a><a><area>role="link"<button>target_self_blank_parent_topnameリンクを開く場所を指定します。_blank は新しいタブやウィンドウで開き、利用者が戸惑ったり戻るボタンが効かなくなったりするため、必要な場合だけ使い、リンクテキストでそのことを伝えます。
<a href="/terms.pdf" target="_blank">Terms (PDF, opens in a new tab)</a>これを使うガイド
alt画像のテキストによる代替で、その文脈で画像が伝える内容を書きます(WCAG 1.1.1)。装飾だけの画像には alt="" を指定して、スクリーンリーダーに読み飛ばさせます。alt を省くと、多くのスクリーンリーダーがファイル名を読み上げます。
<img src="chart.png" alt="Sales rose 40% between April and June."><img><area><input>role="img"controlsブラウザー標準の再生コントロールを表示します。キーボードとスクリーンリーダーで操作できるため、同等にアクセシブルな独自プレーヤーを作る場合以外は残します。
<video src="tour.mp4" controls>
<track kind="captions" src="tour.en.vtt" srclang="en" label="English">
</video>autoplay再生できるようになり次第、再生を始めます。3秒を超えて自動で流れる音声には一時停止や消音の手段が(WCAG 1.4.2)、動く映像には一時停止の手段が必要です(WCAG 2.2.2)。自動再生はしないのが最善です。
<video src="loop.mp4" autoplay muted loop playsinline controls></video>これを使うガイド
mutedメディアを音声なしで開始します。ブラウザーは消音した動画の自動再生を許可しますが、動きがあれば一時停止の手段は必要です。
<video src="hero.mp4" autoplay muted playsinline controls></video>これを使うガイド
loopメディアの再生が終わると最初から再生します。自動で始まり5秒を超えて動き続けるループ動画には、一時停止の手段が必要です(WCAG 2.2.2)。
<video src="steam.mp4" muted loop controls></video>これを使うガイド
kindsubtitlescaptionsdescriptionschaptersmetadataテキストトラックの種類です。聴覚障害のある視聴者向けに会話と効果音を書き起こしたものは captions(WCAG 1.2.2)、音声は聞こえても言葉が分からない人向け(翻訳など)は subtitles、テキストによる音声解説は descriptions にします。
<track kind="captions" src="talk.en.vtt" srclang="en" label="English">srclangテキストトラックの言語で、subtitles では必須です。利用者が分かる言葉で言語を示す label と組み合わせます。
<track kind="subtitles" src="talk.ja.vtt" srclang="ja" label="日本語">defaultこのテキストトラックを最初から有効にします。ページの言語の字幕に付けると、利用者が設定を探さなくても字幕が表示されます。
<track kind="captions" src="talk.en.vtt" srclang="en" label="English" default>scopecolrowcolgrouprowgroup見出しセルが列、行、またはそのグループのどれの見出しかを示し、スクリーンリーダーが各データセルとともに正しい見出しを読めるようにします。
<th scope="row">Saturday</th>headersこのセルに対応する見出しセルの id のリストで、scope で表せない複雑な表に使います。まず表を単純にすることを検討します。
<td headers="tokyo q1">120</td>これを使うガイド
abbr見出しセルのテキストの短縮形で、見出しが長いときに使います。スクリーンリーダーの対応はまちまちなので、見える見出し自体もなるべく短くします。
<th scope="col" abbr="Qty">Quantity ordered</th><th>colspanセルがまたがる列の数です。スクリーンリーダーは結合を伝えますが、結合セルが多いと表が分かりにくくなるため、可能なら複雑な表は分割します。
<th colspan="2" scope="colgroup">Opening hours</th><td><th>rowspanscopearia-colspanこれを使うガイド
rowspanセルがまたがる行の数です。colspan と同様、セルを順にたどれるよう、結合は最小限にします。
<th rowspan="3" scope="rowgroup">Weekdays</th><td><th>colspanaria-rowspanforlabel 要素を、その id を持つコントロールに関連付けます。コントロールにアクセシブル名が付き、ラベルをクリックするとコントロールにフォーカスしたり切り替えたりできます。
<label for="postcode">Postcode</label>
<input id="postcode" autocomplete="postal-code"><label><output>aria-labelledbylabel<optgroup>や<track>に名前を付けます。optgroupの名前は、多くのスクリーンリーダーが選択肢とともに読み上げます。trackの名前は字幕メニューに表示されるので、利用者が分かる言語名にします。
<optgroup label="Europe">
<option>Lisbon</option>
</optgroup>nameラジオボタンをグループにまとめ、矢印キーで移動でき、スクリーンリーダーが選択肢の数を伝えるようにします。アクセシブル名ではないため、ラベルは別に必要です。
<input id="size-s" type="radio" name="size" value="s">
<label for="size-s">Small</label>typeinput 要素ではコントロールの種類(text、email、checkbox、date など)を決め、ロール、キーボード、検証が変わります。button 要素では submit、reset、button のどれかで、フォームを送信しないボタンには type="button" を指定します。
<button type="button" aria-expanded="false" aria-controls="filters">Filters</button>autocompletenameemailtelstreet-addresspostal-codecc-numberusernamenew-passwordcurrent-passwordone-time-codeoff…入力欄が集める個人情報の種類を示し、ブラウザーやパスワード管理ツールが自動入力できるようにします。利用者自身に関する入力欄には対応するトークンが必要で(WCAG 1.3.5)、運動機能や記憶に障害のある人の入力の手間も減らします。
<label for="email">Email</label>
<input id="email" type="email" autocomplete="email"><input><select><textarea><form>typeplaceholder空の入力欄に表示される例示のテキストです。ラベルではありません。入力を始めると消え、コントラストが低いことも多く、読み上げも確実ではありません。説明は表示されたラベルやヒントに書きます。
<label for="search">Search recipes</label>
<input id="search" type="search" placeholder="e.g. miso soup">required入力欄を必須にします。ブラウザーは未入力での送信を止め、スクリーンリーダーは「必須」と読み上げます。必須であることは表示されたラベルでも示し、色や説明のない「*」だけに頼りません。
<label for="name">Full name (required)</label>
<input id="name" autocomplete="name" required>disabledフォームコントロールを無効にします。Tabキーの順序から外れ、操作できず、送信もされません。フォーカスできないため、利用者が気づかなかったり、無効の理由が分からなかったりします。フォーカスを残す場合は aria-disabled を使います。
<button type="submit" disabled>Place order</button>readonly入力欄の値を変更できなくしますが、フォーカス、読み上げ、送信はできます。disabled と違い、利用者は移動して文字を選択することもできます。
<label for="ref">Order reference</label>
<input id="ref" value="A-20931" readonly><input><textarea>aria-readonlyこれを使うガイド
list入力欄を<datalist>に結び付け、候補の表示とキー操作をブラウザーに任せます。自由な入力もできます。候補の見た目を変える必要がなければ、スクリプトで作るコンボボックスより簡単です。
<label for="city">City</label>
<input id="city" list="cities">
<datalist id="cities"><option value="Osaka"></option></datalist><input><datalist>role="combobox"これを使うガイド
opendetails 要素の内容を表示するか、dialog 要素を表示します。ダイアログは open を付けるのではなく showModal() で開くと、モーダルになり、フォーカスも中に移ります。
<details open>
<summary>Delivery</summary>
<p>Free over ¥5,000.</p>
</details><details><dialog>aria-expandedpopovertargetボタンで、その id を持つポップオーバーを開く、閉じる、または切り替えます。ブラウザーがボタンの展開状態を伝え、閉じるときにフォーカスがポップオーバー内にあれば、開く前の位置(通常はボタン)にフォーカスを戻します。
<button type="button" popovertarget="menu">Account</button>
<div id="menu" popover>…</div>commandshow-modalcloserequest-closeshow-popoverhide-popovertoggle-popover--customスクリプトを使わずに、ボタンで<dialog>やポップオーバーを開閉します。show-modalはshowModal()と同じく、ダイアログをモーダルで開き、フォーカスを中に移して、背後のページを操作できなくします。
<button type="button" commandfor="confirm" command="show-modal">Delete</button><button>commandfor<dialog>commandforボタンのコマンドで操作するダイアログやポップオーバーを、idで指定します。スクリプトがなくても、読み込まれる前でも、ボタンが動きます。
<button type="button" commandfor="confirm" command="close">Cancel</button><button>commandpopovertargetrole= "button"押すと操作を実行するものです。ロールを付けた場合は、tabindex="0"を加え、EnterキーとSpaceキーで動くように自分で作る必要があります。それをすべて備えた<button>を優先してください。
<div role="button" tabindex="0">Save</div>role= "link"実行すると別の場所へ移動する参照です。ロールを付けた場合は、フォーカスとEnterキーを自分で加える必要があり、ブラウザーのリンク機能も失われます。<a href>を優先してください。
<span role="link" tabindex="0">Delivery terms</span>role= "checkbox"オン、オフ、またはaria-checked="mixed"で一部オンになるチェックボックスです。aria-checked、フォーカス、Spaceキーでの切り替えが必要です。<input type="checkbox">を優先してください。
<div role="checkbox" aria-checked="false" tabindex="0">
Email me updates
</div>これを使うガイド
role= "radio"一つだけ選べる選択肢の一つです。aria-checkedが必要で、radiogroupの中に置き、組の中では矢印キーで移動して選択します。<input type="radio">を優先してください。
<div role="radio" aria-checked="true" tabindex="0">Standard delivery</div>role= "switch"すぐに反映される設定のような、オンとオフを切り替えるコントロールです。aria-checked("true"か"false")が必要です。ロールを付ける土台には<button>が最も簡単です。
<button type="button" role="switch" aria-checked="false">
Dark mode
</button>role= "option"listbox内の選択できる項目です。listbox(またはその中のgroup)に含まれている必要があり、ARIA 1.2ではaria-selectedが必須です(選択中の項目はtrue、ほかはfalse)。
<li role="option" id="opt-tokyo" aria-selected="true">Tokyo</li>role= "menuitem"menu または menubar の中の操作です。menu、menubar、またはその中のgroupに含まれている必要があり、項目間のフォーカスは矢印キーで移動します。
<ul role="menu" aria-label="Row actions">
<li role="menuitem" tabindex="-1">Rename</li>
</ul>role= "menuitemcheckbox"「グリッドを表示」のように、オンとオフを切り替えられるメニュー項目です。aria-checkedが必要で、実行すると状態が切り替わり、通常メニューは開いたままです。
<li role="menuitemcheckbox" aria-checked="true" tabindex="-1">
Show grid
</li>role= "menuitemradio"並び順のように、一つだけ選べるメニュー項目の組の一つです。aria-checkedが必要で、組はrole="group"や区切り線でまとめます。
<li role="menuitemradio" aria-checked="true" tabindex="-1">
Newest first
</li>role= "tab"tablist内のラベルの一つで、対応するtabpanelを表示します。aria-selectedと、パネルを指すaria-controlsを付け、タブ間は矢印キーで移動します。
<button role="tab" id="tab-1" aria-selected="true"
aria-controls="panel-1">Details</button>role= "tabpanel"タブが表示する内容です。タブを指すaria-labelledbyで名前を付け、表示していないパネルは非表示にします。
<div role="tabpanel" id="panel-1" aria-labelledby="tab-1">
…
</div>これを使うガイド
role= "textbox"自由に文字を入力する欄です。aria-multiline="true"で複数行になります。<input>や<textarea>を優先し、contenteditableの要素にはロールと名前が必要です。
<div role="textbox" contenteditable="true" aria-multiline="true"
aria-label="Message"></div>role= "searchbox"検索語を入力するテキスト欄です。このロールを持つ<input type="search">を優先し、検索フォームはsearchランドマークの中に置きます。
<input role="searchbox" aria-label="Search products">role= "slider"つまみを動かして範囲から値を選びます。aria-valuenowと名前、値を変える矢印キーの操作が必要です。<input type="range">を優先してください。
<div role="slider" aria-label="Volume" tabindex="0"
aria-valuenow="5" aria-valuemin="0" aria-valuemax="10"></div>role= "spinbutton"上下の矢印キーで値を増減できる数値の欄です。値があるときはaria-valuenowを付けます。数量には<input type="number">を優先してください。
<div role="spinbutton" aria-label="Quantity" tabindex="0"
aria-valuenow="1" aria-valuemin="1">1</div>role= "progressbar"処理の進み具合を示します。名前とaria-valuenow(aria-valueminとaria-valuemaxも)を付け、進み具合が分からないときはaria-valuenowを省きます。<progress>を優先してください。
<div role="progressbar" aria-label="Upload" aria-valuenow="40"
aria-valuemin="0" aria-valuemax="100"></div>role= "treeitem"tree内の項目です。子を持つ項目にはaria-expandedを付けます。treeまたはその中のgroupに含まれている必要があります。
<li role="treeitem" aria-expanded="false" tabindex="0">
Documents
</li>role= "gridcell"grid または treegrid のセルで、フォーカスを受けたり編集したりできます。grid内のrowに含まれている必要があり、セル間は矢印キーで移動します。
<div role="row">
<div role="gridcell" tabindex="-1">Mon 3</div>
</div>role= "combobox"候補のlistbox、grid、tree、dialogを開く入力欄です。aria-expandedと、ARIA 1.2ではポップアップを指すaria-controlsが必要です。強調中の候補はaria-activedescendantで示します。
<input role="combobox" aria-expanded="false" aria-controls="cities"
aria-autocomplete="list" aria-label="City">role= "listbox"一つ、またはaria-multiselectableで複数を選ぶ選択肢の一覧です。名前とoptionが必要で、矢印キーで選択を動かします。合う場合は<select>を優先してください。
<ul role="listbox" aria-label="City" tabindex="0">
<li role="option" aria-selected="true">Tokyo</li>
</ul>role= "menu"アプリケーションのメニューのような、操作や設定の一覧です。サイトのナビゲーションリンクには使いません。スクリーンリーダーはメニュー用の動きに切り替わり、矢印キーでの操作を期待します。
<ul role="menu" aria-label="File">
<li role="menuitem" tabindex="-1">Open</li>
</ul>role= "menubar"デスクトップアプリのように常に表示されるメニューの列です。左右の矢印キーで項目間を移動します。menuと同じく、Webサイトのナビゲーションには使いません。
<ul role="menubar" aria-label="Editor">
<li role="menuitem" aria-haspopup="menu" tabindex="0">File</li>
</ul>role= "radiogroup"一組のラジオボタンを一つの名前でまとめます。名前を付けてください。HTML標準のラジオボタンなら、<fieldset>と<legend>で同じことができます。
<div role="radiogroup" aria-labelledby="ship-label">
<div role="radio" aria-checked="true" tabindex="0">Standard</div>
</div>role= "tablist"タブの組を入れる要素です。tabを含む必要があり、名前を付けます。タブを縦に並べる場合はaria-orientation="vertical"を付けます。
<div role="tablist" aria-label="Product">
<button role="tab" aria-selected="true">Details</button>
</div>role= "tree"フォルダーのように、開閉できる項目の一覧です。名前とtreeitemが必要で、矢印キーで項目を移動し、開閉します。
<ul role="tree" aria-label="Files">
<li role="treeitem" aria-expanded="false" tabindex="0">Documents</li>
</ul>role= "treegrid"メールのスレッド一覧のように、行をtreeのように開閉できるgridです。行にaria-expandedとaria-levelを付けます。
<div role="treegrid" aria-label="Inbox">
<div role="row" aria-level="1" aria-expanded="true">…</div>
</div>role= "grid"カレンダーや表計算のように、矢印キーでセル間を移動する表です。Tab順に入るのは一つのセルだけです。中に操作できるものがなければ、通常の表を使います。
<div role="grid" aria-label="May 2026">
<div role="row">
<div role="gridcell" tabindex="0">1</div>
</div>
</div>role= "heading"セクションの見出しで、スクリーンリーダーの利用者は見出し間を移動します。aria-levelが必要です(省略すると、ブラウザーは通常レベル2として扱います)。<h1>〜<h6>を優先してください。
<div role="heading" aria-level="2">Delivery</div>これを使うガイド
role= "list"項目の一覧で、項目数とともに読まれます。listitemを含む必要があります。<ul>や<ol>を優先し、list-style: noneなどのCSSでSafariがリストと扱わなくなる場合だけロールを付け直します。
<ul role="list" class="plain">
<li>Free returns</li>
</ul>role= "listitem"リストの項目の一つで、listに含まれている必要があります。<li>を優先してください。
<div role="list">
<div role="listitem">Free returns</div>
</div>これを使うガイド
role= "table"操作できない、行と列のデータです。<table>を優先してください。このロールは他の要素で作った表のためのもので、中にrowとcellが必要です。
<div role="table" aria-label="Opening hours">
<div role="row">…</div>
</div>これを使うガイド
role= "row"table、grid、treegridのセルの行です。それらの中、またはその中のrowgroupに置く必要があります。<tr>を優先してください。
<div role="row">
<div role="cell">Mon–Fri</div>
</div>これを使うガイド
role= "rowgroup"表の見出し部分や本体のような行のまとまりです。<thead>、<tbody>、<tfoot>を優先してください。
<div role="rowgroup">
<div role="row">…</div>
</div>role="row"role= "columnheader"列の見出しで、その下の各セルと一緒に読まれます。<th scope="col">を優先してください。並べ替えできる表ではaria-sortを付けます。
<div role="columnheader" aria-sort="ascending">Price</div>これを使うガイド
role= "rowheader"行の見出しで、その行の各セルと一緒に読まれます。<th scope="row">を優先してください。
<div role="row">
<div role="rowheader">Saturday</div>
<div role="cell">10:00–16:00</div>
</div>これを使うガイド
role= "cell"静的な表のセルで、rowに含まれます。<td>を優先してください。CSSグリッドで組んだ表では、displayの変更で失われる表の構造をロールで補えます。
<div role="row">
<div role="cell">Mon–Fri</div>
<div role="cell">9:00–18:00</div>
</div>これを使うガイド
role= "img"インラインSVG、絵文字、アイコンフォントのように、複数の部品からなることもある一つの画像です。aria-labelまたはaria-labelledbyが必要で、子要素は読まれません。
<svg role="img" aria-label="4 out of 5 stars" viewBox="0 0 80 16">
…
</svg>role= "figure"図、グラフ、コード例のような独立した内容で、通常キャプションが付きます。<figure>と<figcaption>を優先してください。
<div role="figure" aria-labelledby="fig-1">
<img src="sales.png" alt="…">
<p id="fig-1">Sales by month</p>
</div>role= "group"関連するフォーム項目やメニュー内の区分のように、ランドマークではない関連要素のまとまりです。まとまりに意味があるなら名前を付けます。フォーム項目には<fieldset>を優先してください。
<div role="group" aria-labelledby="addr">
<h3 id="addr">Delivery address</h3>
…
</div>role= "toolbar"文字の書式ボタンのような、コントロールの組です。複数あるときは名前を付けます。Tab順に入るのは一つだけで、コントロール間は矢印キーで移動します。
<div role="toolbar" aria-label="Formatting">
<button type="button" aria-pressed="false">Bold</button>
</div>role= "separator"セクションやメニューの区分の区切りです。<hr>を優先してください。フォーカスできる区切りはペインの大きさを変えるウィジェットになり、aria-valuenowが必要です。
<div role="separator" aria-orientation="vertical" tabindex="0"
aria-valuenow="30" aria-label="Resize sidebar"></div>role= "tooltip"持ち主の要素にフォーカスやポインターがあるときに出る短い説明です。ツールチップ自身はフォーカスを受けません。持ち主がaria-describedbyでこれを指し、Escapeキーで隠せるようにします。
<button type="button" aria-describedby="tip">Share</button>
<div role="tooltip" id="tip">Copy a link to this page</div>これを使うガイド
role= "note"手順の横のヒントのように、本文を補足する注記です。
<div role="note">
<p>Tip: keep your receipt.</p>
</div>role= "article"投稿、コメント、商品カードのような、それだけで完結する内容です。<article>を優先してください。
<div role="article" aria-labelledby="post-1">
<h2 id="post-1">Spring menu</h2>
</div>role= "feed"最後まで進むと続きを読み込む、スクロールする記事の一覧です。記事にaria-posinsetとaria-setsizeを付け、追加中はフィードにaria-busyを設定します。
<div role="feed" aria-label="Posts" aria-busy="false">
<article aria-posinset="1" aria-setsize="-1">…</article>
</div>role= "meter"ディスク使用量やパスワードの強さのように、決まった範囲内の値です。進み具合には使いません。aria-valuenowと名前が必要です。<meter>を優先してください。
<div role="meter" aria-label="Storage used" aria-valuenow="72"
aria-valuemin="0" aria-valuemax="100"></div>role= "none"レイアウト用の表のように、要素自身のロールを取り除き、内容は残します。フォーカス可能な要素やグローバルなARIA属性を持つ要素では無視されます。presentationと同じです。
<table role="none">
<tr><td>…</td></tr>
</table>これを使うガイド
role= "presentation"noneの古い名前で、要素のロールを取り除き、内容は残します。フォーカス可能な要素やグローバルなARIAを持つ要素では無視されます。<img alt="">はすでにこのロールを持ちます。
<ul role="presentation">
<li role="presentation">…</li>
</ul>role= "application"スクリーンリーダーにすべてのキーをページへ渡させ、読み上げ用のキーを止めます。ほとんどの場合は誤りです。すべてのキーを自分で処理し、読む必要のないウィジェットだけに使います。
<div role="application" aria-label="Map">
…
</div>role= "banner"ロゴや主なナビゲーションを含む、サイト共通のヘッダーで、1ページに一つです。article、aside、main、nav、sectionの中にない<header>を優先してください。
<div role="banner">
<a href="/">Fern & Fold</a>
</div>role= "navigation"サイト内やページ内を移動するためのリンクの組です。複数あるときはそれぞれに名前を付け、名前に「ナビゲーション」は含めません。<nav>を優先してください。
<div role="navigation" aria-label="Breadcrumb">
…
</div>role= "search"サイトやページの検索を含む領域です。<search>を優先し、古いブラウザーに対応する場合は<form>にロールを付けます。
<form role="search" action="/search">
<input type="search" name="q" aria-label="Search">
</form>role= "main"ページの主な内容で、スキップリンクやスクリーンリーダーのショートカットの移動先です。表示されるのは1ページに一つです。<main>を優先してください。
<div role="main" id="content">
<h1>Spring menu</h1>
</div><main>これを使うガイド
role= "region"ランドマークの一覧に載せるほど重要なセクションです。名前があるときだけランドマークになります。aria-labelledbyを付けた<section>がこのロールを持ちます。
<section aria-labelledby="cart-title">
<h2 id="cart-title">Your bag</h2>
</section>role= "form"フォームを含む領域です。名前があるときだけランドマークになるため、見つけてほしいフォームには名前を付けます。aria-labelかaria-labelledbyを付けた<form>を優先してください。
<div role="form" aria-label="Newsletter">
…
</div>role= "complementary"関連リンクのように、本文を補い、それだけでも意味の通る内容です。複数あるときは名前を付けます。<aside>を優先してください。
<div role="complementary" aria-label="Related articles">
…
</div>role= "contentinfo"著作権表示やポリシーへのリンクを含む、サイト共通のフッターで、1ページに一つです。article、aside、main、nav、sectionの中にない<footer>を優先してください。
<div role="contentinfo">
<a href="/privacy">Privacy</a>
</div>これを使うガイド
role= "status"「保存しました」や結果の件数のような案内で、スクリーンリーダーの手が空いたときに読まれます(polite、atomic)。メッセージが届く前から、空のまま置いておきます。
<p role="status"></p><output>aria-atomicrole= "alert"読み上げ中の内容を中断してすぐに読まれる、緊急のメッセージです(aria-live="assertive")。すぐに対応が必要なメッセージだけに使い、メッセージが届く前からページに置いておきます。
<p role="alert"></p>role="alertdialog"role= "log"チャットのように、新しい項目が順に追加される領域です。politeなので、新しい項目はスクリーンリーダーの手が空いたときに読まれ、古い項目は繰り返されません。
<div role="log" aria-label="Chat">
<p>Sam: On my way</p>
</div>aria-relevantこれを使うガイド
role= "timer"経過時間や残り時間のカウンターです。変化は読まれない(aria-live="off")ため、動き続ける時計がページの読み上げを妨げません。区切りの時点は別に知らせます。
Sale ends in <span role="timer">02:14:09</span>これを使うガイド
role= "dialog"ページの上に開き、操作するウィンドウです。名前を付け、フォーカスを中に移し、ページを操作できなくする場合はaria-modal="true"を付けます。showModal()で開く<dialog>を優先してください。
<div role="dialog" aria-modal="true" aria-labelledby="d-title">
<h2 id="d-title">Edit address</h2>
</div>aria-modalこれを使うガイド
role= "alertdialog"「このファイルを削除しますか?」のように、応答が必要な緊急のメッセージを持つダイアログです。名前を付け、aria-describedbyで説明を結び付け、フォーカスを中に移します。
<div role="alertdialog" aria-modal="true" aria-labelledby="d-title"
aria-describedby="d-text">
…
</div>aria-labelstring見える文字がない要素、たとえばアイコンだけのボタンに、アクセシブル名を付けます。役割のないdivやspanではなく、操作できる要素やランドマークに使います。見える文字があるときは、音声操作で言えるよう、その文字を名前に含めます。
<button type="button" aria-label="Search">
<svg aria-hidden="true">…</svg>
</button>aria-labelledbyID reference listほかの要素の文字をidで指して、その要素の名前にします。画面に見える文字と名前がずれません。aria-labelや要素自身の内容より優先され、非表示の要素も指せます。
<h2 id="billing">Billing address</h2>
<section aria-labelledby="billing">…</section>aria-describedbyID reference list名前に説明を加える要素をidで指します。入力欄の下にあるヒントやエラーなどです。スクリーンリーダーはふつう名前と役割の後に読みますが、フォーカスしたときにしか読まないものもあるため、欠かせない情報をここだけに置かないでください。
<label for="pw">Password</label>
<input id="pw" type="password" aria-describedby="pw-hint">
<p id="pw-hint">At least 12 characters.</p>aria-descriptionstring説明を文字列で直接与えます。指す要素のないaria-describedbyのようなものです。見える利用者にも必要な文字は、ページに置いてaria-describedbyで指してください。
<button type="button" aria-description="Opens in a new window">Help</button>aria-detailsID referenceグラフを説明する表のように、詳しく構造のある説明を持つ要素を指します。aria-describedbyと違って一続きの文として読み上げられるのではなく、対応するスクリーンリーダーでは詳細があることが伝わり、利用者がそこへ移動できます。
<img src="sales.png" alt="Sales by quarter" aria-details="sales-table">
<table id="sales-table">…</table>aria-roledescriptionstring読み上げられる役割の名前を、独自の言葉に置き換えます。カルーセルのグループを「スライド」と読ませる場合などです。使うのはまれにとどめ、実際の役割を持つ要素にだけ付けます。汎用的なdivやspanには付けず、よく知られたウィジェットの名前も変えないでください。
<div role="group" aria-roledescription="slide" aria-label="2 of 5">
…
</div>role="group"これを使うガイド
aria-expandedtruefalseundefined操作で表示・非表示が切り替わる内容が、開いているかどうかを表します。パネルではなく、切り替えるボタン、メニューボタン、コンボボックスに付け、そのたびに更新します。何も開かない操作には付けません。
<button type="button" aria-expanded="false" aria-controls="faq-1">
Delivery times
</button>
<div id="faq-1" hidden>…</div>aria-controls<details>role="combobox"hiddenaria-haspopupfalsetruemenulistboxtreegriddialog操作するとポップアップが開くことと、その種類を伝えます。trueはmenuと同じ意味です。role="menu"のメニューのように、開く要素が本当にその役割を持つときにだけ使います。ふつうの内容を表示する開閉ボタンには、代わりにaria-expandedを使います。
<button type="button" aria-haspopup="menu" aria-expanded="false"
aria-controls="actions">Actions</button>aria-pressedtruefalsemixedundefinedボタンを切り替えボタンにし、押されているかを伝えます。太字やミュートなどです。状態が変わっても名前は変えません。ラベルとaria-pressedの両方を変えると、同じことを二重に伝えてしまいます。
<button type="button" aria-pressed="false">Mute</button>aria-checkedtruefalsemixedundefined独自に作ったチェックボックス、ラジオボタン、スイッチ、チェック付きメニュー項目の状態です。mixedは、一部だけチェックされたグループを表すチェックボックスに使います。変わるたびに更新します。HTML標準のinput type="checkbox"には不要です。
<div role="checkbox" aria-checked="false" tabindex="0">
Subscribe
</div>aria-selectedtruefalseundefinedタブリスト、リストボックス、グリッド、ツリーで、選ばれている項目を表します。開いているタブや選んだ選択肢です。チェックボックス(aria-checked)や、メニュー内の現在のページ(aria-current)には使いません。
<button role="tab" aria-selected="true" aria-controls="panel-1">
Details
</button>aria-disabledtruefalse要素を無効と伝えながら、フォーカスと読み上げの順序には残します。利用者は見つけて理由を知ることができます。disabled属性と違って何も止めないため、クリックやキー操作はスクリプトで無視させます。
<button type="submit" aria-disabled="true"
aria-describedby="why">Pay now</button>aria-readonlyこれを使うガイド
aria-readonlytruefalse独自に作ったウィジェットの値を、読んだりフォーカスしたりはできても変えられないことを伝えます。グリッドのセルやテキストボックスなどです。HTML標準のinputではreadonly属性を使います。
<div role="textbox" aria-readonly="true" tabindex="0"
aria-label="Order number">A-10293</div>aria-requiredtruefalse入力が必須であることを伝えます。スクリーンリーダー向けで、フォームの送信は止めません。HTML標準の入力欄ではrequired属性が両方を行います。どちらの場合も、見えるラベルにも必須であることを示します。
<p id="size-q">Size (required)</p>
<div role="radiogroup" aria-labelledby="size-q" aria-required="true">
<div role="radio" aria-checked="false" tabindex="0">Small</div>
…
</div>aria-invalidaria-invalidfalsetruegrammarspelling入力値が検証に通らないことを伝え、スクリーンリーダーが「無効」と読み上げるようにします。入力前ではなく、送信時か欄を離れたときに付け、aria-describedbyやaria-errormessageで指す見えるメッセージと組み合わせます。
<label for="zip">Postcode</label>
<input id="zip" aria-invalid="true" aria-describedby="zip-err">
<p id="zip-err">Enter a 7-digit postcode.</p>aria-errormessageID reference入力欄のエラーメッセージを持つ要素を指します。欄がaria-invalid="true"のときにだけ使われます。対応はまだばらつきがあるため、aria-describedbyでも同じメッセージを指すサイトが多くあります。
<label for="email">Email</label>
<input id="email" aria-invalid="true" aria-errormessage="email-err">
<p id="email-err">Enter an email address like [email protected].</p>aria-placeholderstring独自に作った空のテキストボックスや検索欄に表示される短いヒントで、placeholder属性にあたります。ラベルの代わりにはならないため、名前も別に付けます。
<div role="textbox" contenteditable="true" aria-label="Note"
aria-placeholder="Add a note"></div>aria-autocompletenoneinlinelistbothコンボボックスや入力欄が、入力中に補完を出すことを伝えます。inlineは欄の中で文字を補い、listは候補の一覧を出し、bothは両方です。動きを説明するだけなので、補完そのものはスクリプトで作ります。
<input role="combobox" aria-label="City" aria-autocomplete="list"
aria-expanded="false" aria-controls="cities">aria-multilinetruefalserole="textbox"が複数行を受け付け、Enterキーで送信ではなく改行できることを伝えます。キーの処理はスクリプトで行います。HTML標準のtextareaでは不要です。
<div role="textbox" contenteditable="true"
aria-multiline="true" aria-labelledby="msg-label"></div>aria-multiselectabletruefalseリストボックス、グリッド、タブリスト、ツリーで、複数の項目を同時に選べることを伝えます。選んだ各項目にはaria-selectedを付けます。
<ul role="listbox" aria-multiselectable="true" aria-label="Toppings">
<li role="option" aria-selected="true">Cheese</li>
</ul>aria-modaltruefalseダイアログがモーダルであることを伝え、スクリーンリーダーがページの残りを操作できないものとして扱うようにします。背後のページが本当に操作できないときにだけ、role="dialog"やalertdialogに付けます。showModal()で開いた<dialog>には不要です。
<div role="dialog" aria-modal="true" aria-labelledby="dlg-title">
<h2 id="dlg-title">Delete file?</h2>
</div>aria-levelinteger (1 or more)階層の中での深さです。role="heading"(必須。省略するとブラウザーは通常2として扱います)、ツリーの項目、ツリーグリッドの行に使います。見出しには、role="heading"とaria-levelより、h1〜h6要素を使うほうが確実です。
<div role="heading" aria-level="2">Shipping</div>これを使うガイド
aria-orientationhorizontalverticalundefinedスライダー、スクロールバー、区切り線、リストボックス、メニュー、タブリスト、ツールバーなどが横向きか縦向きかを伝えます。どの矢印キーで移動するかの手がかりになります。役割の既定と違うときに指定します。
<div role="tablist" aria-orientation="vertical" aria-label="Settings">
…
</div>aria-sortascendingdescendingnoneother表やグリッドが、この列見出しでどちら向きに並べ替えられているかを伝えます。いま並べ替えに使っている見出しにだけ付け、順序を変えるボタンは見出しの中に置きます。
<th aria-sort="ascending">
<button type="button">Price</button>
</th>aria-valuenownumber独自に作ったスライダー、スピンボタン、メーター、スクロールバー、プログレスバーの現在の値です。値が変わるたびに更新します。進み具合が分からないプログレスバーでは付けません。
<div role="progressbar" aria-valuemin="0" aria-valuemax="100"
aria-valuenow="60" aria-label="Uploading"></div>aria-valueminnumber独自に作ったスライダー、スピンボタン、プログレスバー、メーター、スクロールバーの最小値です。HTML標準のrange入力やmeterではmin属性を使います。
<div role="spinbutton" aria-valuemin="1" aria-valuemax="10"
aria-valuenow="2" aria-label="Quantity" tabindex="0">2</div>aria-valuemaxnumber独自に作ったスライダー、スピンボタン、プログレスバー、メーター、スクロールバーの最大値です。HTML標準のinput type="range"、progress、meterではmax属性を使います。
<div role="slider" aria-valuemin="0" aria-valuemax="100"
aria-valuenow="40" aria-label="Volume" tabindex="0"></div>aria-valuetextstring数値だけでは意味が伝わりにくいときに、aria-valuenowを読みやすい形にしたものです。「水曜日」や「8段階中3」などです。スクリーンリーダーは数値の代わりにこれを読みます。
<div role="slider" aria-valuemin="1" aria-valuemax="7" aria-valuenow="3"
aria-valuetext="Wednesday" aria-label="Day" tabindex="0"></div>aria-controlsID reference list操作によって変わる要素を指します。タブや開閉ボタンのパネル、コンボボックスのリストボックスなどです。これを使うスクリーンリーダーは少ないため、aria-expandedや分かりやすい名前の代わりにはなりません。
<button type="button" aria-expanded="true" aria-controls="filters">
Filters
</button>
<div id="filters">…</div>aria-ownsID reference listDOMの別の場所にある要素を、アクセシビリティツリーではこの要素の子として扱わせます。bodyの末尾に描かれたポップアップなどです。DOMの中で要素を移動できないときにだけ使い、すでに子孫である要素には使いません。
<div role="menuitem" aria-haspopup="menu" aria-expanded="false"
aria-owns="more-menu" tabindex="-1">More</div>
<div id="more-menu" role="menu">…</div>aria-activedescendantID referenceキーボードのフォーカスをウィジェット自身に置いたまま、その中で操作中の選択肢や項目を指します。矢印キーで候補を移動する間も入力欄にフォーカスが残るコンボボックスなどです。移動のたびに更新し、強調表示もこの値から描きます。
<input role="combobox" aria-label="City" aria-expanded="true" aria-controls="list"
aria-activedescendant="opt-2">
<ul id="list" role="listbox">…</ul>aria-flowtoID reference list次に読む要素を指して、別の読み順を示します。対応するスクリーンリーダーは少ないため、代わりにDOMの順序を正しくしてください。
<div id="step-1" aria-flowto="step-2">…</div>
<div id="step-2">…</div>aria-ownsaria-posinsetinteger (1 or more)すべての項目がDOMにあるわけではないとき、選択肢、タブ、ツリーの項目、フィードの記事などの、集合の中での位置を伝えます。aria-setsizeと組み合わせます。項目がすべてあればブラウザーが数えます。
<article aria-posinset="11" aria-setsize="-1" aria-labelledby="t11">
…
</article>aria-setsizeinteger (-1 if unknown)項目が属する集合の項目数を、すべてがDOMにないときに伝えます。スクリーンリーダーが「40件中3件目」と言えるようになります。終わりのないフィードのように数が分からないときは-1にします。
<li role="option" aria-posinset="3" aria-setsize="40">Osaka</li>aria-rowcountinteger (-1 if unknown)表、グリッド、ツリーグリッドの行の一部だけがDOMにあるとき、たとえばページ送りや遅延読み込みのときに、行の総数を伝えます。総数が分からないときは-1にします。
<table aria-rowcount="500">
<tr aria-rowindex="41">…</tr>
</table>aria-rowindexinteger (1 or more)すべての行がDOMにあるわけではない表、グリッド、ツリーグリッドで、行やセルの位置を1から数えて伝えます。aria-rowcountと組み合わせます。
<div role="row" aria-rowindex="41">
<div role="gridcell">Order 41</div>
</div>aria-rowspaninteger (0 or more)divで作ったARIAの表やグリッドで、セルが何行にまたがるかを伝えます。HTML標準のtdやthではrowspan属性を使います。
<div role="rowheader" aria-rowspan="3">Morning</div>aria-colcountinteger (-1 if unknown)表やグリッドの列の一部だけがDOMにあるとき、たとえば仮想化されたグリッドで、列の総数を伝えます。総数が分からないときは-1にします。
<div role="grid" aria-colcount="24" aria-label="Schedule">
…
</div>aria-colindexinteger (1 or more)すべての列がDOMにあるわけではない表やグリッドで、セルの列の位置を1から数えて伝えます。aria-colcountと組み合わせます。
<div role="row">
<div role="gridcell" aria-colindex="7">Room 4</div>
</div>aria-colspaninteger (1 or more)divで作ったARIAの表やグリッドで、セルが何列にまたがるかを伝えます。HTML標準のtdやthではcolspan属性を使います。
<div role="cell" aria-colspan="2">Total</div>aria-liveoffpoliteassertive要素をライブリージョンにし、内容の変化をスクリーンリーダーに読み上げさせます。politeは読み上げの区切りを待ち、assertiveは割り込むことがあります。文字が変わる前からページに置いておく必要があります。ほとんどのメッセージにはpoliteかrole="status"を使います。
<div aria-live="polite"></div>
<!-- later, from script: -->
<!-- region.textContent = "Saved"; -->aria-atomictruefalseライブリージョンの一部が変わったとき、全体を読む(true)か、変わった部分だけを読む(false、既定)かを決めます。role="status"とrole="alert"には最初からtrueが含まれるので、自分で書くことはまれです。aria-liveだけを付けた領域で、「かごに3点」のように残りと合わせないと意味が通じない変化があるときに付けます。
<p aria-live="polite" aria-atomic="true">
<span id="count">3</span> items in your basket
</p>aria-relevantadditionsremovalstextall (space-separated)ライブリージョンのどの変化を読み上げるかを決めます。既定はadditions textです。removalsが役立つ場面は少なく、対応も不十分なため、参加者一覧のように項目が消えることに意味がある場合を除き、既定のままにします。
<ul aria-live="polite" aria-relevant="additions removals"
aria-label="People in this chat">…</ul>aria-busytruefalse要素が更新中であることを伝え、falseに戻るまで支援技術が変化の読み上げを待てるようにします。ライブリージョンやフィードが複数の変化をまとめて読み込む間に付けます。
<section aria-live="polite" aria-busy="true">
Loading results…
</section>aria-currentpagesteplocationdatetimetruefalse集合の中の現在の項目を表します。いま見ているページへのリンク、手続きの現在の段階、カレンダーの今日などです。ナビゲーションにはaria-selectedではなくこれを使い、見た目でも同じことを示します。
<nav aria-label="Main">
<a href="/shop" aria-current="page">Shop</a>
</nav>aria-keyshortcutsstring (keys joined with +, shortcuts separated by spaces)要素を操作したりフォーカスしたりするキーボードショートカットを、支援技術に伝えます(例:Control+S)。説明するだけなので、キー操作はスクリプトで処理し、ショートカットは見た目でも示します。
<button type="button" aria-keyshortcuts="Control+S">
Save <kbd>Ctrl+S</kbd>
</button>accesskeyこれを使うガイド