Design Pattern

フォーム入力(テキスト+エラー)

テキスト入力フィールドは、ウェブフォームの最も基本的な構成要素です。ラベル、ヘルプテキスト、バリデーション、エラー表示を正しく実装することで、すべてのユーザーが迷わず入力できるフォームを作れます。

難易度: 初級 カテゴリ: フォーム

いつ使う / 使わない

使うべきとき

  • ユーザーから自由形式のテキスト入力を受け取る場合
  • 名前、メールアドレス、パスワード、検索キーワードなどの入力
  • 入力値のバリデーションとフィードバックが必要な場合

使わないべきとき

  • 選択肢が限定されている場合 → select 要素やラジオボタンを使う
  • 長文の入力が必要な場合 → textarea 要素を使う
  • 日付や数値など型が決まっている場合 → 専用の input type を使う

構造(Anatomy)

1 ラベル(入力内容の説明 + 必須マーク)
2 入力フィールド(テキスト入力欄)
3 ヘルプテキスト(入力のヒントや補足情報)
4 エラーメッセージ(バリデーション失敗時に表示)
  1. ラベル — 入力内容を説明。label 要素で for 属性を使って関連付け
  2. 入力フィールド — input 要素。type で入力種別を指定
  3. ヘルプテキスト — 入力のヒントや補足情報。aria-describedby で関連付け
  4. エラーメッセージ — バリデーション失敗時に表示。ARIA の alert ロールでスクリーンリーダーに通知

HTML 構造

重要なポイント

  • label で入力欄と明示的に関連付ける(placeholder はラベルの代替にならない)
  • required 属性で必須を宣言し、視覚的な「*」は aria-hidden 属性でスクリーンリーダーから隠す
  • aria-describedby でヘルプテキストとエラーメッセージの両方を関連付ける
  • エラー時に aria-invalid を true に設定し、エラーメッセージを alert ロールで通知する

CSS 実装

状態別のスタイル設計

  • デフォルト — 薄いボーダーで入力可能であることを示す
  • フォーカス — :focus-visible でキーボードフォーカス時のみリングを表示
  • エラー — aria-invalid 属性セレクターで赤ボーダーに変更
  • 無効 — 背景色を変えて操作不可であることを視覚的に表現

アクセシビリティ

WCAG 1.3.1 情報及び関係性

ラベルと入力欄の関係をプログラム的に関連付ける。視覚的な配置だけに頼らない。

WCAG 3.3.1 エラーの特定

入力エラーが自動検出された場合、エラーの箇所を特定し、テキストでユーザーに説明する。

WCAG 3.3.2 ラベル又は説明

ユーザー入力が必要な場合、ラベルまたは説明文を提供する。placeholder だけでは不十分。

WCAG 3.3.3 エラー修正の提案

エラーが検出された場合、修正方法を提案する。

キーボード操作

  • Tab で入力欄にフォーカス移動
  • 入力後 Tab でフォーカスが離れた時にバリデーション実行
  • Enter でフォーム送信

ライブデモ

基本入力

ラベル+入力+ヘルプテキストのシンプルな構成。

バリデーション

リアルタイムエラー表示。フォーカスが離れた時にバリデーション実行。

NG / OK 比較

ラベルなし vs ラベルありの比較。placeholder だけでは不十分。

よくある間違い

placeholder をラベルの代わりにする

placeholder は入力開始と同時に消えるため、ユーザーが何を入力すべきか忘れてしまう。

エラーを色だけで伝える

赤いボーダーだけではエラーの内容が分からない。テキストのエラーメッセージを必ず表示する。

aria-invalid を設定しない

視覚的にエラー表示していても、aria-invalid が設定されていないとスクリーンリーダーがエラー状態を認識できない。

エラーメッセージが曖昧

「入力エラーです」ではなく具体的な修正方法を提示する。