HTML: HTML入力タイプリファレンス

<input> 要素の type 属性は、入力フィールドの外観と動作を決定します。HTMLは20以上の入力タイプを提供し、テキスト、数値、日付、選択、ボタンなどのさまざまなシーンをカバーします。

1. テキスト入力タイプ

テキスト入力タイプはさまざまな形式のテキスト情報を収集するために使います。

▶ サンプル

HTML
<form>
<label>ユーザー名:<input type="text" name="username" placeholder="ユーザー名を入力"></label><br>
<label>パスワード:<input type="password" name="password" placeholder="6文字以上"></label><br>
<label>メール:<input type="email" name="email" placeholder="you@example.com"></label><br>
<label>電話番号:<input type="tel" name="phone" placeholder="09012345678"></label><br>
<label>Webサイト:<input type="url" name="website" placeholder="https://"></label><br>
<label>検索:<input type="search" name="q" placeholder="検索キーワード"></label>
</form>
▶ 試してみよう

2. 数値入力タイプ

数値入力タイプはユーザーが数値や色の値を選択または入力できるようにします。

▶ サンプル

HTML
<form>
<label>数量(1〜10):<input type="number" name="qty" min="1" max="10" value="1"></label><br>
<label>音量:<input type="range" name="volume" min="0" max="100" value="50"></label><br>
<label>テーマカラー:<input type="color" name="theme" value="#ff6600"></label>
</form>

<!-- rangeとnumberの同期(JSが必要) -->
<input type="range" id="slider" min="0" max="100" value="50">
<input type="number" id="numDisplay" min="0" max="100" value="50">
<script>
const slider = document.getElementById('slider');
const num = document.getElementById('numDisplay');
slider.addEventListener('input', () => num.value = slider.value);
num.addEventListener('input', () => slider.value = num.value);
</script>
▶ 試してみよう

3. 日付と時刻の入力タイプ

日付と時刻の入力タイプは、カレンダーやタイムピッカーを使ってユーザーが日付をすばやく選択できるようにします。

▶ サンプル

HTML
<form>
<label>日付:<input type="date" name="date"></label><br>
<label>時刻:<input type="time" name="time"></label><br>
<label>日付+時刻:<input type="datetime-local" name="datetime"></label><br>
<label>月:<input type="month" name="month"></label><br>
<label>週:<input type="week" name="week"></label>
</form>
▶ 試してみよう

4. 選択入力タイプ

選択入力タイプはユーザーが複数のオプションから選択できるようにします。

▶ サンプル

HTML
<form>
<p>趣味(複数選択可):</p>
<label><input type="checkbox" name="hobby" value="reading"> 読書</label>
<label><input type="checkbox" name="hobby" value="music"> 音楽</label>
<label><input type="checkbox" name="hobby" value="sports"> スポーツ</label>

<p>性別(単一選択):</p>
<label><input type="radio" name="gender" value="male"> 男性</label>
<label><input type="radio" name="gender" value="female"> 女性</label>

<p>アバターアップロード(画像のみ):</p>
<input type="file" name="avatar" accept="image/png, image/jpeg, image/gif">
</form>
▶ 試してみよう

5. ボタン入力タイプ

ボタン入力タイプはフォームのアクションをトリガーするために使います。

▶ サンプル

HTML
<form action="/submit" method="post">
<label>名前:<input type="text" name="name"></label><br>

<!-- 送信ボタン -->
<input type="submit" value="フォームを送信">

<!-- リセットボタン -->
<input type="reset" value="リセット">

<!-- 汎用ボタン -->
<input type="button" value="クリック" onclick="alert('こんにちは!')">

<!-- 画像ボタン -->
<input type="image" src="btn-submit.png" alt="送信">
</form>
▶ 試してみよう

6. 非表示と特殊な入力

type="hidden" フィールドはページに表示されませんが、フォームと一緒に送信されます。ユーザーIDやCSRFトークンなどのメタデータを渡すためによく使われます。

▶ サンプル

HTML
<form action="/update-profile" method="post">
<!-- ユーザーには見えないが、フォームとともに送信される -->
<input type="hidden" name="user_id" value="12345">
<input type="hidden" name="token" value="abc123xyz">

