ユーザー補助

作成するフォームは人間のためです。 ユーザーはそれぞれ異なるデバイスを使用します。 マウス、タッチデバイス、キーボード、目の動きで制御されるデバイスを使用することがあります。スクリーン リーダーを使用するもの、小さな画面を使用するもの、テキスト拡大ソフトウェアを使用するものもあります。 すべてのユーザーがフォームの使用を希望しています。すべてのユーザーがフォームにアクセスして使用できるようにする方法をご覧ください。

フォーム項目の目的をユーザーが理解できるようにする

さまざまなフォーム コントロールから選択できます。 それぞれの共通点は何でしょうか。 すべてのフォーム コントロールに <label> 要素が関連付けられている必要があります。<label> 要素は、フォーム コントロールの目的を記述します。<label> テキストはフォーム コントロールと視覚的に関連付けられ、スクリーン リーダーによって読み上げられます。

また、<label> をタップまたはクリックすると、関連するフォーム コントロールがフォーカスされ、ターゲットが大きくなります。

有意な HTML を使用して組み込みのブラウザ機能にアクセスする

理論上は、<div> 要素のみを使用してフォームを作成できます。ネイティブの <form> のように表示することもできます。 非セマンティック要素の使用にはどのような問題がありますか。

組み込みのフォーム要素には、多くの組み込み機能があります。例を見てみましょう。

視覚的には、<input>(この例の最初の要素)と <div> は同じように見えます。<div> には contenteditable 属性があるため、両方にテキストを挿入することもできます。ただし、適切な <input> 要素を使用することと、<input> のような <div> を使用することの間には、多くの違いがあります。

スクリーン リーダーのユーザーが、<div> を入力要素として認識せず、フォームに入力できない。スクリーン リーダーのユーザーには「名前」としか聞こえません。この要素がテキストを追加するためのフォーム コントロールであることはわかりません。

<div>Name</div> をクリックしても、それに伴う <div> はフォーカスされませんが、<label><input>for 属性と id 属性を使用して接続されます。

フォームを送信した後、<div> に入力されたデータはリクエストに含まれません。JavaScript でデータをアタッチすることもできますが、デフォルトでは <input> がそれを行います。

組み込みのフォーム要素には、他の機能もあります。たとえば、適切なフォーム要素と正しい inputmode または type を使用すれば、画面キーボードに適切な文字が表示されます。<div>inputmode 属性を使用することはできません。

想定されるデータ形式をユーザーに認識してもらう

フォーム コントロールにはさまざまな検証ルールを定義できます。たとえば、フォームの項目に常に 8 文字以上含める必要がある場合などです。 minlength 属性を使用して、ブラウザに対する検証ルールを示します。確認ルールについてユーザーにも知らせるには、どうすればよいですか。ユーザーに伝えましょう。

目的のフォーマットに関する情報をフォーム コントロールの直下に追加します。 アシスト デバイスであることを明確にするため、フォーム コントロールで aria-describedby 属性を使用し、同じ値のエラー メッセージで id を使用して両方を接続します。

フォーム コントロールのエラー メッセージをユーザーが見つけられるようにする

検証に関する前のモジュールで、データエントリが無効な場合にエラー メッセージを表示する方法を学習しました。

<label for="name">Name</label>
<input type="text" name="name" id="name" required>

たとえば、フィールドに required 属性があり、無効なデータが入力された場合、ブラウザではフォームの送信時にフォーム コントロールの横にエラー メッセージが表示されます。また、スクリーン リーダーはエラー メッセージを読み上げます。

独自のエラー メッセージを定義することもできます。

この例では、エラー メッセージをフォーム コントロールに接続するため、さらに変更が必要です。

簡単な方法は、エラー メッセージ要素の id と一致するフォーム コントロールで aria-describedby 属性を使用することです。その後、エラー メッセージに対して aria-live="assertive" を使用します。ARIA のライブ リージョンでは、エラーが表示されると同時にスクリーン リーダーのユーザーにエラーが通知されます。

複数のフィールドを含むフォームの場合、この方法には問題があります。これは、複数のエラーが発生した場合に、通常 aria-live が最初のエラーしか通知しないということです。同じアクションに関する複数の aria-live のお知らせに関する記事で説明されているように、すべてのエラーを連結して 1 つのメッセージを作成できます。別の方法として、エラーがあることを通知し、フィールドがフォーカスされたときに個々のエラーを通知することもできます。

ユーザーがエラーを認識できるようにする

設計者は、:invalid 疑似クラスを使用して無効な状態を赤色にすることがあります。ただし、エラーや成功を伝える場合は、色のみに頼らないでください。赤 - 緑が見えない人は、緑と赤の境界線がほぼ同じになります。メッセージがエラーに関連しているかどうかを確認することはできません。

色に加えてアイコンを使用するか、エラー メッセージの先頭にエラータイプを付けます。

<span class="error">
  <strong>Error:</strong>Please use at least eight characters.
</span>

ユーザーがフォームを操作しやすくする

CSS を使用して、フォーム コントロールの表示順序を変更できます。 画面の表示順序とキーボード ナビゲーション(DOM 順序)のずれは、スクリーン リーダーとキーボードのユーザーにとって問題となります。

詳しくは、ページの表示順序を DOM 順序に合わせるをご覧ください。

現在フォーカスされているフォーム コントロールをユーザーが確認できるようにする

キーボードを使用してこちらのフォームに移動してください。フォーム コントロールがアクティブになると、スタイルが変わったことに気づきましたか? これがデフォルトのフォーカス スタイルです。 これは :focus CSS 疑似クラスでオーバーライドできます。:focus 内でどのスタイルを使用するにしても、常にデフォルト状態とフォーカス状態の視覚的な違いを認識できるようにしてください。

詳しくは、フォーカス インジケーターの設計をご覧ください。

フォームが使用可能であることを確認する

さまざまなデバイスでフォームに記入することで、多くの一般的な問題を特定できます。キーボードのみを使用するか、スクリーン リーダー(Windows では NVDA、Mac では VoiceOver など)を使用するか、ページを 200% にズームします。フォームは必ずさまざまなプラットフォーム(特に、毎日使用しないデバイスや設定)でテストしてください。どなたかはスクリーンリーダーか テキスト拡大ソフトを使っているかフォームへの記入を依頼します。 ユーザー補助に関するレビューは素晴らしく、実際のユーザーでテストするとさらに効果的です。

詳しくは、ユーザー補助機能の審査の実施と実際のユーザーでテストする方法をご覧ください。

リソース