HTML/CSS / LESSON 06 / HT06

HTML/CSS:フォームの基本

1学習の目的

2基礎解説

やりたいこと書き方備考
1行の入力欄<input type="text">type で種類が変わる
複数行の入力<textarea></textarea>閉じタグが必要
選択肢<select> + <option>プルダウン
ラベル<label for="id名">入力欄と紐付ける
✅ 覚えるべき重要ポイント
  1. labelfor と入力欄の id を一致させる。これでラベルをタップしても入力欄が反応するようになり、スマホで格段に使いやすくなる。
  2. name 属性がないとデータが送信されない。id は画面上の紐付け、name はサーバーへ送るときの項目名——役割が違うので両方書く。
  3. type を正しく選ぶとスマホのキーボードが変わるemail なら@付き、tel なら数字のみ、number なら数値キーボードが出る。
  4. ラジオボタンは name を揃える。同じ name のものが1グループになり、1つしか選べなくなる。バラバラだと全部選べてしまう。
  5. placeholder はラベルの代わりにならない。入力し始めると消えてしまうため、何の欄か分からなくなる。label は必ず別に用意する

現場使用例:問い合わせフォーム、会員登録、検索窓、アンケート、注文フォーム。Webサイトでユーザーと双方向にやり取りする唯一の手段

<form action="/send" method="post">

  <!-- label の for と input の id を一致させる -->
  <label for="name">お名前</label>
  <input type="text" id="name" name="name" required>

  <label for="email">メールアドレス</label>
  <input type="email" id="email" name="email"
         placeholder="例:info@example.com">

  <!-- 複数行の入力 -->
  <label for="msg">お問い合わせ内容</label>
  <textarea id="msg" name="message" rows="5"></textarea>

  <!-- プルダウン -->
  <label for="type">種別</label>
  <select id="type" name="type">
    <option value="question">ご質問</option>
    <option value="request">ご要望</option>
  </select>

  <!-- ラジオボタン(name を揃えて1グループに) -->
  <fieldset>
    <legend>ご連絡方法</legend>
    <label><input type="radio" name="contact" value="mail">メール</label>
    <label><input type="radio" name="contact" value="tel">電話</label>
  </fieldset>

  <!-- チェックボックス -->
  <label><input type="checkbox" name="agree" required>規約に同意する</label>

  <button type="submit">送信する</button>

</form>

3基本ドリル(10問)

HT06-D01 テキスト入力欄を1つ作り、label で「お名前」と紐付けたHTMLを書け(id と name はどちらも name とする)。 コーディング★☆☆無料
期待される結果

label の for と input の id が一致

ヒント

<label for="name"> と <input id="name"> を対応させる。

模範解答
<label for="name">お名前</label>
<input type="text" id="name" name="name">
解説

for と id が一致していると、ラベルをタップしても入力欄が反応する。スマホでは押しやすさが大きく変わる。

HT06-D02 labelfor 属性は、入力欄の何と一致させるか。
A. name B. id C. type D. value
選択★☆☆無料
期待される結果

解答 == B

ヒント

要素を一意に指す属性。

模範解答
B
解説

for は id と対応する。name はサーバーに送るときの項目名なので、役割が違う。

HT06-D03 メールアドレス用の入力欄を作れ(type を適切に指定し、label「メールアドレス」と紐付けること。id・name は email)。 コーディング★☆☆無料
期待される結果

input の type が email

ヒント

type="email" にすると、スマホで@付きのキーボードが出る。

模範解答
<label for="email">メールアドレス</label>
<input type="email" id="email" name="email">
解説

type を正しく選ぶとスマホの入力が楽になる。email なら@キーが最初から表示され、形式チェックも自動で行われる。

HT06-D04 複数行入力欄のタグを補ってコードを完成させよ。 穴埋め★☆☆無料
コード
<label for="msg">お問い合わせ</label>
<____ id="msg" name="message" rows="5"></____>
期待される結果

textarea が存在する

ヒント

「テキストの領域」を意味する8文字のタグ。

模範解答
textarea
解説

textarea は閉じタグが必要。input と違って、開始タグと終了タグの間に初期値を書く。

HT06-D05 入力内容をサーバーに送るとき、項目名として使われる属性はどれか。
A. id B. name C. class D. placeholder
選択★☆☆無料
期待される結果

解答 == B

ヒント

送信時のキーになる属性。

模範解答
B
解説

name が無いとデータが送信されない。見た目は正常に動いているように見えるので、気づきにくい不具合になる。

HT06-D06 プルダウンを作れ。label「種別」と紐付け、選択肢は「ご質問」(value=question)「ご要望」(value=request)とすること。 コーディング★★☆広告解放
期待される結果

select と option が2個

ヒント

