HTML Forms

WEB ESSENTIALS

Wat is een form?

Wat is een form?

Met een formulier kan je data verzamelen van een gebruiker.

  • De info wordt via het formulier verstuurd naar een server

  • De data wordt vaak verzameld in een database

Wat is een form

Contactpagina's, inlogschermen, winkelmandjes... maken vaak gebruik van forms.

Wat is een form

Contactpagina's, inlogschermen, winkelmandjes... maken vaak gebruik van forms.

Forms in html

We leren in dit vak hoe je een formulier kan toevoegen aan je website met HTML en hoe je het opmaakt met CSS.

We leren (nog) niet hoe je de data uit het formulier kan verzamelen.

Form tag

Form tag

De <form> tag gebruik je om een form te plaatsen

  • Tweeledige tag die de volledige inhoud van het formulier omsluit
  • Een lege <form> tag toont niets in de browser, maar semantisch belangrijk om aan te geven dat de inhoud een formulier is
<form>
   <label for="username">Username:</label>
   <input type="text" id="username" name="username">
</form>

Form tag attributen

De form tag heeft geen verplichte attributen, toch is het een best practice om de volgende attributen mee te geven:

  • Method: De manier van verzenden
  • Action: Naar waar moet de data verstuurd worden
<form method="post" action="script.php">
   <label for="username">Username:</label>
   <input type="text" id="username" name="username">
</form>

Method attribuut

Geeft aan hoe de info naar de server gestuurd wordt. Je kan twee waardes meegeven:

  • get (standaard)
  • post
<form action="script.php" method="post">
   <label for="username">Username:</label>
   <input type="text" id="username" name="username">
</form>

Method: get

Bij "get" worden de gegevens in de URL meegestuurd

  • Gebruik je voor zoeken, filteren, navigeren
  • Je kunt de URL opslaan of delen (denk aan Google zoekresultaten)
  • Niet veilig voor gevoelige informatie zoals wachtwoorden
<form action="/zoekresultaten" method="get">
  <input type="text" name="zoekterm">
  <button type="submit">Zoeken</button>
</form>

Method: post

Stuurt data mee in een HTTP request

  • Gebruik je voor formulieren met gevoelige of grote data
  • Gegevens zijn niet zichtbaar in de URL
<form action="script.php" method="post">
  <input type="text" name="gebruikersnaam">
  <input type="password" name="wachtwoord">
  <button type="submit">Inloggen</button>
</form>

Action attribuut

Bepaalt waar de gegevens van het formulier naartoe worden gestuurd wanneer de gebruiker op "Submit" klikt.

  • Je kan een url meegeven of bijv. een php script
<form action="/zoekresultaten" method="get">
  <input type="text" name="zoekterm">
  <button type="submit">Zoeken</button>
</form>

Input tag

Input tag

Uiteraard moet een gebruiker zaken kunnen invullen op het formulier. Met de <input> tag maak je verschillende soorten invulvelden aan.

  • Zelfsluitende tag
  • Via het type-attribuut geef je aan hoe het veld eruit moet zien
<form>
   <input type="text">
</form>

Type attribuut

Hiermee geef je mee welk soort invulveld moet verschijnen. Er zijn enorm veel soorten velden, een volledig overzicht vind je hier.

We zien kort de belangrijkste:

  • text
  • email
  • url
  • password
  • search
  • number
  • range
  • date
  • file
  • checkbox
  • radio
  • ...

type="text"

Maakt een normaal tekstveld aan

<form>
   <input type="text">
</form>

type="email"

Maakt een tekstveld waar een e-mail adres ingevuld moet worden

  • Dit tekstveld geeft een foutmelding als er geen e-mail staat
  • =automatische validatie
<form>
   <input type="email">
</form>

type="url"

Maakt een tekstveld waar een url ingevuld moet worden

  • Dit tekstveld geeft een foutmelding als er geen url staat
<form>
   <input type="url">
</form>

type="password"

Een tekstveld waar de karakters automatisch verborgen worden

<form>
   <input type="password">
</form>

type="search"

Wordt gebruikt voor zoekopdrachten.
Ziet eruit als een gewoon tekstveld, maar browsers kennen hier extra functionaliteiten aan toe.

<form>
   <input type="search">
</form>

type="number"

Maakt een veld aan waar je enkel getallen kan invullen. Je kan instellingen meegeven via de attributen:

  • min: minimum waarde
  • max: maximum waarde
  • step: met hoeveel de waarde stijgt
<form>
   <input type="number" min="0" max="10" step="1" />
</form>

type="range"

Toont een slider om een waarde te kiezen tussen 2 punten

  • min: minimum waarde
  • max: maximum waarde
  • step: met hoeveel de waarde stijgt
<form>
   <input type="range" min="0" max="10" step="1" />
</form>

