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

読み上げられないお礼の文に差し替わるフォーム

送信に成功すると、メールマガジンの登録フォームが、読み上げられないお礼の段落に差し替わります。フォーカスのあった「登録する」ボタンも一緒に消えるため、フォーカスはページそのものに落ちます。

WCAG 2.2
SC 4.1.3AA· 2.1 で追加
必須とする規格
EN 301 549(EU)
問題あり signup.replaceWith(thanks);
アクセシビリティの問題を示した図: 全盲:いま、どこにいる?
01

問題

スクリーンリーダーの利用者は「登録する」を押しても何も聞こえず、操作していたボタンも消えるため、登録できたのかも、ページのどこにいるのかも分かりません。

02

試してみる

「登録する」を押して読み上げを聞き、続けてTabを押してください。

ページの下に、フォーカスの行き先とスクリーンリーダーの読み上げが表示されます。お礼の文は聞こえますか?次のTabはどこから始まりますか?

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

問題フォームと入れ替わるお礼の文

Fernhill Books

新刊は毎週木曜日に入荷します。営業時間は毎日9時から18時です。

営業時間と道順

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

(「登録する」を押してください)

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

03

修正方法

結果がフォームの場所に入るならそこへフォーカスを移し、そうでなければフォームを残して結果をステータス行に書き込みます。

  1. 1フォーカスのあるボタンを消すときは、代わりに現れたものへフォーカスを渡す。
  2. 2結果全体を、フォーカスを受ける要素の文か、送信前からあるステータス領域に入れる。
  3. 3失敗はステータス行で伝え、フォーカスはボタンに残す。
修正前 フォームと入れ替わるお礼の文
<section aria-labelledby="signup-title">  <h2 id="signup-title">メールマガジンに登録</h2>  <form id="signup">    <label for="signup-email">メールアドレス</label>    <input id="signup-email" name="email" type="email" autocomplete="email" required>    <button>登録する</button>  </form>  <p id="signup-message" role="status"></p></section>
修正後

フォーカスを受けるお礼の文

<section aria-labelledby="signup-title">  <h2 id="signup-title">メールマガジンに登録</h2>  <form id="signup">    <label for="signup-email">メールアドレス</label>    <input id="signup-email" name="email" type="email" autocomplete="email" required>    <button>登録する</button>  </form>  <p id="signup-message" role="status"></p></section>

AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得、または全ガイドをコーディングエージェントで使う。

04

デザインの案

お礼の表示がフォームの場所に入るなら、フォーカスも一緒に移せます。

フォームをお礼の表示に差し替える、3通りの描き方です。それぞれTabで「登録する」へ移動してEnterを押してください。2つはフォーカスの枠がお礼の表示に移り、1つはどこにも残りません。

デザインファイルで

  • お礼の表示が現れたら、キーボードのフォーカスがどこに移るかに印を付け、フォーカスの枠も描く。
  • お礼の文は、何が起きたかと次に何をすればよいかを、一文で書く。
  • 送信に失敗したときも描く。フォームはそのまま残し、その下にメッセージを出す。
  • お礼の表示の色の横にコントラスト比を書く。文字は最低4.5:1。

合格

  • 次の手順付きのカード フォームが白いカードに替わります。カードには青緑のチェックマーク、「メールをご確認ください」、アドレスが並び、「別のアドレスを使う」ボタンでフォームに戻れます。カードは現れると同時にフォーカスを受けるため、最初の行が読まれ、次のTabでボタンに届きます。青緑と白地のコントラスト比は9.08:1です。
  • 封筒の絵と中央ぞろえの見出し 淡い青緑の円に入った封筒の絵の下に、大きな文字の「登録が完了しました」と、次の手順を伝える一行が、フォームのあった場所の中央に並びます。見出しがフォーカスを受けるため、最初に読まれ、続く一行も読めます。白地の文字は14.66:1です。

不合格

  • フォームの場所に浮かび上がる「登録しました!」WCAG 4.1.3 フォームが消え、チェックマークと「登録しました!」が0.3秒ほどでその場所に浮かび上がります。動きは変化を示して止まりますが、何もフォーカスを受けません。Enterのあと、フォーカスの枠はどこにも表示されず、スクリーンリーダーにも何も聞こえません。新しい行にフォーカスを移せば、動きはそのまま残せます。この見本では、4秒後にフォームが戻ります。
05

修正の確認

マウスを使わない4つの確認

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

4件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。フォームのコンポーネント、スクリプト、埋め込みを変更した際は、再度確認します。

制限

フォーカスを受けた段落で何を読むか、削除された要素のあとどこから続けるかは、スクリーンリーダーやブラウザーによって異なります。このパターンは、成功するとその場で差し替わる短いフォーム一つを扱っています。ページに残って結果を伝えるフォームは読み上げられないフォームの送信結果で、新しいページや画面へ移るフォームは読み上げられないSPAの画面遷移で扱っています。埋め込みのフォームも含め、実際のフォームを、利用者が使うスクリーンリーダーで確認してください。

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

コードを更新しても、使いやすさを保つために

ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。

再テストの進め方