Metronome
HTML

HTML

HTML Form Elements

Forms let users interact with your web pages by entering and submitting data. In this tutorial, you'll learn about every HTML form element, how to use them, and best practices for accessibility and user experience.

Learning Outcomes

By the end of this tutorial, you will be able to:

  • Understand the purpose of each form element
  • Write basic <form> structures with correct attributes
  • Create inputs, labels, buttons, and dropdowns
  • Group controls with <fieldset>/<legend>
  • Enhance forms with <datalist> and <output>

What Are HTML Form Elements?

HTML form elements are tags that create interactive controls—text fields, buttons, dropdowns, and more—that collect user input and send it to a server. All form elements must live inside a <form> container.

Basic Form Syntax:

<form action="/submit" method="post">
  <!-- form controls go here -->
</form>
  • action specifies where to send the form data.
  • method defines the HTTP method (GET or POST).

All Available Form Elements

Element Description
<input> Single-line input control (text, checkbox, etc.)
<label> Associates text caption with a form control
<select> Dropdown list of options
<textarea> Multi-line text input
<button> Clickable button for actions (submit, reset, etc.)
<fieldset> Groups related controls
<legend> Caption for a <fieldset>
<datalist> Predefined options for an <input>
<output> Displays calculation results
<option> Individual option inside a <select>
<optgroup> Groups <option> elements inside a <select>

Input Element (<input>)

The <input> element creates a variety of interactive controls, including text boxes, passwords, radio buttons, checkboxes, dates, and more. With over 20 input type values, you can capture different data formats and leverage built-in validation (e.g., type="email" ensures a valid email format).

Example:

<label for="email">Email:</label>
<input
  type="email"
  id="email"
  name="email"
  placeholder="you@example.com"
  required
  maxlength="50"
>

Note:

  • Always include name for server-side processing.
  • Use required, pattern, min, max, and maxlength to enforce input rules.
  • Consider aria-* attributes for enhanced accessibility.

Label Element (<label>)

The <label> element provides an accessible name for form controls. It can wrap an input implicitly or use the for attribute to bind explicitly. Screen readers announce the label when the user focuses the control.

Example:

<!-- Explicit association -->
<label for="subscribe">Subscribe to newsletter</label>
<input type="checkbox" id="subscribe" name="subscribe">

<!-- Implicit association -->
<label>
  <input type="checkbox" name="terms"> Accept terms and conditions
</label>

Note:

  • Ensure for matches the control’s id for explicit labels.
  • Implicit wrapping simplifies markup but requires careful nesting.

Select Element (<select>)

The <select> element renders a dropdown list. Combine with <option> elements to define choices and <optgroup> to categorize them. Browser default styling varies, so consider custom CSS or libraries for consistent UI.

Example:

<label for="color">Favorite color:</label>
<select id="color" name="color">
  <option value="" disabled selected>Select a color</option>
  <optgroup label="Warm Colors">
    <option value="red">Red</option>
    <option value="orange">Orange</option>
  </optgroup>
  <optgroup label="Cool Colors">
    <option value="blue">Blue</option>
    <option value="green">Green</option>
  </optgroup>
</select>

Note:

  • Use a disabled, selected <option> as a placeholder.
  • Add multiple for multi-select and size to display more options by default.

Textarea Element (<textarea>)

The <textarea> element captures multi-line text input for comments, messages, or code snippets. It supports attributes like placeholder, maxlength, and accessible labeling via <label>.

Example:

<label for="comments">Comments:</label>
<textarea
  id="comments"
  name="comments"
  rows="5"
  cols="40"
  placeholder="Enter your comments here..."
  maxlength="500"
></textarea>

Note:

  • Avoid fixed cols and rows if using responsive CSS.
  • Use aria-describedby to link to help text for longer forms.

Button Element (<button>)

The <button> element defines clickable buttons for form submission (submit), form reset (reset), or custom JavaScript actions (button). Buttons can include HTML content (e.g., icons).

Example:

<button type="submit">Submit Form</button>
<button type="reset">Clear Form</button>
<button type="button" onclick="showHelp()">
  <svg><!-- icon --></svg> Help
</button>

Note:

  • Explicitly set type to avoid unexpected defaults.
  • Style buttons with CSS and consider focus states for keyboard navigation.

Fieldset Element (<fieldset>)

The <fieldset> groups related form controls visually and semantically. This aids keyboard navigation and screen-readers by indicating form sections.

Example:

<fieldset>
  <legend>Personal Information</legend>
  <label for="fname">First Name:</label>
  <input type="text" id="fname" name="fname">
  <label for="lname">Last Name:</label>
  <input type="text" id="lname" name="lname">
</fieldset>

Note:

  • Use one <legend> per <fieldset>.
  • Nested fieldsets are allowed but use sparingly.

Legend Element (<legend>)

The <legend> element gives a title to a <fieldset> grouping.

Example:

<fieldset>
  <legend>Billing Address</legend>
  <!-- address fields -->
</fieldset>

Place <legend> as the first child of <fieldset> for correct rendering.

Datalist Element (<datalist>)

The <datalist> element provides a set of autocomplete options for an <input>.

Example:

<label for="browser">Browser:</label>
<input list="browsers" id="browser" name="browser">
<datalist id="browsers">
  <option value="Chrome">
  <option value="Firefox">
  <option value="Edge">
</datalist>

Datalists enhance user experience without scripting.

Output Element (<output>)

The <output> element displays results of calculations, often updated via JavaScript.

Example:

<form oninput="sum.value = parseInt(a.value) + parseInt(b.value)">
  <input type="number" id="a" name="a" value="1"> +
  <input type="number" id="b" name="b" value="2"> =
  <output name="sum" for="a b"></output>
</form>

Use the for attribute to indicate which inputs contribute to the output.

Option Element (<option>)

The <option> element defines a single choice within a <select> dropdown.

Example:

<select name="fruit">
  <option value="apple">Apple</option>
  <option value="banana">Banana</option>
  <option value="cherry" selected>Cherry</option>
</select>

Add selected to set the default choice.

Optgroup Element (<optgroup>)

The <optgroup> groups related <option> elements under a label for better organization.

Example:

<select name="cars">
  <optgroup label="Electric">
    <option value="tesla">Tesla</option>
    <option value="nissan">Nissan Leaf</option>
  </optgroup>
  <optgroup label="Gasoline">
    <option value="ford">Ford Focus</option>
  </optgroup>
</select>

Use optgroups sparingly to avoid overly nested dropdowns.

FAQs on HTML Form Elements

How do I associate a <label> with an <input>?

Set the label’s for attribute to match the input’s id.

When should I use <fieldset> and <legend>?

Group related controls (e.g., address, payment) in a <fieldset>, and title it with <legend>.

Can I style form elements with CSS?

Yes. You can target any form tag with CSS selectors to customize appearance and layout.

Subscribe to our newsletter

Get the freshest news and resources for developers, designers and digital creators in your inbox each week

© 2000 – 2025 SitePoint Pty. Ltd.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.