type="date"

Toont een kalender met date picker

<form>
   <input type="date"/>
</form>

type="file"

Toont een button om een bestand te uploaden

<form>
   <input type="file"/>
</form>

type="radio"

Radiobuttons gebruik je om de gebruiker één optie te laten kiezen

  • De gebruiker kan maar één optie aanvinken
  • Er zal altijd één optie geselecteerd blijven

type="radio"

  • Via het value attribuut geef je mee welke waarde de radiobutton heeft (maar je moet wel nog tekst toevoegen met een label)
  • Groepeer meerdere radiobuttons door ze hetzelfde name attribuut te geven
<form>
  <p>Please select your favorite Web language:</p>

  <input type="radio" id="html" name="fav_language" value="HTML">
  <label for="html">HTML</label>
  <input type="radio" id="css" name="fav_language" value="CSS">
  <label for="css">CSS</label>
</form>

type="checkbox"

Bij checkboxes kan de gebruiker meerdere opties aanvinken

  • De gebruiker kan de checkbox ook weer uitvinken

type="checkbox"

  • Via het value attribuut geef je mee welke waarde de checkbox heeft (maar je moet wel nog tekst toevoegen met een label)
  • Groepeer meerdere checkboxes door ze hetzelfde name attribuut te geven
<form>
  <p>Selecteer transportmogelijkheden:</p>

  <input type="checkbox" id="bike" name="transport" value="bike">
  <label for="bike">I have a bike</label>
  <input type="checkbox" id="car" name="transport" value="car">
  <label for="car">I have a car</label>
</form>

Label tag

Label tag

Via de <label> tag kan je een verklarende tekst toevoegen voor een bepaald input veld. Zo weet de gebruiker welke data hij moet invoeren.

  • Tweeledige tag waar je de tekst van het label tussen plaatst
<form>
  <label>Naam</label>
  <input type="text"/>
</form>

Label en inputveld linken

Om het label en het inputveld aan elkaar te linken, moeten we enkele attributen meegeven:

  • Het label krijgt een for-attribuut met een waarde
  • Het inputveld krijgt een id-attribuut met dezelfde waarde
<form>
  <label for="naam">Naam</label>
  <input type="text" id="naam" />
</form>

Als het label gelinkt is met het inputveld dan kan je op het input veld klikken op het inputveld te selecteren of te activeren (=gebruiksvriendelijkheid!)

Label en inputveld linken

Een tweede manier is om het label element rond het inputveld te plaatsen. Toch geef je best nog de juiste attributen mee.

<label for="naam">
  <span>Naam</span>
  <input type="text" id="naam" />
</label>
<form>
  <label for="naam">Naam</label>
  <input type="text" id="naam" />
</form>

Optie 1:

Optie 2:

Textarea tag

Textarea tag

De <textarea> tag gebruik je om een groot stuk tekst in te geven.

  • Tweeledige tag
  • Gebruik de attributen ‘cols’ en ‘rows’ om de breedte en hoogte in te stellen (niet verplicht)
  • Plaats tekst tussen de tags als je al tekst wil invullen in het veld
<form>
  <textarea rows="4" cols="50">
    Once upon a time...
  </textarea>
</form>

Select tag

Select tag

De <select> tag gebruik je om een dropdownlist te maken

  • Elke optie in de dropdown plaats je binnen <option> tags
  • Met het value-attribuut geef je de waarde mee die verstuurd wordt
<form>
  <select>
    <option value="LR">Linde</option>
    <option value="SVP">Sjouwke</option>
    <option value="DP">Dieter</option>
    <option value="MN">Mark</option>
    <option value="JL">Jannes</option>
    <option value="PDPW">Phillipe</option>
  </select>
</form>

Select tag

Via de <optgroup> tag kan je ook je data binnen de select box groeperen als je dat wil

<form>
  <select>

    <optgroup label="Designers">
      <option value="Linde">Linde</option>
      <option value="Sjouwke">Sjouwke</option>
    </optgroup>
    
    <optgroup label=Developers>
      <option value="Dieter">Dieter</option>
      <option value="Mark">Mark</option>
      <option value="Jannes">Jannes</option>
      <option value="Phillipe">Phillipe</option>
    </optgroup>

  </select>
</form>

Attributen

Attributen

We zagen al enkele attributen die je kan toevoegen op het input element

  • id: geeft een uniek id aan een inputveld
  • name: de naam die naar de server wordt gestuurd
  • value: om al een waarde in te stellen (het veld in te vullen)
<form>
  <label for="voornaam">Voornaam:</label>
  <input 
    type="text" 
    id="voornaam" 
    name="voornaam" 
    value="Jan"
  >
</form>

Meer attributen

