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

関連する入力欄はfieldsetでまとめ、legendでグループの質問や目的を示せます。氏名やメールなどには適切なautocompleteのトークンを付け、ブラウザーへ入力の目的を伝えます。これは初期値や検証規則を指定する機能ではありません。

一つの質問をfieldsetとlegendでまとめる

ラジオボタンの各ラベルは答えを示しますが、どの質問への答えかも必要です。次のlegendがグループ全体の名前を表します。HTML文書のbodyへ入れて試してください。

<fieldset>
  <legend>How should we contact you?</legend>
  <label><input type="radio" name="contact" value="email"> Email</label>
  <label><input type="radio" name="contact" value="phone"> Phone</label>
</fieldset>

二つのラジオは同じname="contact"なので片方だけ選べます。別の質問には別のfieldsetと別のnameを使います。枠や見出しの初期表示はCSSで変えられますが、そのために構造を取り除く必要はありません。選択と送信値はcheckboxとradioでも比較できます。

autocompleteで入力目的を伝える

autocomplete="name"は氏名、autocomplete="email"はメールを求める欄だと伝えます。値を固定したり利用者の代わりに送信したりする指定ではなく、候補が出るかは保存情報やブラウザー設定にもよります。

<form action="/contact" method="post">
  <fieldset>
    <legend>Contact details</legend>
    <label for="full-name">Full name</label>
    <input id="full-name" name="full_name" autocomplete="name">
    <label for="email">Email address</label>
    <input id="email" name="email" type="email" autocomplete="email">
  </fieldset>
  <button type="submit">Send</button>
</form>

nameは送信時のキー、autocompleteは入力目的のヒントです。/contactは例示で、受信サービスには別の処理が必要です。自動入力の指定があっても、labelとidの関連付けは必要です。

独立した質問と自動入力の目的を試す

次の完全な文書をgroups.htmlとして保存します。連絡方法でEmail、時間帯でMorningを選ぶと、両方の選択が同時に維持されます。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Group practice</title>
</head>
<body>
  <h1>Answer two independent questions</h1>
  <form id="groups-form" method="get">
    <fieldset>
      <legend>Contact method</legend>
      <label><input type="radio" name="contact" value="email" required> Email</label>
      <label><input type="radio" name="contact" value="phone"> Phone</label>
    </fieldset>
    <fieldset>
      <legend>Visit time</legend>
      <label><input type="radio" name="visit" value="morning" required> Morning</label>
      <label><input type="radio" name="visit" value="afternoon"> Afternoon</label>
    </fieldset>
    <button type="submit">Inspect both answers</button>
  </form>
</body>
</html>

比較のため、時間帯の二つのラジオのnameを一時的にcontactへ変えます。一方の質問への選択で他方が外れることを確認し、両方をvisitへ戻してください。グループは見た目の枠だけでなくnameで決まります。

トークン 入力目的
name 氏名全体
given-name 名
family-name 姓
email メールアドレス
tel 電話番号
postal-code 郵便番号

postal-codeは郵便番号の書式検証ではありません。保存情報がない環境では候補が出ない場合もあるので、手入力できることも確認します。

グループ化と自動入力を点検する

無関係な質問を一つのfieldsetへ押し込まず、一つの質問の選択肢を説明なしに分散させないようにします。二つ目の質問への回答で一つ目が消えるならnameを比較してください。任意の単語ではなく定義されたautocompleteのトークンを使います。MDNのautocompleteとfieldsetで使用条件を確認できます。

같은 카테고리의 다른 글
HTML講座 / タイトル・説明・言語・文字コードを設定する

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

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

HTML講座 / img・alt・画像サイズを指定する

HTML講座 / img・alt・画像サイズを指定する

imgのsrc、alt、width、heightの役割を学びます。画像の配置場所と相対パス、装飾画像の代替テキスト、表示幅とファイル容量の違いも説明します。

HTML講座 / 要素・タグ・属性とHTMLの基本文法

HTML講座 / 要素・タグ・属性とHTMLの基本文法

開始タグと終了タグ、空要素、属性、入れ子、コメントの書き方を学びます。真偽属性や特殊文字の注意点と、ブラウザー表示だけでは判断できない文法エラーも説明します。

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

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

labelのforとinputのidを対応させる方法を学びます。idと送信時のnameの違い、重複IDの問題、placeholderがラベルの代わりにならない理由も説明します。

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

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

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

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

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

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

HTML講座 / HTMLとは何か、Webページでの役割を理解する

HTML講座 / HTMLとは何か、Webページでの役割を理解する

HTMLで文書の意味と構造を表す方法を、CSS・JavaScriptとの違いとともに学びます。実際にHTMLファイルを保存して、ブラウザーで確認する手順も紹介します。

HTML講座 / audio・video・iframeでメディアを埋め込む

HTML講座 / audio・video・iframeでメディアを埋め込む

音声、動画、外部文書の埋め込みを学びます。字幕ファイル、代替リンク、画面幅への対応と、ファイル形式や提供元の制限による読み込み失敗の確認方法も説明します。

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

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

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

HTML講座 / メール・数値・日付・選択肢に合うinputの型

HTML講座 / メール・数値・日付・選択肢に合うinputの型

email、number、date、checkbox、radioの使い分けを学びます。見える入力UIと送信値、初期値と現在値の違いを、フォームデータの確認とともに説明します。