はじめに
HTMLフォームは、ユーザーから情報を収集するためのインターフェースを提供する重要な要素です。検索ボックス、ログインフォーム、アンケート、お問い合わせフォームなど、Webサイトのあらゆる場面で活用されています。
この記事では、HTMLフォームの基本的な使い方から、各種入力要素の特徴、アクセシビリティを考慮した実装方法まで、実際のコード例を交えながら解説していきます。
フォームの基本構造
フォームを作成する際は、<form>タグで囲むことから始めます。フォームの重要なポイントは、入力された情報をどこに送信するかを指定できることです。
action属性とmethod属性
action属性は、フォームが送信されたときにデータを送信する先のURLを指定します。method属性は、データの送信方法(GET または POST)を指定します。
例えば、Googleで検索を行うフォームは以下のように実装できます。
<form action="https://www.google.com/search" method="GET">
<input type="text" name="q" />
<button type="submit">検索</button>
</form>
この例では、入力された検索キーワードが q というパラメータ名でGoogleの検索ページに送信されます。
フォーム送信の流れ
フォームからサーバーへデータが送信される流れを図で確認してみましょう。
基本的な入力要素
HTMLでは、さまざまな種類の入力要素が用意されています。<input>タグのtype属性を変更することで、用途に応じた入力フィールドを作成できます。
テキスト関連の入力
<!-- 通常のテキスト入力 -->
<div>
<label for="username">ユーザー名:</label>
<input type="text" id="username" name="username" placeholder="ユーザー名を入力" />
</div>
<!-- パスワード入力(入力内容が隠される) -->
<div>
<label for="password">パスワード:</label>
<input type="password" id="password" name="password" placeholder="パスワードを入力" />
</div>
<!-- メールアドレス入力(メール形式の検証が行われる) -->
<div>
<label for="email">メールアドレス:</label>
<input type="email" id="email" name="email" placeholder="example@email.com" />
</div>
<!-- 電話番号入力 -->
<div>
<label for="phone">電話番号:</label>
<input type="tel" id="phone" name="phone" placeholder="090-1234-5678" />
</div>
数値・日付関連の入力
<!-- 数値入力(最小値・最大値の指定が可能) -->
<div>
<label for="age">年齢:</label>
<input type="number" id="age" name="age" min="0" max="120" placeholder="年齢を入力" />
</div>
<!-- 日付入力(カレンダーUIが表示される) -->
<div>
<label for="birthday">生年月日:</label>
<input type="date" id="birthday" name="birthday" />
</div>
type属性を適切に設定することで、ブラウザが自動的に入力内容の検証を行ってくれます。例えばtype="email"を指定すると、メールアドレスの形式でない入力を送信時に警告してくれますね。
ラベルとアクセシビリティ
フォーム要素には必ず<label>タグを関連付けることが重要です。これにより、アクセシビリティが大幅に向上します。
labelタグの関連付け方法
<label for="username">ユーザー名:</label>
<input type="text" id="username" name="username" />
<label>タグのfor属性と、<input>タグのid属性を同じ値にすることで、両者を関連付けることができます。
ラベルを使用するメリット
ラベルを適切に設定すると、以下のような利点があります。
- ラベルのテキストをクリックすると、対応する入力フィールドにフォーカスが移動する
- スクリーンリーダーを使用するユーザーにとって、各入力項目の目的が明確になる
- タッチデバイスでのタップ可能な領域が広がり、操作性が向上する
選択系の入力要素
ユーザーに複数の選択肢から選ばせる場合、チェックボックス、ラジオボタン、セレクトボックスの3種類が使用できます。それぞれ特徴が異なるので、用途に応じて使い分けましょう。
チェックボックス(複数選択可能)
複数の項目を同時に選択できる場合に使用します。
<div>
<label>趣味:</label>
<input type="checkbox" id="reading" name="hobbies" value="reading" />
<label for="reading">読書</label>
<input type="checkbox" id="sports" name="hobbies" value="sports" />
<label for="sports">スポーツ</label>
<input type="checkbox" id="music" name="hobbies" value="music" />
<label for="music">音楽</label>
<input type="checkbox" id="travel" name="hobbies" value="travel" />
<label for="travel">旅行</label>
</div>
ラジオボタン(単一選択のみ)
複数の選択肢から1つだけを選択させたい場合に使用します。同じname属性を持つラジオボタンは、グループとして扱われます。
<div>
<label>性別:</label>
<input type="radio" id="male" name="gender" value="male" />
<label for="male">男性</label>
<input type="radio" id="female" name="gender" value="female" />
<label for="female">女性</label>
<input type="radio" id="other" name="gender" value="other" />
<label for="other">その他</label>
</div>
セレクトボックス(ドロップダウンメニュー)
選択肢が多い場合や、画面スペースを節約したい場合に便利です。
<label for="country">国:</label>
<select id="country" name="country">
<option value="">選択してください</option>
<option value="japan">日本</option>
<option value="usa">アメリカ</option>
<option value="korea">韓国</option>
<option value="china">中国</option>
</select>
選択系要素の使い分け
name属性の役割
フォーム要素にname属性を設定することで、サーバーに送信されるデータのキーとして使用されます。この属性は、フォームデータを正しく処理するために必須です。
<form action="/submit" method="POST">
<label for="username">ユーザー名:</label>
<input type="text" id="username" name="username" />
<label for="password">パスワード:</label>
<input type="password" id="password" name="password" />
<button type="submit">ログイン</button>
</form>
このフォームが送信されると、以下のようなデータがサーバーに送られます。
username=入力されたユーザー名&password=入力されたパスワード
name属性の値がキー名となり、ユーザーが入力した値がバリューとなります。サーバー側では、このname属性を使ってデータを取得するため、適切な命名が重要ですね。
その他の便利な入力要素
HTMLフォームには、基本的な入力要素以外にも便利な要素が用意されています。
テキストエリア(複数行のテキスト入力)
<label for="message">メッセージ:</label>
<textarea id="message" name="message" rows="4" cols="50"
placeholder="ご意見・ご感想をお聞かせください"></textarea>
rows属性で行数、cols属性で列数を指定できます。
範囲選択(スライダー)
数値の範囲を視覚的に選択できるスライダーを提供します。
<label for="satisfaction">満足度 (1-10):</label>
<input type="range" id="satisfaction" name="satisfaction"
min="1" max="10" value="5" />
色選択(カラーピッカー)
<label for="color">好きな色:</label>
<input type="color" id="color" name="color" value="#ff0000" />
ブラウザのカラーピッカーUIが表示され、直感的に色を選択できます。
ファイル選択
<label for="file">ファイル選択:</label>
<input type="file" id="file" name="file" />
隠し項目
ユーザーには見えないが、フォーム送信時に一緒に送信したいデータを含める場合に使用します。
<input type="hidden" name="form_id" value="user_registration" />
ボタンの種類と使い分け
フォームには、主に3種類のボタンを配置できます。
<div>
<input type="submit" value="送信" />
<input type="reset" value="リセット" />
<button type="button">キャンセル</button>
</div>
それぞれの動作は以下の通りです。
-
type="submit": フォームを送信する(action属性で指定したURLへデータを送信) -
type="reset": フォームの入力内容を初期状態にリセットする -
type="button": 何も動作しない(JavaScriptで独自の動作を定義する場合に使用)
<button>タグは<form>要素の中に配置すると、デフォルトでtype="submit"として動作します。意図しない送信を防ぐため、送信ボタン以外は明示的にtype属性を指定しましょう。
まとめ
HTMLフォームは、Webサイトとユーザーの重要なインターフェースです。この記事で紹介した要素を組み合わせることで、さまざまな入力フォームを作成できます。
フォーム実装時のポイントをまとめると以下の通りです。
-
action属性とmethod属性を適切に設定し、データの送信先を明確にする - 入力内容に応じて適切な
type属性を選択する - すべての入力要素に
<label>を関連付け、アクセシビリティを確保する -
name属性を必ず設定し、サーバー側でデータを正しく処理できるようにする - 選択系要素は、選択肢の数や複数選択の可否に応じて使い分ける
添付したHTMLファイルには、この記事で紹介した入力要素がすべて含まれています。実際にブラウザで開いて動作を確認してみると、理解が深まるでしょう。フォームはWebアプリケーションの基礎となる重要な要素なので、ぜひ実際に手を動かして試してみてください。