HTMLにおける入力フォームの作成とカスタマイズ方法7選 – Japanシーモア

HTMLにおける入力フォームの作成とカスタマイズ方法7選

HTML入力フォームの作成手順イメージHTML
この記事は約20分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事では、HTMLにおける入力フォームの作成とカスタマイズについて初心者から上級者まで分かりやすく解説します。

フォームはウェブサイトでのユーザー情報の収集、意見交換、ログイン情報の入力といった様々な場面で欠かせない要素です。

ここでは、入力フォームの基本的な作り方から始め、より複雑なカスタマイズ方法までを段階的に説明していきます。

実際のサンプルコードを用いながら、その構造と各要素の役割についても詳しく触れていくため、この記事を通じてHTMLフォームの知識と技術を深めることができます。

●HTML入力フォームの基本

HTMLでのフォーム作成は、<form> タグを用いて始めます。

このタグは、ユーザーが入力したデータをサーバーに送信するための容器として機能します。

フォーム内には、テキストボックス、ラジオボタン、チェックボックス、サブミットボタンなど、様々な入力フィールドを配置することができます。

○HTMLフォームの基本構造

例えば、シンプルな連絡先フォームを作成する場合、 下記のようなHTMLコードが基本となります。

<form action="/submit_form" method="post">
  <label for="name">名前:</label>
  <input type="text" id="name" name="user_name">
  <label for="email">メールアドレス:</label>
  <input type="email" id="email" name="user_email">
  <input type="submit" value="送信">
</form>

このコードは、ユーザーに名前とメールアドレスの入力を求めるフォームを作成します。

<label> タグは入力フィールドの説明を提供し、<input> タグでユーザーの入力を受け付けます。

action 属性はフォームデータが送信されるサーバーのURLを指定し、method 属性でその送信方法(この場合はPOST)を定義します。

○フォームの基本的な属性とは

フォームを効果的に機能させるためには、いくつかの重要な属性を理解する必要があります。

主な属性には下記のものがあります。

  • action -> フォームデータが送信されるサーバーのURLを指定します。
  • method -> データの送信方法を指定します。主にgetまたはpostが使用されます。
  • idname -> 入力フィールドを一意に識別するために使用されます。特にname属性はサーバーにデータを送信する際に重要です。

これらの属性を適切に使用することで、フォームの機能を最大限に活用し、ユーザーの入力を効率的に処理することができます。

●入力フォームの詳細な作り方

HTML入力フォームを作成する際、基本から応用まで幅広い知識が必要です。

ここでは、一歩一歩、詳細にそのプロセスを解説していきます。

○サンプルコード1:シンプルな連絡先フォーム

初めてのHTMLフォームとして、シンプルな連絡先フォームを作成します。

下記のHTMLコードは、名前とメールアドレスを入力するためのフォームです。

<form action="submit_contact.php" method="POST">
  <div>
    <label for="name">名前:</label>
    <input type="text" id="name" name="name" required>
  </div>
  <div>
    <label for="email">メールアドレス:</label>
    <input type="email" id="email" name="email" required>
  </div>
  <div>
    <button type="submit">送信</button>
  </div>
</form>

このコードでは、<form> タグでフォームを定義しています。

action 属性でフォームデータを送信するサーバーのスクリプトを指定し、method 属性で送信方法をPOSTに設定しています。

各入力フィールドは <input> タグで作成され、required 属性を使用して入力必須項目としています。

○サンプルコード2:フィードバックフォームの作成

次に、ユーザーからのフィードバックを受け取るためのフォームを作ります。

これにはテキストエリアを使用します。

<form action="submit_feedback.php" method="POST">
  <div>
    <label for="feedback">フィードバック:</label>
    <textarea id="feedback" name="feedback" rows="4" required></textarea>
  </div>
  <div>
    <button type="submit">送信</button>
  </div>
</form>

<textarea> タグは、複数行のテキスト入力を可能にします。

rows 属性でテキストエリアの高さを指定しています。

○サンプルコード3:ログインフォームの実装

