本文へ移動
easeweb
ご相談
トピックを検索

まったく読まれないか、1文字ごとに読まれてしまう文字数カウンター

ギフトメッセージ欄の残り文字数が画面上でしか変わらないか、キーを押すたびにassertiveのライブリージョンで書き換わるため、スクリーンリーダーは何も読まないか、1文字ごとに数字を読み上げてしまう

WCAG 2.2
SC 4.1.3AA· 2.1 で追加
必須とする規格
EN 301 549(EU)
問題あり count.textContent = countText(100 - gift.value.length);
アクセシビリティの問題を示した図: 全盲:あと何文字書けるの?
01

問題

スクリーンリーダーの利用者は、上限のある欄にあと何文字入るのかが分からないか、1文字入力するたびに数字を聞かされる

02

試してみる

ギフトメッセージを書き足して手を止め、読み上げを聞いてみましょう

  • 問題1: 少し入力し、欄がいっぱいになるまで続けます。欄の下の文字数は減っていきます。下の欄に、スクリーンリーダーの読み上げが出ます。

  • 問題2: 少し入力します。文字数は何回読まれますか?

  • 修正を適用します。 一言入力して1秒手を止め、上限まで入力して、もう一度手を止めます。

問題あり 修正できますか?

残り15文字

スクリーンリーダーの読み上げ:

(欄をクリックして入力してください)

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

上限が近いときだけ、入力が止まってから残り文字数を伝える

修正前

画面上でしか変わらない文字数

<label for="gift">ギフトメッセージ</label><textarea id="gift" name="gift" maxlength="100"></textarea><p id="gift-count" class="count">残り100文字</p>
問題点1点

文字数は正しく、欄のすぐ下にあります。問題は一つです。

  • p はライブリージョンではないため、文字数は画面上で変わるだけで読み上げられません。欄がいっぱいになっても、文字が入らなくなった理由は伝わりません。
修正後
修正上限が近いとき、入力が止まってから一度だけ伝える
<label for="gift">ギフトメッセージ</label><p id="gift-hint" class="hint">100文字まで入力できます。</p><textarea id="gift" name="gift" maxlength="100" aria-describedby="gift-hint"></textarea><p id="gift-count" class="count" aria-hidden="true">残り100文字</p><p id="gift-status" class="visually-hidden" role="status"></p>
修正の手順4ステップ
  1. 上限を欄の上のヒントに書き、aria-describedby で欄に結び付けます。利用者が欄に移動すると、入力を始める前に「100文字まで入力できます。」が読まれます。
  2. 見えている文字数の表示から aria-live を外し、aria-hidden="true" を付けます。画面が見える人には今までどおりキーごとに変わって見えますが、キーのたびに読まれることも、ページを読んだときに二重に読まれることもなくなります。
  3. role="status" の空の p を一つ、視覚的に隠して、最初からページに置きます。ここに書き込んだ内容は、スクリーンリーダーが読み上げ中の内容を読み終えてから伝えられます。
  4. 残り20文字からは、入力が1秒止まったときに、そこへ文字数を書き込みます。入力しているあいだ文字数は聞こえず、上限の近くで手を止めたときに「残り12文字」と一度だけ聞こえます。上限から離れると領域を空にするため、次に上限へ近づいたときの文字数も、変化として伝わります。

これで2つの修正前の問題はどちらも直り、4.1.3を満たします。文字数は、役割を通じて控えめに、手が止まるたびに一度だけスクリーンリーダーへ伝わります。まったく伝わらないことも、キーのたびに伝わることもありません。

混同しやすいもの
04

デザインの案

文字数の表示は、読み上げる言葉があれば、どんな形でもよい

ギフトメッセージの文字数の見せ方を、さらに4つ紹介します。どれも実際に入力できます。3つは上限が近いときに手を止めると文字数を言葉で伝え、1つはバーで描くだけで、何も読まれません。

デザインファイルで

  • 分数、リング、バーで描く文字数には、スクリーンリーダーが読む言葉(「残り15文字」など)を横に書き添える。
  • その言葉を読むタイミングを書く。入力が止まったとき、それも残り20文字からなど、上限が近いときだけにする。
  • 上限はラベルの下のヒントに書く。欄に移動したときに読まれる。
  • 上限を超えて入力できるなら、超えたときの欄も描き、何文字超えたかを言葉で示す。

合格

  • 100文字まで入力できます。

    上限が近づくと出る文字数と、超えた文字数 残り20文字になるまで欄の下には何も出さず、そこから「残り15文字」と出します。上限を超えると欄を赤く囲み、「3文字オーバー」と赤で示すため、メッセージを丸ごと貼り付けてから削れます。言葉は、入力が止まったときに読まれます。
  • 100文字まで入力できます。

    右下の分数 MaterialやAnt Designと同じく、入力した文字数と上限を「85 / 100」と欄の下に小さな灰色の文字で示します。キーのたびに読むと雑音になるため、これは読ませません。上限はヒントで伝え、上限が近いときに手を止めると「残り15文字」と読まれます。
  • 100文字まで入力できます。

    満ちていくリングと、上限近くで出る数 メッセージが長くなるにつれて小さなリングが満ちていき、Xの投稿欄と同じく、上限が近づくと中に数が出ます。動くのは文字を入力している間だけで、手を止めれば止まります。リング自体は何も読まれず、入力が止まったときに「残り15文字」と言葉で読まれます。

不合格

  • 数のないバーWCAG 4.1.3 欄の下で細いバーが伸び、上限が近づくと琥珀色に変わります。落ち着いた見た目ですが、数も言葉もどこにもないため、読み上げるものがありません。スクリーンリーダーの利用者は、欄が文字を受け付けなくなって初めて、いっぱいになったと気づきます。
05

修正の確認

4項目、マウス不要

確認方法: スクリーンリーダー、キーボード

4件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。入力欄のコンポーネント、文字数の表示、上限を変更した際は、再度確認します。

スクリーンリーダーでの aria-live="assertive"、role="status"、aria-describedbyの読まれ方 · 実機で確認(2026年10月)

制限

ライブリージョンの動きは、スクリーンリーダーやブラウザーによって異なります。入力を再開すると、まだ読んでいない控えめなメッセージを捨ててしまうものもあります。このパターンは、文字数に決まった上限がある一つの欄を扱っています。語数で制限する場合も、数える単位が変わるだけで同じです。下書きの保存のようなほかのステータスメッセージは、画面に出ても読み上げられないステータスメッセージで扱っています。実際の上限、ヒント、エラーメッセージを含めた実際の欄を、利用者が使うスクリーンリーダーで確認してください。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

EaseWebのサービス

修正した問題を、次のリリースで再発させない

このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。

サービス内容を見る