本文へスキップ

テキストフィールド

ラベル・補助テキスト付きの基本の入力欄。フォーカスで枠色とリングが変わり、通常状態とエラー状態を並べて比べられる。

プレビュー

入力

操作実際に入力して試せます。

仕様書

向く場面
  • フォームの基本となるラベル+補助文付き入力欄
  • 通常とエラーの見た目を揃えたいデザインシステム
  • フォーカスリングとエラー回復を見せたい見本
避ける場面
  • ラベルを省きたい省スペース欄(フローティングラベル)
  • 複数行の入力(テキストエリア)
構成要素
  • ラベル
  • 入力欄
  • 補助テキスト
  • エラーアイコン
  • エラーメッセージ
持っている状態
  • 通常
  • フォーカス
  • エラー
  • 成功
キーボード

Tab で欄を移動。エラー欄は正しい形式を打つとその場で回復する

支援技術

label[for] と aria-describedby で補助文・エラー文を結ぶ。aria-invalid を切替、エラー文は aria-live=polite で回復も読み上げる。エラーはアイコン+色+文言。reduced-motion で transition 無効

動き

枠色・リング 180ms(フォーカス/エラーの切替)。reduced-motion で無効

デザインの要点

  • フォーカスは枠色+3px の半透明リング。枠色だけだと、色の見分けが難しい人には移動が分からない
  • 補助文はエラーが出ても同じ場所に出す。位置が変わると、直したあとに何を読めばよいか探させる
  • エラーはアイコン・色・文言の3つで示す。赤い枠だけでは何が間違いか分からない
  • 正しい形式を打った瞬間に回復させる。送信まで赤いままだと「直したのに」と不安が残る
実装メモ

エラー状態は border-color と aria-invalid="true"、補助テキストの色で表現しています。実装ではフォーカスリングを box-shadow で描き、色だけに依存しないようアイコンとメッセージも添えています。

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

<form class="tf-form" novalidate>
  <div class="tf-field">
    <label class="tf-label" for="tf-normal">お名前</label>
    <input
      id="tf-normal"
      class="tf-input"
      type="text"
      placeholder="山田 太郎"
      autocomplete="name"
      aria-describedby="tf-help"
    />
    <p class="tf-help" id="tf-help">姓と名の間にスペースを入れてください</p>
  </div>

  <div class="tf-field">
    <label class="tf-label" for="tf-error">メールアドレス</label>
    <input
      id="tf-error"
      class="tf-input is-error"
      type="text"
      value="taro.example.com"
      aria-invalid="true"
      aria-describedby="tf-err"
    />
    <p class="tf-help is-error" id="tf-err" aria-live="polite">
      <svg width="13" height="13" viewBox="0 0 13 13" fill="none" aria-hidden="true">
        <circle cx="6.5" cy="6.5" r="5.5" stroke="currentColor" stroke-width="1.3"/>
        <line x1="6.5" y1="3.5" x2="6.5" y2="7" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"/>
        <circle cx="6.5" cy="9.3" r="0.8" fill="currentColor"/>
      </svg>
      「@」を含む形式で入力してください
    </p>
  </div>
</form>

タグ

同じカテゴリ「フォーム入力」のほかのパーツ

関連パーツ