Je kan de inhoud sturen of beperken met bepaalde attributen:

  • required: om een verplicht veld aan te geven
  • spellcheck: Spellingscontrole aan/uitzetten
  • disabled: Het veld kan niet ingevuld worden
  • minlength/maxlength: minimum/maximum aantal karakters
<form>
  <label for="voornaam">Voornaam:</label>
  <input type="text" id="voornaam" name="naam" required />

  <label for="username">Gebruikersnaam:</label>
  <input
	type="text"
	id="username"
    name="gebruikersnaam"
    minlength="3"
    maxlength="20" />
</form>

Nog meer attributen

  • placeholder: om de gebruiker een voorbeeld te geven van wat je best invult in het veld
  • Autofocus: Bij het laden van de pagina staat de cursor al klaar in dit veld zodat de gebruiker meteen kan beginnen invullen
<form>
  <label for="opleiding">
    Welke opleiding volg je?
  </label>
  <input
    type="text"
    id="opleiding"
    name="opleiding"
    placeholder="Digitale Vormgeving"
    autofocus
  />
</form>

Fieldset & legend

Fieldset & legend

Heb je een lang formulier met verschillende onderdelen en tussentitels? Gebruik dan de fieldset & legend tag

  • <fieldset>: tweeledige tag om een sectie aan te maken
  • <legend>: tweeledige tag om een tussentitel toe te voegen

Fieldset & legend

<form>
 <fieldset>
   <legend>Wat is je favoriete vak?</legend>
   <div>
     <input type="radio" name="opties" id="optieA">
   	 <label for="optieA">UI/UX design 1</label>
   </div>
   <div>
     <input type="radio" name="opties" id="optieB">
   	 <label for="optieB">Web Essentials</label>
   </div>
   <div>
     <input type="radio" name="opties" id="optieC">
   	 <label for="optieC">Desing Essentials</label>
   </div>
 </fieldset>
</form>

🤓 Tip

Je kan de rand van de fieldset
weghalen in css met border: none en padding: 0

Submit button

Submit button

Om het formulier te versturen moet er nog een button aanwezig zijn, die kan je op twee manieren toevoegen:

<input type="submit" value="Verzenden" />
<button type="submit">Formulier versturen</button>

🤓 Tip

De button-tag heeft de voorkeur!

Voorbeeld volledig formulier

<form action="/contact" method="POST">
  <label for="naam">Volledige naam:</label>
  <input type="text" id="naam" name="naam" required />
  
  <label for="email">Email:</label>
  <input type="email" id="email" name="email" required />
  
  <label for="onderwerp">Onderwerp:</label>
  <select id="onderwerp" name="onderwerp">
    <option value="vraag">Vraag</option>
    <option value="klacht">Klacht</option>
    <option value="compliment">Compliment</option>
  </select>
  
  <label for="bericht">Bericht:</label>
  <textarea id="bericht" name="bericht" rows="5" required></textarea>
  
  <label for="nieuwsbrief">
    <input type="checkbox" id="nieuwsbrief" name="nieuwsbrief" />
    Ik wil de nieuwsbrief ontvangen
  </label>
  
  <button type="submit">Bericht versturen</button>
</form>

Formulier stylen
in css

Inline vs. block

De meeste tags die we voor formulieren gebruiken zijn inline elementen. Dat wil zeggen dat ze naast automatisch naast elkaar geplaatst worden. 

  • Inline: <input>, <textarea>, <select>, <label>, <button>
  • Block: <form>

Inline vs. block

Wanneer we onze velden en labels onder elkaar willen plaatsen, kunnen we in css de inline elementen omzetten in block-elementen

label, input {
  display: block;
  width: 100%;
}

Selectoren

Om specifieke input velden te selecteren, kunnen we gebruik maken van attribute selectors:

input[type="text"],
input[type="password"]{
  width: 100%;
  display: block;
  padding: .5rem;
  border: 1px solid hsl(0 0% 60%);
}

Selectoren

Om de verschillende states van een inputveld op te maken kunnen gebruik maken van pseudo-class selectoren

  • :checked Voor check/radio elementen die aangevinkt zijn
  • :enabled Stel een stijl in voor elementen met de status ‘enabled’
  • :disabled Stel een stijl in voor elementen met de status ‘disabled’
  • :valid Stel een stijl in wanneer het element valid is
  • :invalid Stel een stijl in wanneer het element invalid is.
  • :required Stel een stijl in voor elementen die required zijn.
  • :focus Stel een stijl in voor elementen die focus hebben.

Selectoren

Om de verschillende states van een inputveld op te maken kunnen gebruik maken van pseudo-class selectoren

input:focus {
  background-color: lightblue;
}

7. HTML Forms

By Lecturer GDM

7. HTML Forms

Block & inline boxes. The content box sizing. Padding, margin, border & Margin. Sizing Unites, box backgrounds & Styling the visual box.

  • 298