githubEdit

Formulieren en invoervelden

Inhoud

Standaard is method="GET" en action is de huidige pagina als je het niet instelt.

Let op: het daadwerkelijk verwerken van formulierdata op de server valt buiten deze cursus.

<form action="https://www.example.com/submit" method="POST">
  <!-- invoervelden hier -->
</form>

Labels koppelen tekst aan invoervelden en zijn essentieel voor toegankelijkheid en gebruiksgemak:

  • Expliciet (met for en id):

<label for="email">E-mailadres</label>
<input id="email" name="email" type="email">
  • Impliciet (wrappen):

Best practices:

  • Gebruik altijd een (zichtbaar of toegankelijk verborgen) label; placeholder is geen vervanging.

  • Zorg dat id-waarden uniek zijn.

  • Voor het structureren en beschrijven van een groep gerelateerde velden (zoals radio's of checkboxen) zie de sectie "Groeperen van velden" verderop.

Visueel verborgen labels (toegankelijk verbergen)

Soms wil je het label niet zichtbaar tonen maar het wel beschikbaar houden voor schermlezers. Gebruik dan een toegankelijke visueel-verbergende CSS-klasse zoals .visually-hidden (onderaan deze pagina staat een voorbeeld-implementatie).

Dit maakt het label onzichtbaar op het scherm maar nog wel leesbaar voor schermlezers en toetsenbordgebruikers.

Belangrijk: verberg labels niet met display: none of visibility: hidden als je wil dat schermlezers de tekst nog voorlezen — die regels verwijderen het element ook uit de toegankelijkheidsboom.

Voorbeeld van een toegankelijke utility-class (.visually-hidden):

Gebruik bovenstaande class wanneer je het label visueel wilt verbergen maar wél toegankelijk wilt houden.

Als je een element volledig en permanent wilt verbergen (ook voor schermlezers), kun je een utility gebruiken met display: none. Dit verwijdert het element uit de layout én uit de toegankelijkheidsboom:

Gebruik .hidden alleen wanneer je wilt dat het element voor iedereen verborgen is (bijv. dynamische content die pas later zichtbaar wordt en niet relevant is voor schermlezers op dat moment). Voor labels en content die nog toegankelijk moeten zijn, gebruik de .visually-hidden variant.

Plaats deze CSS in je algemene stylesheet en gebruik de juiste utility afhankelijk van of je het element alleen visueel, of volledig wilt verbergen.

Veelgebruikte invoerelementen

Hier korte voorbeelden en belangrijke opmerkingen per type. Voor algemene referentie, zie de MDN-artikelen onder elke kop.

<input> is het algemene element voor vele type-waarden. Enkele veelgebruikte types:

Tekst

Wachtwoord

E-mail

URL

Datum

Bestand upload (belangrijk: POST + enctype)

Gebruik multiple op <input type="file"> om meerdere bestanden te selecteren.

Textareas zijn voor meerregelige tekstinvoer:

Keuzelijst (dropdown):

Gebruik radios wanneer de gebruiker één optie uit een groep moet kiezen:

Checkboxes laten meerdere selecties toe:

Knoppen hebben verschillende rollen (submit, reset, button):

Gebruik <fieldset> en <legend> om gerelateerde velden samen te brengen. Dit helpt gebruikers en schermlezers de context te begrijpen.

Toegankelijkheid en best practices

  • Altijd labels gebruiken (zichtbaar of met een toegankelijke utility-class; zie "Visueel verborgen labels" bij Labels).

  • Plaats foutmeldingen en instructies visueel nabij het veld en koppel ze met aria-describedby wanneer nodig.

  • Zorg voor voldoende contrast en duidelijke focus-styles voor toetsenbordgebruik.

  • Gebruik inputmode, autocomplete en type waar mogelijk om mobiele invoer te verbeteren.

Valideren

HTML biedt basisvalidatie via attributen:

  • required — verplicht veld

  • min / max — voor numerieke en datumwaarden

  • minlength / maxlength — voor tekstlengte

  • pattern — regex voor specifieke validatie

Belangrijk: vertrouw niet alleen op client-side validatie — controleer altijd ook server-side.

Kort voorbeeldformulier

Meer lezen

  • MDN HTML forms: https://developer.mozilla.org/en-US/docs/Learn/Forms


circle-info

Het effectief verzenden/afhandelen van formulierdata (server-side) valt buiten deze cursus.

Last updated