stackademic

The leading education platform for anyone with an interest in software development.

HTML Forms

Collecting user input with inputs, labels, and the form element

Overview

Forms let users send data to a server: logins, searches, sign-ups, and more. A <form> element wraps controls like text fields, checkboxes, and buttons. Pairing every input with a <label> is essential for usability and accessibility, making forms a great place to practice good habits early.

Syntax / Usage

The action attribute sets where data is sent and method sets how. Each input should have a name so its value is submitted, and a matching <label>.

<form action="/subscribe" method="post">
  <label for="email">Email address</label>
  <input type="email" id="email" name="email" required />

  <label for="plan">Plan</label>
  <select id="plan" name="plan">
    <option value="free">Free</option>
    <option value="pro">Pro</option>
  </select>

  <button type="submit">Sign up</button>
</form>

Examples

A simple login form with password input:

<form action="/login" method="post">
  <label for="user">Username</label>
  <input type="text" id="user" name="username" required />

  <label for="pass">Password</label>
  <input type="password" id="pass" name="password" required />

  <button type="submit">Log in</button>
</form>

A group of radio buttons sharing one name:

<fieldset>
  <legend>Size</legend>
  <label><input type="radio" name="size" value="s" /> Small</label>
  <label><input type="radio" name="size" value="m" /> Medium</label>
  <label><input type="radio" name="size" value="l" /> Large</label>
</fieldset>

Common Mistakes

  • Forgetting the name attribute, so an input's value is never submitted
  • Not connecting <label for> to an input's id, hurting accessibility
  • Using the wrong input type, e.g. text instead of email or password
  • Giving radio buttons in a group different name values so multiple stay selected
  • Omitting type="submit" on the button, leading to unexpected behavior

See Also

html-attributes html-accessibility-basics html-elements-and-tags