ウェブサイトにログイン機能を追加するためのフォームも重要です。

下記のコードは、ユーザー名とパスワードを入力するためのフォームです。

<form action="login.php" method="POST">
  <div>
    <label for="username">ユーザー名:</label>
    <input type="text" id="username" name="username" required>
  </div>
  <div>
    <label for="password">パスワード:</label>
    <input type="password" id="password" name="password" required>
  </div>
  <div>
    <button type="submit">ログイン</button>
  </div>
</form>

ここで<input type="password"> を使用することで、入力されたパスワードが画面上では隠されるようになります。

○サンプルコード4:動的なフォーム要素の追加方法

JavaScriptを利用して、動的にフォーム要素を追加する方法を紹介します。

これは、ユーザーが必要に応じて入力フィールドを増やせるようにするためのものです。

<script>
function addInput() {
  const newInput = document.createElement('input');
  newInput.type = 'text';
  newInput.name = 'dynamicInput';
  document.getElementById('dynamicForm').appendChild(newInput);
}
</script>

<form id="dynamicForm" action="submit_dynamic.php" method="POST">
  <button type="button" onclick="addInput()">入力欄を追加</button>
  <button type="submit">

送信</button>
</form>

このスクリプトは、ボタンクリックによって新しいテキスト入力フィールドをフォームに追加します。

○サンプルコード5:フォームのバリデーション技術

フォームのバリデーションは、ユーザーが適切な形式でデータを入力したかどうかを確認するために重要です。

HTML5では、さまざまな種類の入力バリデーションがサポートされています。

<form action="submit_validation.php" method="POST">
  <div>
    <label for="age">年齢:</label>
    <input type="number" id="age" name="age" min="0" max="120" required>
  </div>
  <div>
    <button type="submit">送信</button>
  </div>
</form>

<input type="number"> タグは数値入力を要求し、minmax 属性で許容する値の範囲を指定しています。

これにより、ユーザーが設定された範囲外の数値を入力すると、フォームがその場でユーザーに警告を出します。

●カスタマイズの詳細な方法

フォームの見た目と機能性を向上させるためには、CSSとJavaScriptを用いたカスタマイズが不可欠です。

ここでは、CSSを使ってフォームのスタイルを向上させる方法と、JavaScriptを活用してフォーム機能を拡張する具体的な例を紹介します。

○サンプルコード6:CSSでスタイルを改善する方法

フォームの見栄えを良くするためには、CSSを適切に使用します。

ここでは、基本的なフォーム要素にスタイルを適用する例を紹介します。

<style>
  form {
    background-color: #f8f8f8;
    padding: 20px;
    border-radius: 5px;
  }
  input, textarea {
    width: 95%;
    padding: 10px;
    margin-top: 8px;
    border: 1px solid #ddd;
    border-radius: 4px;
  }
  button {
    background-color: #5c67f2;
    color: white;
    border: none;
    padding: 10px 20px;
    border-radius: 5px;
    cursor: pointer;
  }
  button:hover {
    background-color: #4a54e1;
  }
</style>

<form>
  <label for="name">名前:</label>
  <input type="text" id="name" name="name">
  <label for="message">メッセージ:</label>
  <textarea id="message" name="message"></textarea>
  <button type="submit">送信</button>
</form>

このCSSでは、フォーム全体に背景色を設定し、すべての入力要素(テキストボックス、テキストエリア)に統一感のあるスタイリングを施しています。

ボタンには、マウスオーバー時の色変更を追加して、インタラクティブな感触を与えています。

○サンプルコード7:JavaScriptを使ったフォームの拡張機能

フォームのユーザビリティを高めるためには、JavaScriptを使用して動的な機能を追加することが効果的です。

ここでは、入力値の検証をリアルタイムで行うスクリプトの例を紹介します。

<script>
  document.getElementById('email').addEventListener('input', function(e) {
    var input = e.target;
    var pattern = /^[^@\s]+@[^@\s]+\.[^@\s]+$/;
    var isValid = pattern.test(input.value);
    if (!isValid) {
      input.style.borderColor = 'red';
    } else {
      input.style.borderColor = 'green';
    }
  });
