HTML講座 / labelとinputを正しく関連付ける

入力欄の名前を明確にするには、labelのforとinputのidを一致させます。idは文書内での識別、nameは送信時の項目名で、同じ役割ではありません。近くに文字を置いただけでは、入力欄との関連付けにならない点に注意します。

ラベルをクリックして確認する

次のコードをHTML文書のbodyへ入れて開き、「Name」をクリックします。対応する入力欄にフォーカスが移れば、明示的な関連付けが機能しています。

<form method="get">
  <label for="visitor-name">Name</label>
  <input id="visitor-name" name="name" type="text">
  <button type="submit">Check</button>
</form>

idは文書内で一意にします。重複すると別の欄を対象にする場合があります。Tabでも入力欄へ移動し、フォーカスの位置が見えるか確認してください。ラベルは装飾ではなく入力欄の名前であり、支援技術がどの欄か識別するためにも重要です。

idとnameの役割を分ける

例ではvisitor-nameがラベルの参照先、name="name"が送信時のキーです。クリックしても反応しないときはforとid、入力できるのに値が送られないときはnameを調べます。

IDをperson-nameへ変えるならforも同時に変えます。一方、サーバーが同じキーを期待するならnameは変えなくても構いません。送信される一覧の確認はFormDataを使う実習で行えます。

関連付けが切れた例を修正する

最初の断片はforがIDではなくnameと一致する誤りです。修正例ではperson-nameへ対応させます。二つは別のファイルで試してください。同じ文書へまとめるとIDが重複し、比較条件が崩れます。

<!-- Incorrect: for matches name instead of id -->
<label for="full_name">Name</label>
<input id="person-name" name="full_name">
<!-- Correct: for matches the input id -->
<label for="person-name">Name</label>
<input id="person-name" name="full_name">

修正後にラベルをクリックして正しい欄へ移動するかを確認し、送信時のキーはfull_nameのままかも比較します。見た目が同じでも、構造的な関連付けが違うことを確かめる実習です。

placeholderはラベルの代わりにしない

placeholderは未入力時の短い例やヒントです。入力すると消えるため、項目名や重要な条件の唯一の表示にしません。

<label for="email">Email address</label>
<input id="email" name="email" type="email"
       placeholder="name@example.com">

ラベルを残し、補足が必要なら入力中も読める説明を近くに置きます。フォームに案内文を付ける方法ではaria-describedbyで説明と関連付ける例も扱います。構文と関連付けの詳細はMDNのlabel要素で確認できます。

같은 카테고리의 다른 글
HTML講座 / srcset・sizes・pictureでレスポンシブ画像を作る

HTML講座 / srcset・sizes・pictureでレスポンシブ画像を作る

同じ構図の解像度選択と、画面幅に応じた構図変更を区別して学びます。w記述子、ピクセル密度、currentSrcによる確認方法と、キャッシュが比較に与える影響も解説します。

HTML講座 / タイトル・説明・言語・文字コードを設定する

HTML講座 / タイトル・説明・言語・文字コードを設定する

title、meta description、charset、viewportとhtmlのlangを整理します。タブと本文の違い、文字化けの調査、検索結果の説明が必ず採用されるわけではない点も学べます。

HTML講座 / divとspanはいつ使うのか

HTML講座 / divとspanはいつ使うのか

divとspanの内容モデルと使い分けを学びます。CSSのdisplayを変えてもHTMLの親子関係の規則は変わらないことや、意味のある要素を優先する基準も説明します。

HTML講座 / placeholderと入力中も残る案内文を付ける

HTML講座 / placeholderと入力中も残る案内文を付ける

label、placeholder、valueの違いを学びます。inputとtextareaの例、aria-describedbyによる説明の関連付け、フォームデータで送られる値の確認方法も紹介します。

HTML講座 / table・tr・th・tdで表を作る

HTML講座 / table・tr・th・tdで表を作る

行と列を持つデータをHTMLの表で表す基本を学びます。見出しセルとデータセル、theadとtbody、横幅が広い表のスクロール方法も紹介します。

HTML講座 / テキストの意味を表すem・strong・引用・コード

HTML講座 / テキストの意味を表すem・strong・引用・コード

emとstrong、qとblockquote、abbr、code、kbdの違いを学びます。太字や斜体という見た目ではなく、文章中の役割に合わせて要素を選ぶ方法を説明します。

HTML講座 / fieldset・legend・autocompleteでフォームを説明する

HTML講座 / fieldset・legend・autocompleteでフォームを説明する

関連する入力をfieldsetでまとめ、legendで質問を示す方法を学びます。ラジオグループを独立させるnameと、自動入力の目的を示すautocompleteの違いも解説します。

HTML講座 / セマンティック要素でページの領域を分ける

HTML講座 / セマンティック要素でページの領域を分ける

header、nav、main、article、section、aside、footerの役割を学びます。見た目の配置と意味を区別し、複数のナビゲーションを識別する方法も紹介します。

HTML講座 / required・文字数・範囲で入力値を検証する

HTML講座 / required・文字数・範囲で入力値を検証する

必須入力、文字数、数値の範囲と刻み、メール形式の制約を学びます。境界値を試し、ブラウザーの案内とサーバー側の検証を分けて考える方法も説明します。

HTML講座 / リンクの作成、相対パスとページ内移動

HTML講座 / リンクの作成、相対パスとページ内移動

aとhrefによるリンク、絶対URLと相対URL、ページ内の移動を学びます。新しいタブ、メール、ダウンロードの条件と、三つのファイルでパスを確認する実習も紹介します。