本文へ移動
easeweb
ご相談

修正ガイド

混同しやすいHTMLとARIA

似ているのに動きが違う属性やロールを並べて比べ、どれを使うべきかをまとめました。

コンテンツを隠す

名前画面に表示キーボードで届くスクリーンリーダーが読む
hiddenいいえいいえいいえ
inertはいいいえいいえ
aria-hidden="true"はいフォーカスできれば届く(避けること)いいえ

hidden表示されず、キーボードでも届かず、読まれない

お支払い リネンのティータオル 12.00

inert表示はされるが、キーボードで届かず、読まれない

送料無料

aria-hidden="true"アイコンは見えるが読まれず、横の文字だけが読まれる

どれを使うか

hidden
閉じたパネルなど、まだ誰にも見せない内容。
inert
自作のモーダルの背後のページや、表示はするがまだ操作させない内容。
aria-hidden="true"
アイコンと横のラベルのように、近くの文字と重複する装飾。フォーカスできるものには付けません。

意味を取り除く

名前取り除くもの内容は読まれる
role="none"要素のロールはい
role="presentation"要素のロールはい
aria-hidden="true"要素とその中のすべていいえ
alt=""画像読む内容なし
リネンのティータオル12.00

role="none"表・行・セルの意味は消え、文字は読まれる

role="presentation"role="none"と同じ。古い名前

5点中4.5点

aria-hidden="true"星とその中身は読まれず、文字は読まれる

alt=""装飾の画像なので、読む内容はない

どれを使うか

role="none"
レイアウトのためだけの表や、ロールが邪魔になるマークアップ。
role="presentation"
role="none"と同じで、その古い名前です。
aria-hidden="true"
近くの文字と重複する装飾。
alt=""
装飾の画像。

使えない・変えられない入力欄

名前フォーカスできる値を変えられるフォームで送信される
disabledいいえいいえいいえ
aria-disabled="true"はいスクリプトで止めない限り変わるネイティブの入力欄なら送信される
readonlyはいいいえはい

クーポンは11月1日から使えます。

disabledフォーカスできず、変えられず、送信されない

aria-disabled="true"フォーカスできるので見つけられる。動作はスクリプトで止めている

readonlyフォーカスとコピーはできるが変えられない。送信される

どれを使うか

disabled
本当に今は使えないコントロール。理由を近くに表示します。
aria-disabled="true"
見つけて読み上げを聞けるようにしたいコントロール。足りない項目を説明する送信ボタンなど。
readonly
読んでコピーはできるが変えられない値。参照番号など。

これらの使い分けを扱うガイド

名前と説明

名前与えるもの文字の出どころ見える
<label>名前自身の文字はい
aria-labelledby名前idで指したほかの要素通常は見える
aria-label名前属性の値いいえ
aria-describedby説明idで指したほかの要素通常は見える
titleほかに名前がないときだけ名前属性の値マウスを載せたときだけ

<label>名前:「メールアドレス」(ラベルの文字から)

お届け先

aria-labelledby名前:「お届け先」(idで指した見出しから)

aria-label="検索"名前:「検索」(画面には出ない)

8文字以上

aria-describedby説明:「8文字以上」(名前の後に読まれる)

title="店舗の場所"名前:「店舗の場所」(iframeにはほかに名前がない)

どれを使うか

<label>
見えるすべての入力欄。
aria-labelledby
ダイアログの見出しのように、名前がすでに画面にあるウィジェットや領域。
aria-label
アイコンボタンのように、見える文字がないコントロール。見える文字があれば含めます。
aria-describedby
ヒントやエラーメッセージ。名前の後に読まれます。
title
<iframe>の名前。それ以外では頼りにしません。

変化を読み上げる

名前割り込み方変化したときに読む範囲
role="status"polite:待つメッセージ全体(aria-atomic="true"が組み込み済み)
role="alert"assertive:割り込むことがあるメッセージ全体(aria-atomic="true"が組み込み済み)
aria-live="polite"polite:待つ変わった部分だけ(aria-atomic="true"を付ければ全体)
aria-live="assertive"assertive:割り込むことがある変わった部分だけ(aria-atomic="true"を付ければ全体)
role="log"polite:待つ追加分
role="timer"off読まない

role="status"polite:待つ。メッセージ全体を読む

role="alert"assertive:割り込むことがある。メッセージ全体を読む

残り3点

aria-live="polite"polite:待つ。カートに入れると変わる

aria-live="assertive"assertive:割り込むことがある。読むのは増えた項目だけで、リストのまま

  1. まだ質問はありません

role="log"末尾に増えた項目が読まれる

セール終了まで 4:59

role="timer"off:毎秒は読まれない

どれを使うか

role="status"
検索結果、「保存しました」、読み込み中など、待てるもの全般。
role="alert"
すぐ対応が必要なエラーや警告。控えめに使います。
aria-live="polite"
待てるメッセージで、変わった部分だけを読ませたいときや、要素のロールを残したいとき。
aria-live="assertive"
同じ条件で緊急のもの。リストのままにしたいエラー一覧など。それ以外はrole="alert"を使います。
role="log"
チャットや更新履歴のように、新しい項目が末尾に増えるもの。
role="timer"
刻々と変わる時計やカウントダウン。毎回読ませてはいけません。