</script>

<form>
  <label for="email">メールアドレス:</label>
  <input type="email" id="email" name="email">
  <button type="submit">送信</button>
</form>

このJavaScriptコードは、メールアドレスの入力フィールドに対してリアルタイムで正規表現を用いた検証を行い、その結果に基づいて入力フィールドの境界線の色を変更します。

●よくあるエラーとその対処法

HTMLフォームを作成する際に遭遇することが多い一般的なエラーには、様々なものがあります。

これらのエラーを理解し、適切に対処する方法を知ることは、より効果的なフォームの実装に繋がります。

○エラーハンドリングの基本

フォームのエラーハンドリングでは、主に入力値の検証ミスが発生した場合にユーザーにフィードバックを提供することが目的です。

エラーメッセージは明確でユーザーフレンドリーであるべきです。

例えば、必須入力が未入力であった場合や、形式が不正である入力があった場合には、具体的なエラーメッセージを表示します。

<script>
document.getElementById('myForm').onsubmit = function() {
    var name = document.getElementById('name').value;
    if (name.length == 0) {
        alert('名前は必須入力です。');
        return false;
    }
    return true;
};
</script>

<form id="myForm">
    <label for="name">名前:</label>
    <input type="text" id="name" name="name">
    <input type="submit" value="送信">
</form>

このJavaScriptの例では、フォームが送信される際に名前の入力をチェックし、何も入力されていなければアラートを表示し、フォームの送信を中止します。

○具体的なエラーケースと解決策

ユーザーがメールアドレスや電話番号など、特定の形式を要求される入力フィールドに不適切な形で入力した場合、正規表現を使用して検証を行い、具体的な指示をエラーメッセージで表します。

<script>
document.getElementById('email').addEventListener('input', function(e) {
    var pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    if (!pattern.test(e.target.value)) {
        e.target.setCustomValidity('有効なメールアドレスを入力してください。');
    } else {
        e.target.setCustomValidity('');
    }
});
</script>

<form>
    <label for="email">メールアドレス:</label>
    <input type="email" id="email" name="email" required>
    <input type="submit" value="送信">
</form>

この例では、メールアドレスの入力が正しい形式に従っているかリアルタイムでチェックし、誤りがある場合はユーザーにフィードバックを与えます。

●入力フォームの応用例

ウェブフォームは、単なる情報収集だけでなく、さまざまな応用を通じてユーザー体験を豊かにするために使われます。

ここでは、実際のプロジェクトでの応用例をいくつか紹介し、それぞれに対する具体的な実装方法を解説します。

○サンプルコード8:リアルタイム検索機能付きフォーム

リアルタイムで検索結果を表示するフォームは、ユーザーが入力するたびにサーバーと通信し、動的に結果を更新します。

ここでは、簡単なリアルタイム検索機能を実装するためのサンプルコードを紹介します。

<script>
function search(query) {
  fetch(`search.php?q=${encodeURIComponent(query)}`)
    .then(response => response.json())
    .then(data => {
      document.getElementById('searchResults').innerHTML = '';
      data.forEach(item => {
        const div = document.createElement('div');
        div.textContent = item.name;
        document.getElementById('searchResults').appendChild(div);
      });
    });
}

document.getElementById('searchInput').addEventListener('input', function() {
  search(this.value);
});
</script>

<form>
  <input type="text" id="searchInput" placeholder="検索...">
  <div id="searchResults"></div>
</form>

このスクリプトは、ユーザーがテキストボックスに入力するたびにsearch関数を呼び出し、サーバーに対して非同期リクエストを行います。

サーバーからの応答を受け取り、結果をページに動的に表示します。

○サンプルコード9:複数ページにまたがるフォームの管理

長い入力フォームは、ユーザビリティを向上させるために複数のページに分割することが一般的です。

下記のコードは、複数ページにわたるフォームの一部を表しています。

