本文へスキップ

ライブリージョンの読み上げ順

「カートに追加」は aria-live=polite で今の読み上げが終わってから、エラーは role=alert(assertive)で割り込んで読まれる。帯に読み上げ中の文と待ち行列を可視化。

プレビュー

クリック

操作クリック/タップで動きます。

デザインの要点

  • 成功・件数の更新は polite。ユーザーが今聞いている文を遮らないので、連打しても順番に届く
  • エラーだけ assertive(role=alert)。割り込みは今の読み上げを捨てるので、本当に止めるべき事だけに使う
  • ライブリージョンの要素は最初から DOM に置いておき、中身のテキストだけ差し替える。後から要素ごと足すと読まれないことがある
  • 見た目の通知(トースト)とライブリージョンは別物。画面に出ていても aria-live が無ければ読み上げは起きない

コード(コピーして使えます)

<div class="lv-wrap">
  <div class="lv-product">
    <div class="lv-thumb" aria-hidden="true"></div>
    <div class="lv-info"><strong>ひのきのまな板 M</strong><span>¥3,980・在庫あり</span></div>
  </div>
  <div class="lv-actions">
    <button type="button" id="lv-add" class="lv-primary">カートに追加</button>
    <button type="button" id="lv-fail" class="lv-secondary">送信して失敗させる</button>
  </div>
  <p class="lv-status" role="status" aria-live="polite" id="lv-polite"></p>
  <p class="lv-alert" role="alert" id="lv-alert"></p>
  <div class="lv-band">
    <div class="lv-row"><span class="lv-tag">読み上げ中</span><span id="lv-now">(待機中)</span></div>
    <div class="lv-progress" aria-hidden="true"><span id="lv-bar"></span></div>
    <div class="lv-row"><span class="lv-tag">待ち行列</span><span id="lv-queue">—</span></div>
  </div>
</div>

タグ

同じカテゴリ「アクセシブルUI」のほかのパーツ

関連パーツ