本文へスキップ

タグ入力

入力してEnterでタグ(チップ)が追加され、×ボタンで削除できる。日本語タグの初期表示あり。

ENGLISH

Tag Input (Chips)

  • JS
約152行基本のUI部品 / フォーム入力 の一覧 →

プレビュー

入力

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

仕様書

向く場面
  • 記事タグ・スキルなど自由語を複数積むフォーム
  • Enter や「,」で区切って素早く追加させたい入力
  • 追加したものを × で個別に外させたい欄
避ける場面
  • 候補から選ばせたい入力(コンボボックスを使う)
  • 1つしか持てない値
構成要素
  • ラベル
  • 入力枠
  • タグチップ(×付き)
  • 入力欄
  • ヒント
持っている状態
  • 通常
  • ホバー
  • フォーカス
キーボード

Enter または「,」でタグ追加、空欄で Backspace で最後のタグを削除。× ボタンは Tab で到達し Enter/Space。削除後は次の × か入力欄へフォーカス

支援技術

label[for] で入力欄に名前を結び、aria-describedby でヒントを関連付ける。削除ボタンに aria-label「〜を削除」、:focus-visible でリング。追加・削除・重複は visually-hidden の aria-live=polite で通知

動き

枠色 200ms(フォーカス)。reduced-motion で無効

デザインの要点

  • Enter と「,」の両方で確定させる。カンマ区切りで貼る癖のある人は、Enter だけだと1つの長いタグになる
  • 空欄で Backspace を押したら最後のタグを消す。マウスに持ち替えずに打ち直せる
  • 重複は足さずに「すでにあります」と知らせる。黙って無視すると Enter が効かなくなったように見える
  • × で消したあとのフォーカスは隣の × か入力欄へ。消えた要素に置いたままだと body へ落ちる

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

<div class="ti-wrap">
  <label class="ti-label" for="ti-input">タグ</label>
  <div class="ti-box" id="ti-box">
    <div class="ti-tags" id="ti-tags"></div>
    <input
      id="ti-input"
      class="ti-input"
      type="text"
      placeholder="入力してEnter"
      autocomplete="off"
      aria-describedby="ti-hint"
    />
  </div>
  <p class="ti-hint" id="ti-hint">Enterまたは「,」で追加</p>
  <span class="ti-sr" id="ti-live" aria-live="polite"></span>
</div>

タグ

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

関連パーツ