<select> の中に <option> を並べる。

模範解答
<label for="type">種別</label>
<select id="type" name="type">
  <option value="question">ご質問</option>
  <option value="request">ご要望</option>
</select>
解説

表示される文字と、送信される値(value)は別にできる。日本語を表示しつつ、サーバーには英数字を送るのが一般的。

HT06-D07 入力を必須にする属性を補ってコードを完成させよ。 穴埋め★★☆広告解放
コード
<label for="name">お名前</label>
<input type="text" id="name" name="name" ____>
期待される結果

input が必須になっている

ヒント

「必要とされる」を意味する8文字の属性。値は不要。

模範解答
required
解説

required を付けると、未入力では送信できなくなる。ブラウザが自動でエラーメッセージを出してくれる。

HT06-D08 ラジオボタンで「1つだけ選べる」ようにするには、何を揃えるか。
A. id B. name C. value D. class
選択★★☆広告解放
期待される結果

解答 == B

ヒント

同じグループであることを示す属性。

模範解答
B
解説

name が同じものが1グループになる。バラバラだと全部選べてしまい、ラジオボタンの意味がなくなる。

HT06-D09 ラジオボタンを2つ作れ(「メール」value=mail、「電話」value=tel)。1つだけ選べるようにし、それぞれ label で囲むこと。 コーディング★★☆広告解放
期待される結果

radio が2個、name が同じ

ヒント

name を揃える。label で input ごと囲む書き方も使える。

模範解答
<label><input type="radio" name="contact" value="mail">メール</label>
<label><input type="radio" name="contact" value="tel">電話</label>
解説

label で input ごと囲めば、for と id を書かなくてよい。選択肢が多いラジオボタンやチェックボックスでは、この書き方が簡潔。

HT06-D10 チェックボックスを作り、「規約に同意する」というラベルを付けて必須にせよ。 コーディング★★☆広告解放
期待される結果

checkbox が required になっている

ヒント

type="checkbox" に required を付ける。label で囲む。

模範解答
<label><input type="checkbox" name="agree" required>規約に同意する</label>
解説

同意チェックは required にするのが定番。チェックしないと送信できないので、確認を促せる。

4実践シナリオ(5問)

HT06-S01 【シンプルな問い合わせフォーム】form(action="/send"、method="post")の中に、お名前(text・必須)、メールアドレス(email・必須)、送信ボタンを配置せよ。すべてlabelと紐付けること。 コーディング★★☆広告解放
期待される結果

form の method が post、input が2個とも required

ヒント

form で全体を囲み、label と input のペアを2組並べ、最後に button を置く。

模範解答
<form action="/send" method="post">
  <label for="name">お名前</label>
  <input type="text" id="name" name="name" required>

  <label for="email">メールアドレス</label>
  <input type="email" id="email" name="email" required>

  <button type="submit">送信する</button>
</form>
解説

これが最小の問い合わせフォーム。実際にデータを受け取るにはサーバー側の処理が必要だが、HTML側の準備はこれで整う。

HT06-S02 【さまざまな入力型】4つの入力欄を作れ。電話番号(tel)、年齢(number)、生年月日(date)、パスワード(password)。それぞれ label と紐付けること。 コーディング★★☆広告解放
期待される結果

4つの input の type が正しい

ヒント

type を使い分ける。id と for も忘れずに。

模範解答
<label for="tel">電話番号</label>
<input type="tel" id="tel" name="tel">

<label for="age">年齢</label>
<input type="number" id="age" name="age">

<label for="birth">生年月日</label>
<input type="date" id="birth" name="birth">

<label for="pw">パスワード</label>
<input type="password" id="pw" name="password">
解説

type によってスマホのキーボードや入力補助が変わる。date なら日付選択のカレンダーが、password なら文字が伏せ字になる。

HT06-S03 【グループ化】fieldset と legend を使い、「ご連絡方法」というグループの中にラジオボタン2つ(メール/電話)を配置せよ。 コーディング★★☆広告解放
期待される結果

fieldset の中に legend と radio が2個

ヒント

<fieldset> の最初に <legend> を置き、その後に入力欄を並べる。

模範解答
<fieldset>
  <legend>ご連絡方法</legend>

  <label><input type="radio" name="contact" value="mail">メール</label>
  <label><input type="radio" name="contact" value="tel">電話</label>
</fieldset>
解説

fieldset は関連する入力欄をまとめる。legend がグループの見出しになり、読み上げソフトも「ご連絡方法のグループ」として伝えてくれる。

HT06-S04 【placeholder の使い方】メールアドレスの入力欄に、label と placeholder の両方を設定せよ(label「メールアドレス」、placeholder「例:info@example.com」)。 コーディング★★★広告解放
期待される結果

