HTML 入力 フォームの基本
サマリー: HTMLの入力フォーム要素は、ユーザーからデータを受け取るための重要な要素です。このドキュメントでは、さまざまな入力タイプとその使用方法、属性について詳しく説明します。
<input>要素:入力欄(フォーム入力)
<input>のタイプ
button: ボタン。デフォルトの動作はなく、value属性の値を表示します。<input type="button" value="クリック">
checkbox: チェックボックス。オン/オフの二値状態を持ちます。<input type="checkbox" name="option1" value="value1"> オプション1
color: カラーピッカー。色を選択できます。<input type="color" name="favorite_color">
date: 日付選択。年、月、日を選択できます。<input type="date" name="birth_date">
datetime-local: ローカル日時選択。タイムゾーン情報を含まない日時を選択できます。<input type="datetime-local" name="appointment">
email: メールアドレス入力欄。メールアドレスの形式を検証できます。<input type="email" name="email_address">
file: ファイル選択。ファイルをアップロードできます。<input type="file" name="upload_file">
hidden: 隠しフィールド。ユーザーには表示されませんが、データはサーバーに送信されます。<input type="hidden" name="user_id" value="12345">
image: 画像ボタン。画像をクリックしてフォームを送信できます。<input type="image" src="submit.png" alt="送信">
month: 月選択。年と月を選択できます。<input type="month" name="travel_month">
number: 数値入力。数値のみ入力できます。<input type="number" name="quantity" min="1" max="10">
password: パスワード入力。入力した文字は隠されます。<input type="password" name="password">
radio: ラジオボタン。同じname属性を持つ複数のラジオボタンから一つだけ選択できます。<input type="radio" name="gender" value="male"> 男性 <input type="radio" name="gender" value="female"> 女性
range: スライダー。範囲内の値を選択できます。<input type="range" name="volume" min="0" max="100">
reset: リセットボタン。フォームの値をリセットします。(非推奨)<input type="reset" value="リセット">
search: 検索入力欄。検索キーワードを入力できます。<input type="search" name="search_query">
submit: 送信ボタン。フォームを送信します。<input type="submit" value="送信">
tel: 電話番号入力欄。電話番号を入力できます。<input type="tel" name="phone_number">
text: テキスト入力欄(デフォルト)。1行のテキストを入力できます。<input type="text" name="user_name">
time: 時間選択。時と分を選択できます。<input type="time" name="meeting_time">
url: URL入力欄。URLを入力できます。<input type="url" name="website">
week: 週選択。年と週番号を選択できます。<input type="week" name="delivery_week">
datetime (非推奨): UTCに基づく日時選択。(非推奨のため使用しないでください)
属性
accept: ファイル選択(type="file")で受け付けるファイルタイプを指定します。例:accept="image/*,video/*"alt: 画像ボタン(type="image")の代替テキストを指定します。autocapitalize: 入力テキストの自動大文字化を制御します。(off, none, sentences, words, characters)autocomplete: ブラウザの自動補完機能を制御します。(on, off、その他コンテキスト固有の値)capture: ファイル選択(type="file")でカメラやマイクからの直接入力を指定します。(user, environment)checked: チェックボックス(type="checkbox")とラジオボタン(type="radio")の初期状態を指定します。dirname: 入力欄のテキスト方向をサーバーに送信します。disabled: 入力欄を無効化します。form: 入力欄を特定の<form>要素に関連付けます。formaction: 送信ボタン(type="submit")と画像ボタン(type="image")の送信先URLを指定します。formenctype: 送信ボタンと画像ボタンのデータエンコーディングタイプを指定します。formmethod: 送信ボタンと画像ボタンのHTTPメソッドを指定します。(get, post)formnovalidate: 送信ボタンと画像ボタンでフォームの検証を無効化します。formtarget: 送信ボタンと画像ボタンの結果を表示するウィンドウを指定します。height: 画像ボタンの高さを指定します。list: <datalist>要素のidを指定し、入力候補を表示します。max: 入力可能な最大値を指定します。maxlength: 入力可能な最大文字数を指定します。min: 入力可能な最小値を指定します。minlength: 入力可能な最小文字数を指定します。multiple: ファイル選択とメールアドレス入力で複数の値を選択できるようにします。name: 入力欄の名前を指定します。サーバーに送信されるデータのキーとなります。pattern: 入力値が一致する必要のある正規表現パターンを指定します。placeholder: 入力欄に初期値がない場合に表示されるヒントテキストを指定します。popovertarget: ボタン(type="button")が制御するポップオーバー要素のidを指定します。popovertargetaction: ポップオーバーの表示/非表示を制御します。(show, hide, toggle)readonly: 入力欄を読み取り専用にします。required: 入力欄を必須項目にします。size: 入力欄の表示幅を指定します。src: 画像ボタンの画像URLを指定します。step: 数値入力のステップ値を指定します。type: 入力欄のタイプを指定します。value: 入力欄の初期値を指定します。width: 画像ボタンの幅を指定します。
非標準属性
autocorrect (非標準): 自動修正を有効/無効にします。(Safariのみ)incremental (非標準): 検索入力(type="search")で、入力中にリアルタイムで検索を実行します。(WebKit、Blink系ブラウザのみ)mozactionhint (非推奨、非標準): Enterキーを押した時の動作のヒントを指定します。(Firefoxのみ)orient (非標準): スライダー(type="range")の向きを指定します。(Firefoxのみ)results (非標準): 検索入力で表示する候補の最大数を指定します。(Safariのみ)webkitdirectory (非標準): ディレクトリ選択を有効にします。(WebKit系ブラウザ、Edge、Firefox 50+)
メソッド
checkValidity(): 入力値の有効性をチェックし、無効な場合はinvalidイベントを発生させます。reportValidity(): 入力値の有効性をチェックし、無効な場合はエラーメッセージを表示します。select(): 入力欄のテキストを選択します。setCustomValidity(): カスタム検証メッセージを設定します。setRangeText(): 指定範囲のテキストを設定します。setSelectionRange(): 指定範囲のテキストを選択します。showPicker(): 日付、時刻、色などの選択ピッカーを表示します。stepDown(): 数値入力の値をstep属性で指定された値だけ減らします。stepUp(): 数値入力の値をstep属性で指定された値だけ増やします。
CSS
UI擬似クラス: :enabled, :disabled, :read-only, :read-write, :placeholder-shown, :default, :checked, :indeterminate, :valid, :invalid, :in-range, :out-of-range, :required, :optional, :blank, :user-invalid属性セレクタ: input[type="password"] など::placeholder擬似要素: プレイスホルダーテキストのスタイルを設定appearanceプロパティ: ブラウザのデフォルトスタイルを上書きcaret-colorプロパティ: キャレット(入力カーソル)の色を設定field-sizingプロパティ: 入力欄のサイズ調整方法を制御object-position と object-fit プロパティ: 画像ボタンなどで画像の表示位置とサイズを調整
付加機能
ラベル: <label>要素を使用して入力欄にラベルを付けると、アクセシビリティとユーザビリティが向上します。 for属性とid属性で関連付けます。<label for="username">ユーザー名:</label> <input type="text" id="username" name="username">
クライアントサイド検証: HTMLの属性やJavaScriptを使用して、クライアントサイドで入力値の検証を行うことができます。しかし、サーバーサイド検証も必ず行う必要があります。ローカライズ: 数値、日付、時刻などの入力形式は、ユーザーのロケール設定に合わせて調整する必要があります。
アクセシビリティに関する考慮事項
すべての入力欄に<label>要素でラベルを付ける。 クリック可能な要素は、十分な大きさにすることで、タッチ操作やマウス操作がしやすいように配慮する。
基本的なフォームの作成【<form>タグ】
action属性: フォームデータの送信先URLを指定します。データ処理を行うサーバーサイドスクリプト(例:PHPファイル)のパスを記述します。method属性: フォームデータの送信方法を指定します。"get" または "post" のいずれかを選択します。get: フォームデータがURLの一部として送信されます(example.com/page.php?name=太郎&[email protected] のように)。データがURLに表示されるため、パスワードなどの機密情報の送信には適していません。post: フォームデータがHTTPリクエストのボディ部に含められて送信されます。データがURLに表示されないため、getに比べてセキュリティ面で優れています。
<form action="process.php" method="post">
<!-- フォームの入力要素をここに記述 -->
</form>
フォームに部品を追加する
<input type="text" name="username" placeholder="ユーザー名">
<textarea name="message" cols="30" rows="5" placeholder="メッセージを入力してください"></textarea>
<input type="submit" value="送信">
PHPで入力フォームの内容を確認するページを作成する
<form action="contact.php" method="post">
<input type="text" name="name" placeholder="名前"><br>
<textarea name="message" cols="30" rows="5" placeholder="メッセージ"></textarea><br>
<input type="submit" value="送信">
</form>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>確認ページ</title>
</head>
<body>
名前: <?php echo $_POST['name']; ?><br>
メッセージ: <?php echo $_POST['message']; ?><br>
</body>
</html>
フォームデータ送信時のセキュリティを考慮する
<?php echo htmlspecialchars($_POST['message'], ENT_QUOTES, 'UTF-8'); ?>
参考文献
詳しい情報については、以下のリンクを参照してください:
Q&A
- Q: HTMLの入力タイプにはどんなものがありますか?
A: テキスト、パスワード、ラジオボタン、チェックボックスなど、多数の入力タイプがあります。 - Q: フォームのバリデーションはどのように行いますか?
A: HTML5の属性を使用して、必須項目やパターンを指定することができます。 - Q: 属性の使用例はありますか?
A: 例えば、<input type="text" name="username" placeholder="ユーザー名を入力"> という書き方があります。