<label>ニックネーム:<input type="text" name="nickname"></label>
<input type="submit" value="保存">
</form>
▶ 試してみよう
💡 注意:hidden入力は、ユーザーIDやトークンなど、ユーザーが見る必要のないデータを渡すためによく使われます。ただし、このデータはユーザーにも見えます(ソースコードを表示すればわかります)。そのため、機密情報をhiddenフィールドに保存してはいけません ― 本当のセキュリティ検証はサーバー側で行うべきです。


7. 入力タイプ完全リファレンス表

タイプ 説明 よく使われる属性
text 1行テキスト placeholder, maxlength, pattern
password パスワード(マスク表示) placeholder, maxlength
email メールアドレス placeholder, multiple
tel 電話番号 placeholder, pattern
url URL / Webアドレス placeholder
search 検索ボックス placeholder
number 数値入力 min, max, step
range 範囲スライダー min, max, step
color カラーピッカー
date 日付ピッカー min, max, step
time 時刻ピッカー min, max, step
datetime-local ローカルの日付+時刻 min, max
month 月ピッカー min, max
week 週ピッカー min, max
checkbox チェックボックス(複数選択) checked
radio ラジオボタン checked
file ファイルアップロード accept, multiple
submit 送信ボタン value, formaction
reset リセットボタン value
button 汎用ボタン value, onclick
image 画像ボタン src, alt
hidden 非表示フィールド value

❓ よくある質問

Q なぜtextの代わりにemailtelurlなどのタイプを使うのですか?
A セマンティックな入力タイプには3つの利点があります:1)モバイルデバイスがコンテキストに適したキーボードを表示します(email@記号を、telはテンキーを表示);2)ブラウザがフォーマットを自動検証します(例:emailには@が必要);3)スクリーンリーダーがユーザーに「これはメールフィールドです」と伝え、アクセシビリティを向上させます。textでも動作しますが、正しいタイプを使用することでユーザーエクスペリエンスが向上します。
Q dateタイプのブラウザ間の不一致はどうすればいいですか?
A これはHTML5の日付ピッカーの既知の問題で、Chrome、Firefox、Safariはそれぞれ異なるUIを持っています。解決策:1)違いを受け入れ、ネイティブブラウザ体験に依存する;2)JavaScript日付ライブラリ(flatpickrなど)を使用して統一されたUIを提供する;3)textタイプとJavaScriptバリデーションを使用して完全にカスタマイズする。推奨事項:デザインの一貫性が重要な場合はオプション2または3を使用し、ネイティブ体験を求める場合はオプション1を使用します。
Q numberrangeの違いは何ですか?いつ使うのですか?
A numberは精密な数値入力用で、ユーザーは正確な値を入力でき、数量、年齢、価格などに適しています。rangeはスライダーで、ユーザーは範囲内でスライドするだけで、音量、明るさ、評価など精密さが重要な場合に適しています。どちらもminmaxstepで範囲を制限できます。一般的なパターン:粗い調整にはrangeを使い、微調整にはnumberを使い、二者をリンクさせます。
Q hiddenタイプは安全ですか?ユーザーは見ることができますか?
A hidden入力はページには表示されませんが、ユーザーは「ソースを表示」やDevToolsを使用して値を確認できます。パスワード、APIキー、機密情報をhiddenに保存してはいけません。正しい用途は、ユーザーID、CSRFトークン、セッション識別子などのメタデータを渡すことです。セキュリティの原則:クライアント側のデータを信頼してはならず、本当のセキュリティ検証はサーバー側で行う必要があります。

📖 まとめ

📝 練習問題

  1. 登録フォーム: 5つ以上の入力タイプを含む「サインアップ」フォームを作成してください:text(ユーザー名)、emailpassworddate(誕生日)、radio(性別)、checkbox(趣味)、file(アバターアップロード)、submitreset
  2. Rangeの同期: 値がリアルタイムで同期するrangeスライダーと数値入力を作成してください。範囲:0〜100、ステップ:5。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%