<script>
function showStep(step) {
  document.querySelectorAll('.step').forEach(div => div.style.display = 'none');
  document.getElementById(`step${step}`).style.display = 'block';
}

document.getElementById('next').addEventListener('click', function() {
  showStep(2);
});
</script>

<form>
  <div id="step1" class="step" style="display: block;">
    <label>名前:</label>
    <input type="text" name="name">
    <button type="button" id="next">次へ</button>
  </div>
  <div id="step2" class="step" style="display: none;">
    <label>住所:</label>
    <input type="text" name="address">
    <input type="submit" value="送信">
  </div>
</form>

このスクリプトは、”次へ”ボタンがクリックされると、次のステップのフォームを表示し、現在のステップを隠します。

○サンプルコード10:APIと連携するフォーム

ウェブフォームからAPIへ直接データを送信し、応答を受け取る例です。

この方法は、外部サービスと連携する際に特に有用です。

<script>
document.getElementById('apiForm').addEventListener('submit', function(event) {
  event.preventDefault();
  const formData = new FormData(this);
  fetch('api_endpoint.php', {
    method: 'POST',
    body: formData
  })
  .then(response => response.json())
  .then(data => alert('APIからの応答: ' + data.message))
  .catch(error => console.error('エラー:', error));
});

</script>

<form id="apiForm">
  <label>データ入力:</label>
  <input type="text" name="data">
  <input type="submit" value="APIに送信">
</form>

このコードは、フォームが送信されると、標準の送信を防ぎ、代わりにfetchを使用してAPIエンドポイントにデータを非同期で送信します。APIからの応答を受け取り、ユーザーに表示します。

●エンジニアが知っておくべき豆知識

ウェブ開発において、エンジニアは技術的なスキルだけでなく、プロジェクトの安全性とアクセシビリティを高めるための知識も必要とされます。

ここでは、セキュリティとアクセシビリティの向上に役立つ重要な情報を解説します。

○豆知識1:セキュリティを確保するためのベストプラクティス

安全なウェブアプリケーションを開発するためには、様々なセキュリティ対策を施すことが不可欠です。

例えば、ユーザーからの入力は常に検証し、サニタイズする必要があります。

SQLインジェクションやクロスサイトスクリプティング(XSS)のリスクを減らすためです。

ここでは、XSS攻撃を防ぐための簡単なPHPコードを紹介します。

<?php
function sanitizeInput($data) {
    return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}

$userInput = sanitizeInput($_POST['userInput']);
echo "安全に入力されました: " . $userInput;
?>

この関数sanitizeInputは、ユーザー入力を適切にエスケープし、ウェブページに安全に表示します。

これにより、悪意のあるスクリプトがページに注入されるのを防ぎます。

○豆知識2:アクセシビリティを向上させる技術

ウェブアクセシビリティは、障害を持つユーザーも含め、すべてのユーザーがウェブサイトを効果的に利用できるようにするための重要な側面です。

aria属性を適切に使用することで、視覚障害者がスクリーンリーダーでコンテンツを理解しやすくなります。

下記のHTML例では、aria-labelを使用してフォーム要素を明確に説明しています。

<input type="text" aria-label="名前" placeholder="お名前を入力">
<button aria-label="送信する">送信</button>

このコードは、入力フィールドとボタンに対して具体的なラベルを実施し、スクリーンリーダー使用時にユーザーが何を入力すべきか、どのボタンを押すべきかを明確にします。

このような小さな配慮がウェブサイトの使いやすさを大きく向上させることができます。

まとめ

この記事を通じて、HTML入力フォームの作成からカスタマイズ、さらにはエラーハンドリングに至るまでの各ステップを詳細に解説しました。

初心者でも理解しやすいように基本的な構造から応用的なテクニックまで段階を追って説明し、実際のコード例を用いて具体的な実装方法を紹介しました。

これらの知識を活用して、より機能的でユーザーフレンドリーなウェブサイトやアプリケーションの開発が可能です。