HTML labelタグ:forとidの関連付けとクリック範囲

HTML <label>は、フォームコントロールの名前を表示テキストおよび支援技術と関連付けます。ラベルのforをコントロールのidに接続するか、ラベルの内部にコントロールを配置します。関連付けられたテキストをクリックすると、入力にフォーカスを合わせたり、チェックボックスを切り替えたりできます。

forとidでコントロールを明示的に接続する

for 属性は、対象コントロールの name ではなく、同じドキュメント内の id を取ります。id はドキュメント内で一意でなければならず、name は送信データのフィールドを識別します。レイアウトが label と input を分けていても、for と id が一致していれば、その命名関係は維持できます。

次のドキュメントを labels.html として保存し、ブラウザで開きます。テキスト入力には for を使用し、チェックボックスにはラベルでラップしています。これはインターフェース演習であり、データをサーバーに送信するわけではありません。

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>labelの関連付けの比較</title>
</head>
<body>
  <h1>フォームコントロールの名前</h1>
  <p>
    <label for="reader-name">表示名</label>
    <input id="reader-name" name="reader" type="text"
           aria-describedby="name-help" placeholder="例:そら">
  </p>
  <p id="name-help">画面に表示するニックネームを入力してください。</p>
  <p>
    <label>
      <input type="checkbox" name="tips" value="yes">
      学習情報を受け取る
    </label>
  </p>
</body>
</html>
  1. 表示名 をクリックして、入力にカーソルを置きます。文字を入力すると、プレースホルダーは消えますが、ラベルは表示されたままです。
  2. チェックボックスを選択するには、学習情報を受け取るというテキストをクリックし、もう一度クリックして解除します。小さなチェックボックスを正確に押す必要はありません。
  3. コントロール間の移動にはTabを使用し、チェックボックスの切り替えにはSpaceを使用します。キーボード操作も確認してください。

コントロールを囲むラベルと補足説明の違い

label内にinputを配置すると、forなしで暗黙の関連付けが作成されます。1つのラベルには関連付けるコントロールだけを含め、別のラベルをその中にネストしないでください。また、ラベルでラッピングしてidおよびforを使用することも可能ですが、forは含まれるコントロールを参照する必要があります。支援技術や外部ツールとの互換性のために、明示的なfor/idの関連付けを検討する価値があります。

ラベルは、読者に何を入力すべきかを伝える名前です。補足の指示やエラーメッセージは別の段落に置き、aria-describedbyと関連付けてください。例では、画面に表示するニックネームを入力してください。が名前を補足しており、プレースホルダーはラベルの代わりとして使用されません。

関連付けやクリックが機能しない場合

for のタイプミスや大文字・小文字の違い、id の重複値、およびターゲット要素の型を確認してください。for をラベル付けできない要素(hidden 入力など)に指定しても、通常の入力のようには機能しません。ラベルは select や textarea でも機能します。関連する選択肢のグループには、fieldset と legend で名前を付けてください。

ラベル内に個別のリンクやボタンを配置すると、クリックしたときにナビゲートするのかコントロールを選択するのかが不明瞭になる可能性があります。追加のリンクはラベルの外に配置し、文脈を最初に説明してください。見出し要素を挿入してラベルを大きくするのではなく、CSS でラベルをスタイル設定してください。MDNのlabel要素リファレンス では、サポートされているコントロールと作成要件について説明しています。