HTML / 要素

legend要素の使い方

HTMLのlegend要素は、fieldsetでまとめたフォーム部品のグループ名や質問を示す要素です。「どの連絡方法を使いますか?」のように、いくつかの選択肢に共通する説明を置くときに使います。

先に結論

legendは、通常、fieldsetの最初の子として置きます。グループ全体の名前を担当し、個々の入力部品の名前はそれぞれのlabelが担当します。

枠線の上に文字を表示するためだけの要素ではありません。HTMLの構造で「この選択肢は同じ質問に答えている」と伝えるために使います。

最小の例

<fieldset>
  <legend>連絡方法</legend>
  <label><input type="radio" name="contact" value="email"> メール</label>
  <label><input type="radio" name="contact" value="phone"> 電話</label>
</fieldset>

この例では、legendが「連絡方法」というグループ名、2つのlabelが「メール」「電話」という個別の名前を示しています。

実際に表示すると

連絡方法

ブラウザーは、fieldsetの枠とlegendを関係付けて表示します。枠の形や文字の位置はブラウザーやCSSで変わることがありますが、グループ名をHTMLで示していることが大切です。

fieldset、legend、labelの役割

要素担当するもの
fieldset関係のあるフォーム部品をグループにする連絡方法の選択肢全体
legendグループ全体の名前や質問を示す連絡方法
label個々の入力欄や選択肢の名前を示すメール、電話

置く場所に注意する

legendは、fieldsetの先頭に置きます。説明用の要素を先に置くと、legendがグループの先頭のcaptionとして扱われない構造になります。

<!-- 基本の形 -->
<fieldset>
  <legend>配送方法</legend>
  <label><input type="radio" name="delivery" value="mail"> 郵送</label>
</fieldset>

<!-- legendが最初の子ではない形 -->
<fieldset>
  <p>配送方法を選びます。</p>
  <legend>配送方法</legend>
</fieldset>

通常のページ見出しには見出し要素を使い、フォーム部品のグループ名にはlegendを使います。

disabledとlegend

<fieldset disabled>
  <legend>現在は選べません</legend>
  <label><input name="plan" value="basic"> ベーシック</label>
</fieldset>

fieldsetdisabledを付けると、最初のlegendの中にある部品を除き、子孫のフォーム部品が無効になります。この例では、legendの文字はグループの説明として残り、外側の入力部品が無効になります。

よくある間違い

  • divだけで選択肢を囲み、グループ全体の質問をHTMLで示さない。
  • legendfieldsetの外に置く。
  • legendを置いたので、個々の入力部品にlabelは不要だと思う。
  • 枠線の見た目だけをCSSで作り、グループの意味をHTMLに残さない。

Atlasで確認する

仕様上の置き場所、fieldsetのcaption、optgroupとの関係、disabledの適用範囲、HTMLLegendElement.form、アクセシビリティマッピングまで確認したい場合は、Yugien Atlasのlegend要素を参照してください。グループ全体はfieldset要素、個々の部品との関連付けはlabel要素でも説明しています。