label と placeholder が両方ある

ヒント

placeholder は入力例を示すもので、label の代わりにはならない。

模範解答
<label for="email">メールアドレス</label>
<input type="email" id="email" name="email" placeholder="例:info@example.com">
解説

placeholder は入力し始めると消える。これだけに頼ると「何の欄だったか」が分からなくなるので、label は必ず別に用意する。

HT06-S05 【アンケートフォーム】select(満足度:5段階から「ふつう」を初期選択)、textarea(ご意見・rows=4)、送信ボタンを持つフォームを作れ。すべて label と紐付けること。 コーディング★★★広告解放
期待される結果

option が5個、selected が1つ、textarea がある

ヒント

option に selected を付けると初期選択になる。

模範解答
<form action="/survey" method="post">
  <label for="score">満足度</label>
  <select id="score" name="score">
    <option value="5">とても満足</option>
    <option value="4">満足</option>
    <option value="3" selected>ふつう</option>
    <option value="2">不満</option>
    <option value="1">とても不満</option>
  </select>

  <label for="comment">ご意見</label>
  <textarea id="comment" name="comment" rows="4"></textarea>

  <button type="submit">送信する</button>
</form>
解説

selected で初期値を指定できる。中間の選択肢を初期値にしておくと、回答の負担が減る(ただし回答が中央に偏る傾向もある)。

5仕上げ課題

HT06-FINAL 【お問い合わせフォーム】実務で使える問い合わせフォームを作れ。

form の設定action="/contact"method="post"

入力項目(すべて label と紐付けること)
① お名前:text・必須(id/name = name
② メールアドレス:email・必須・placeholder「例:info@example.com」(id/name = email
③ 電話番号:tel(id/name = tel
④ お問い合わせ種別:select(id/name = category
 選択肢:「ご質問」(question)「ご要望」(request)「その他」(other)
fieldset(legend「ご希望の連絡方法」)の中にラジオボタン2つ
 「メール」(value=mail)「電話」(value=tel)※ name は reply で揃える
⑥ お問い合わせ内容:textarea・必須・rows=6(id/name = message
⑦ チェックボックス:「プライバシーポリシーに同意する」・必須(name = agree
⑧ 送信ボタン:「送信する」

要素の数:input×6(text/email/tel/radio×2/checkbox)、label×8(項目5つ+ラジオ2つ+同意1つ)、select×1、option×3、textarea×1、fieldset×1、button×1
総合★★★広告解放
期待される結果

すべての要素・属性・必須指定が一致

ヒント

label は①②③④⑥に加え、ラジオとチェックボックスを囲む形でも使う。ラジオは name="reply" で揃える。required は①②⑥⑦の4箇所。

模範解答
<form action="/contact" method="post">

  <label for="name">お名前</label>
  <input type="text" id="name" name="name" required>

  <label for="email">メールアドレス</label>
  <input type="email" id="email" name="email" required
         placeholder="例:info@example.com">

  <label for="tel">電話番号</label>
  <input type="tel" id="tel" name="tel">

  <label for="category">お問い合わせ種別</label>
  <select id="category" name="category">
    <option value="question">ご質問</option>
    <option value="request">ご要望</option>
    <option value="other">その他</option>
  </select>

  <fieldset>
    <legend>ご希望の連絡方法</legend>
    <label><input type="radio" name="reply" value="mail">メール</label>
    <label><input type="radio" name="reply" value="tel">電話</label>
  </fieldset>

  <label for="message">お問い合わせ内容</label>
  <textarea id="message" name="message" rows="6" required></textarea>

  <label><input type="checkbox" name="agree" required>プライバシーポリシーに同意する</label>

  <button type="submit">送信する</button>

</form>
解説

このフォームは、送信ボタンを押した時点でブラウザが4つの検証を自動で行う。お名前・メール・内容の未入力、そして同意チェックの未チェック——required を書いただけで、JavaScriptを1行も使わずにこれが実現する。

label の紐付けにも注目してほしい。①〜④⑥は forid で紐付け、⑤⑦は label で入力欄ごと囲んでいる。どちらも正しい書き方で、選択肢が短いラジオやチェックボックスは囲む形のほうが簡潔になる。

そして type の使い分けだ。email は形式チェックが自動で入り、tel はスマホで数字キーボードが出る。type="text" ですべて済ませることもできるが、それではユーザーの手間が増える

最後に、このフォームは実際にはまだデータを送れないaction="/contact" の先でデータを受け取るプログラム(PHPやNode.jsなど)が必要になる。HTMLの役割は「入力を集めて送り出すところまで」だと理解しておく。

ここまででHTMLは一区切り。次章からいよいよCSSに入り、これまで作ってきたページに見た目を与えていく。