HMTL5 FORMS

COMP 126: Practical Web Design & Development for Everyone

the <form> element

<form method="GET" action="https://www.google.com/search">
  ...
</form>

<form> is a container for all the input-gathering elements inside it

 

<form> takes two attributes

  • action: tells the form where to send the data
  • method: GET (user is requesting information) or POST (user is sending information)

GET or POST?

Search for info

Send a message

Log in

Ask for a password hint

Create an account

Select a preference

fields

<form method="GET" action="https://www.google.com/search">
  <input type="text" name="search-query">
</form>

Users need somewhere to enter or request information. We call these "fields". Each field should have its own unique "name" attribute and a type (this doesn't have to be unique.

 

The most common fields are

  • input: limited field for a certain kind of information
  • textarea: general text input area
  • select: for a checkbox or radio button

LABELS

<form method="POST" action="/">
  <label>
	username
  <input type="text" name="userid">
  </label>
</form>

Labels tell users what information goes into each field. You can nest fields inside a label element to link the label with the field.

Or you can keep the label and input elements separate and link them with matching for and id attributes.

<form method="POST" action="/">
  <label for="username">username</label>
  <input id="username" type="text" name="userid">
</form>

BUTTONS

<form method="POST" action="/">
  <label>
	username
  <input type="text" name="userid">
  </label>
  <button type="submit">submit</button>
</form>

The <button> element is used to submit a form. Its type value is SUBMIT.

TEXT FIELD <input> types

  • Phone number: <input type="tel" name="phone">
  • Email address: <input type="email" name="email-address">
  • Numbers: <input type="number" name="age">
  • URL: <input type="url" name="website">
  • And more input types

FIELDSETS

Used to group related fields; require a legend attribute

<fieldset>
  <legend>Mother</legend>
  <label for="mother-given">Given Name</label>
  <input type="text" name="mother-given" id="mother-given">
  <label for="mother-family">Family Name</label>
  <input type="text" name="mother-family" id="mother-family">
</fieldset>
<fieldset>
  <legend>Father</legend>
  <label for="father-given">Given Name</label>
  <input type="text" name="father-given" id="father-given">
  <label for="father-family">Family Name</label>
  <input type="text" name="father-family" id="father-family">
</fieldset>

checkboxes

Yes/no questions

<label>
  <input type="checkbox" name="signup" value="yes">
  Would you like to receive discounts by email?
</label>

Selections from a group

<fieldset>
  <legend>What languages do you speak?</legend>
  <label>
    <input type="checkbox" name="language" value="ar">
    Arabic
  </label>
  <label>
    <input type="checkbox" name="language" value="es">
    Spanish
  </label>
  <label>
    <input type="checkbox" name="language" value="en">
    English
  </label>
</fieldset>


RADIO buttons

Single selection from a group

<fieldset>
  <legend>What is your preferred language?</legend>
  <label>
    <input type="radio" name="language" value="ar">
    Arabic
  </label>
  <label>
    <input type="radio" name="language" value="es">
    Spanish
  </label>
  <label>
    <input type="radio" name="language" value="en">
    English
  </label>
</fieldset>


unstyled form

styled form

recommendations

  • required fields first, optional fields last

  • single-column layout is best for forms: better for usability and responsiveness

  • in most cases, and definitely on mobile labels should go ABOVE their fields to cut down on width

  • on desktop, labels can go to the left if it works

  • labels should be clear, concise, skimmable

  • note: for now, our form data won't actually go anywhere, since we're not adding scripts

126-forms

By tkjn

126-forms

  • 3,086