pressed・expanded・checked・selected・current

名前付ける要素伝えること
aria-pressedボタン切り替えがオンかオフか
aria-expanded内容を開閉するボタン操作対象が開いているか閉じているか
aria-checkedチェックボックス、ラジオ、スイッチチェックされている、オンである
aria-selectedタブ、選択肢、行、セルまとまりの中で選ばれている
aria-currentどの要素にも今いる場所である

aria-current="page"「キッチン」に付く

リネンのティータオル

aria-pressed="false"

50×70cm、生成りのリネン。

aria-selected="true"「詳細」に付く

aria-expanded="false"

aria-checked="true"

どれを使うか

aria-pressed
ミュートや太字のように、オンとオフを切り替えるボタン。
aria-expanded
開閉ボタン、折りたたみボックス、メニューボタン。
aria-checked
自作のチェックボックス、ラジオ、スイッチ。ネイティブの入力欄には不要です。
aria-selected
選ばれたタブや、リストボックスやグリッドで選ばれた項目。
aria-current
ナビゲーションの現在のページや、手順の現在のステップ。

ダイアログとポップオーバー

名前モーダルフォーカスが中に移るEscapeで閉じる自分で作るもの
<dialog> with showModal()はいはいはいわずか(名前と閉じるボタン)
role="dialog"自分で作れば自分で移せばスクリプトで作ればすべて
role="alertdialog"自分で作れば自分で移せばスクリプトで作れば<dialog>に付けない限りすべて
popoverいいえいいえpopover="auto"なら閉じるわずか

配送先 12 Mill Lane, Leeds

住所を編集

<dialog>閉じている。showModal()で開く。

role="dialog"閉じている。<dialog>を使えない場合だけ。

この住所を削除しますか?

12 Mill Lane, Leeds

role="alertdialog"閉じている。答えが必要な質問のため、<dialog>に付ける。

ティータオルは50×70cmです。

popover="auto"閉じている。開いてもフォーカスは移らない。

どれを使うか

<dialog> with showModal()
すべてのモーダルダイアログ。
role="dialog"
<dialog>を使えない場合だけ。
role="alertdialog"
削除の確認のように、答えが必要な緊急の質問。
popover
ページの上に重なる、モーダルでないメニュー、ピッカー、説明。

選択肢から選ぶ

名前自由入力できる自分で作るもの
<select>いいえなし
<datalist>はいなし(見た目は変えられない)
role="listbox"いいえキー操作、フォーカス、状態
role="combobox"入力できる形ならキー操作、ポップアップ、状態

<select>自由入力はできない。作るものはない。今は「M」

<datalist>自由入力できる。一覧は候補を出すだけ。見た目は変えられない。

柄
無地
ストライプ
チェック

role="listbox"自由入力はできない。キー操作、フォーカス、状態はスクリプトで付けた。今は「無地」

role="combobox"入力できる形なので自由入力できる。キー操作、ポップアップ、状態はスクリプトで付けた。

どれを使うか

<select>
決まった一覧から1つ以上を選ぶ。
<datalist>
何でも入力できる欄への候補。
role="listbox"
<select>ではできない見た目の選択肢一覧。
role="combobox"
自動補完や検索できるピッカー。

必須の入力欄

名前ブラウザーが送信を止める必須と読み上げられる
requiredはいはい
aria-required="true"いいえはい

required入力するまでブラウザーが送信を止める。必須と読み上げられる

配送方法

aria-required="true"必須と読み上げられるが、ブラウザーは止めない。確認はスクリプトで行う

どれを使うか

required
ネイティブの入力欄。
aria-required="true"
自作のラジオグループなど、自分で作る入力欄。検証も自分で書きます。

これらの使い分けを扱うガイド

セクションとランドマーク

名前ランドマーク
<main>はい
<aside>ページ全体の階層なら
<section>名前があるときだけ
<article>いいえ

main

リネンのティータオル

50×70cm、生成りのリネン。

<main>ランドマーク。ページに1つだけ。このページには既にあるため、ここではdivで描いている

<aside>ページ全体の階層にあればランドマーク

section

レビュー

5点中4.5点(12件)。

<section>aria-labelledbyで名前「レビュー」があるのでランドマーク

article

リネンのエプロン

綿のひも、フリーサイズ。

<article>ランドマークではない。単独で完結する内容

どれを使うか

<main>
ページの主な内容。1つだけ。
<aside>
サイドバーのように、関連はあるが独立した内容。
<section>
1つのテーマを扱う、見出し付きのまとまり。
<article>
投稿、コメント、商品カードのように、単独で完結するもの。

progressかmeterか

名前示すもの値がないとき
<progress>作業の進み具合処理中であること
<meter>決まった範囲の中の測定値使えない

ティータオルの写真

<progress>作業の進み具合:100中0。アップロードで始まる。

強さ:とても弱い

<meter>0から4の範囲の測定値:今は0。値は必須。

どれを使うか

<progress>
アップロードなどの時間のかかる作業。
<meter>
ディスク使用量、パスワードの強さ、評価。

各名前から、 HTML・ARIAリファレンスの項目(使用例と使っているガイド)に移動できます。