Formulieren worden gebruikt om informatie op te vragen en te ontvangen van
gebruikers.
Toelichting:
Snelstart
In deze documentatie staan alle verschillende ondersteunde formulierelementen
beschreven met zowel visuele voorbeelden als html-voorbeelden die gekopiëerd kunnen
worden.
Gebruik het basisformulier voor de algemene opzet. Of het basisformulier met kolommen voor een compactere
weergave waarbij de labels en invoervelden op dezelfde regel geplaatst worden waar
mogelijk. Let op: Gebruik bij een formulier met kolomweergave ook de
html-voorbeelden van de formulierelementen die geschikt zijn voor weergave in
kolommen. Deze staan per element beschreven.
Vul het formulier met de benodigde elementen. Zie
formulierelementen voor de beschikbare elementen.
Groepeer de formulierelementen voor toegankelijkheid en gebruikersgemak. Zie Invoervelden groeperen voor meer informatie.
Voeg indien nodig of ten behoeve van gebruikersgemak meldingen, toelichtingen en
instructies toe aan het formulier. Zie Berichten en
meldingen voor meer informatie.
Het basisvoorbeeld met een invoerveld en een verzendknop.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<label for="voorbeeld-text-input-1">Voorbeeld text input</label>
<input id="voorbeeld-text-input-1" name="voorbeeld-text-input-1" placeholder="voorbeeld text input" type="text">
<button type="submit">Verzend</button>
</form>
Extra informatie over de gebruikte elementen binnen dit voorbeeld:
Action: Het action attribuut bevat de url die de
formulierinzending afhandeldt. Deze waarde kan overschreven worden door formulieracties
op knoppen <button>, <input type="submit">knoppen of
< input type="image">. Voor meer informatie zie: beschikbare
formulier-attributen en action.
Method:method="" heeft de volgende opties.
Get Veelgebruikt bij het versturen van korte niet gevoelige data die
niet verandert als de data nogmaals ingevoerd wordt. Let op: deze methode
voegt de content toe aan de url.
PostVeelgebruikt bij het versturen van data. De data wordt niet
toegevoegd aan de url, heeft geen limitaties wat betreft grootte en
formulierinzendigen met post kunnen niet opgeslagen worden in
bookmarks.
DialogGebruikt wanneer het formulier zich binnen een <dialog>
bevind.
ID:id op de input is toegevoegd zodat het
corresponderende label naar de input kan refereren. Voorbeeld:
id="invoerveld-1". Let op: Het id moet uniek zijn per
document.
For: Het label gebruikt de for om de
referentie naar het juiste invoerveld aan te geven. Voorbeeld:
for="invoerveld-1".
Submit: De knop met het type submit zal het formulier
indienen.
Basisvoorbeeld formulier met kolommen
Het basisvoorbeeld met kolommen.
Aandachtspunten:
Voeg de class horizontal-view toe aan de <form> om het
formulier in twee kolommen weer te geven. Waar mogelijk zullen het label en het
invoerveld naast elkaar worden geplaatst. Op smalle schermen worden de velden onder
elkaar getoond.
Groepeer de <label> en bijbehorende <input> in een
<div>.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view">
<div>
<label for="voorbeeld-text-input-2">Voorbeeld text input</label>
<input id="voorbeeld-text-input-2" name="voorbeeld-text-input-2" placeholder="voorbeeld text input" type="text">
</div>
<button type="submit">Verzend</button>
</form>
Formulier zonder achtergrond
In sommige gevallen is er om technische redenen een formulier nodig rondom een knop maar
is het niet nodig om deze visueel binnen een formulier te plaatsen. Voor die situaties is
dit voorbeeld geschikt.
Het groeperen van invoervelden binnen formulieren biedt de gebruiker structuur, context
en overzicht. Ook geeft het gebruikers die gebruik maken van hulptechnologiën de
mogelijkheid te navigeren binnen de formulieren.
Aandachtspunten:
Groepeer vragen en invoervelden die bij elkaar horen samen binnen een <fieldset>.
Denk bijvoorbeeld aan: "persoonsgegevens" of "voorkeuren".
Voeg altijd direct binnen de <fieldset> een <legend>
toe met een omschrijvende naam die context biedt aan de gebruiker. Houd er hierbij
rekening mee dat sommige screenreaders deze titel en het label van het invoerveld
gezamelijk oplezen. Voor meer informatie over het gebruik van fieldsets en
webtoegankelijkheid zie: https://www.w3.org/WAI/tutorials/forms/grouping/.
Knoppen kunnen binnen een fieldset toegevoegd worden, maar let wel op dat de
verzendknop van het formulier direct binnen het formulier geplaatst wordt aangezien deze
knop over het hele formulier gaat en niet enkel over de gegroepeerde content.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<fieldset>
<legend>Lorem ipsum</legend>
<label for="voorbeeld-text-input-3">Voorbeeld text input</label>
<input id="voorbeeld-text-input-3" name="voorbeeld-text-input-3" placeholder="voorbeeld text input" type="text">
<label for="voorbeeld-text-input-4">Voorbeeld text input</label>
<input id="voorbeeld-text-input-4" name="voorbeeld-text-input-4" placeholder="voorbeeld text input" type="text">
</fieldset>
<button type="submit">Verzend</button>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view">
<fieldset>
<legend>Lorem ipsum</legend>
<div>
<label for="voorbeeld-text-input-5">Voorbeeld text input</label>
<input id="voorbeeld-text-input-5" name="voorbeeld-text-input-5" placeholder="voorbeeld text input" type="text">
</div>
<div>
<label for="voorbeeld-text-input-6">Voorbeeld text input</label>
<input id="voorbeeld-text-input-6" name="voorbeeld-text-input-6" placeholder="voorbeeld text input" type="text">
</div>
</fieldset>
<button type="submit">Verzend</button>
</form>
Verplicht invoerveld
Voor velden die ingevuld dienen te zijn voordat het formulier verstuurd mag worden.
Aandachtspunten:
Geef op de <input> aan dat het invoerveld verplicht is met het required
attribuut.
Voeg een span toe boven het inputveld. Het is belangrijk om het bericht boven het
invoerveld te plaatsen zodat de volgorde ook klopt voor gebruikers die gebruik maken van
hulpmiddelen zoals een screenreader.
Groeppeer de <input> en de <span> samen in een <div>
voor de correcte weergave.
Het invoerveld specifiek voor het vragen van e-mailadressen
Aandachtspunten:
<type="email"> Een invoerveld voor e-mailadressen dient het type
email te krijgen. Hierdoor weten browsers en hulptechnologiën dat de
content een e-mail hoort te zijn.
Het invoerveld specifiek voor het vragen van telefoonnummers
Aandachtspunten:
<type="tel> Een invoerveld voor telefoonnummers dient het type tel
te krijgen. Hierdoor weten browsers en hulptechnologiën dat de content een
telefoonnummer hoort te zijn. Op basis van deze kennis kunnen bepaalde acties uitgevoerd
worden, zoals het op mobiele telefoons op een gebruiksvriendelijke manier het nummer
gebruiken om te bellen.
pattern="[0-9]{10}" Om ervoor te zorgen dat alleen nummers in het
gewenste format binnenkomen kan het raadzaam zijn om een patroon toe te voegen waar de
ingevulde data aan dient te voldoen.
De placeholdertekst geeft de gebruiker informatie over hoe het veld ingevuld dient te
worden. Een voorbeeld of en omschrijving zijn beide goede manieren om de gebruiker
hierin te begeleiden. Hou bij het schrijven van een placeholder-tekst altijd de
gebruiker in gedachten.
Tekstvelden kunnen toegevoegd worden zodat gebruikers berichten kunnen achterlaten.
Aandachtspunten:
Zorg er voor gebruiksvriendelijkheid en het beste resultaat voor dat het tekstveld een
duidelijke vraag en/of duidelijk doel heeft. Zorg er door middel van een omschrijvend
<label> en een duidelijke placeholder voor dat de gebruiker
weet wat er verwacht wordt.
rows="number" geeft de initiële hoogte van het tekstveld aan in de
hoeveelheid regels. Als er een langer bericht verwacht of aangemoedigd wordt is het voor
de gebruiker fijn om een hoger initieel tekstveld te hebben.
cols="number" geeft de breedte van het tekstveld aan in hoeveelheid
tekens. Binnen de Rijksoverheidhuisstijl wordt deze functie niet ondersteund. De breedte
van tekstvelden wordt gezet binnen de css, dit om responsive behaviour, of te
wel het schaalbaar maken van de velden op verschillende resoluties, te ondersteunen.
Let op: de <textarea> ondersteund <value>-tag
niet.
Selectievakken geven de gebruiker de mogelijkheid om voorkeuren en/of goedkeuring aan te
geven.
Aandachtspunten:
Plaats de <input> met direct daaropvolgend het bijbehorende <label>.
Plaats eventuele ondersteunende teksten zoals "Dit veld is verplicht", direct boven de
bijbehorende <input>.
Het <input> dient van het type="checkbox" te zijn.
Voor het tonen van meerdere selectieopties onder een <label> dient het
bijbehorende <label> en de bijbehorende checkboxes
gegroepeerd te zijn binnen een <div>. Zie lijstweergave
voor meer informatie en voorbeelden.
Beschikbare voorbeelden:
Standaard weergave
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<div class="checkbox">
<input type="checkbox" id="checkbox-example-base" name="standaard-checkbox">
<label for="checkbox-example-base">Lorem ipsum dolor set amet</label>
</div>
<button type="submit">Verzend</button>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Voeg de class horizontal-view toe aan de <form> voor de
weergave in kolommen. Selectievakken worden hiermee uitgelijnd met de overige
invoervelden.
Html-voorbeeld:
<form action="" method="post" class="horizontal-view">
<div class="checkbox">
<input type="checkbox" id="checkbox-example-base-horizontal-view" name="standaard-checkbox">
<label for="checkbox-example-base-horizontal-view">Lorem ipsum dolor set amet</label>
</div>
<button type="submit">Verzend</button>
</form>
Geselecteerd selectievak
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<div class="checkbox">
<input type="checkbox" id="checkbox-example-checked-base" name="checked-checkbox" checked>
<label for="checkbox-example-checked-base">Lorem ipsum dolor set amet</label>
</div>
<button type="submit">Verzend</button>
</form>
Plaats ten behoeve van toegankelijkheid lijsten met selectievakken altijd binnen een
fieldset.
Plaats direct binnen de <fieldset> een <legend> met
een omschrijvende naam. Houdt er rekening mee dat deze naam bij sommige hulptechnologiën
voor iedere optie opgelezen wordt.
Om de legend van de lijstweergave als label weer te geven kan de class grouped-choice-list
toegevoegd worden aan de <fieldset>.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<fieldset>
<legend>Examples</legend>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-1" name="standaard-checkbox">
<label for="checkbox-example-list-1">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-2" name="standaard-checkbox">
<label for="checkbox-example-list-2">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-3" name="standaard-checkbox">
<label for="checkbox-example-list-3">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-4" name="standaard-checkbox">
<label for="checkbox-example-list-4">Lorem ipsum dolor set amet</label>
</div>
</fieldset>
<button type="submit">Verzend</button>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view">
<fieldset>
<legend>Examples</legend>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-horizontal-view-1" name="standaard-checkbox">
<label for="checkbox-example-list-horizontal-view-1">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-horizontal-view-2" name="standaard-checkbox">
<label for="checkbox-example-list-horizontal-view-2">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-horizontal-view-3" name="standaard-checkbox">
<label for="checkbox-example-list-horizontal-view-3">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-horizontal-view-4" name="standaard-checkbox">
<label for="checkbox-example-list-horizontal-view-4">Lorem ipsum dolor set amet</label>
</div>
</fieldset>
<button type="submit">Verzend</button>
</form>
Voorbeeld in twee kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view ">
<fieldset>
<legend>Examples</legend>
<div class="column-2">
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-columns-1" name="standaard-checkbox">
<label for="checkbox-example-list-columns-1">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-columns-2" name="standaard-checkbox">
<label for="checkbox-example-list-columns-2">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-columns-3" name="standaard-checkbox">
<label for="checkbox-example-list-columns-3">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-columns-4" name="standaard-checkbox">
<label for="checkbox-example-list-columns-4">Lorem ipsum dolor set amet</label>
</div>
</div>
</fieldset>
<button type="submit">Verzend</button>
</form>
Voorbeeld in drie kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view ">
<fieldset>
<legend>Examples</legend>
<div class="column-3">
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-column-3-1" name="standaard-checkbox">
<label for="checkbox-example-list-column-3-1">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-column-3-2" name="standaard-checkbox">
<label for="checkbox-example-list-column-3-2">Lorem ipsum dolor set amet</label>
</div>
<div class="checkbox">
<input type="checkbox" id="checkbox-example-list-column-3-3" name="standaard-checkbox">
<label for="checkbox-example-list-column-3-3">Lorem ipsum dolor set amet</label>
</div>
</div>
</fieldset>
<button type="submit">Verzend</button>
</form>
Kleurselector
Het kleur-invoerveld geeft de mogelijkheid de gebruiker een kleur te laten
selecteren.
Aandachtspunten:
Geef binnen de value met een hexidecimalekleurcode de basiskleur aan die
initieel getoond wordt binnen het formulier. Voorbeeld: value="#ffffff",
dit geeft een standaard een wit kleurselectievak weer.
Een invoerveld voor kleuren dient het type="color" te krijgen. Hierdoor
weten browsers en hulptechnologiën dat de content een kleur hoort te zijn.
Het kan in sommige gevallen gebruiksvriendelijker zijn als bij elkaar horende
formuliervelden opdezelfde regel staan. Er kan daarom gebruik gemaakt worden van de
weergave in twee of drie kolommen.
Aandachtspunten:
Groepeer de velden binnen een <div>.
Geef de gewenste hoeveelheid kolommen aan. Voeg de class class="column-2"
of class="column-3" toe aan de bijbehorende div. Zie onderstaande
voorbeelden voor meer informatie.
Bij sommige invoervelden is het belangrijk om de inhoud te valideren aan de hand van een
vooraf bepaald patroon.
Aandachtspunten:
Pattern: Bij het toevoegen van een patroon, voeg ook een leesbare
versie van het patroon toe zodat de gebruiker weet wat de verwachtingen zijn. Voeg ook
een title element toe met daarin de omschrijving van het patroon zodat deze
gebruikt kan worden door user agents, oftewel software die voor de gebruiker de
interactie ophaald en weergeeft, zoals browsers en hulptechnologieën.
De <pattern> kan toegevoegd worden aan: text-
tel- email- url- password en
search-velden.
Vertel de gebruiker welke eisen er aan de gebruikersnaam zijn gesteld indien er eisen
zijn. Dit kan met een standaard opengeklapt bericht zoals in het onderstaande voorbeeld
of met een ingeklapt bericht die de gebruiker zelf kan openen indien gewenst. Voor meer
informatie zie: Berichten en meldingen en ingeklapte hulpteksten.
Om berichten visueel te koppelen aan een inputveld kunnen de <input>
en het bericht gegroepeerd worden binnen een <div. Let op:
Binnen de weergave met kolommen dienen berichten altijd gegroepeerd te worden met het
inputveld.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<label for="text-form-username-3">Gebruikersnaam</label>
<p class="explanation" id="text-form-username-3-message"><span>Toelichting:</span> Gebruikersnaam mag alleen alfanumerieke tekens (letters A-Z, cijfers 0-9) bevatten, met uitzondering van onderstrepingstekens.</p>
<input
id="text-form-username-3"
name="text-form-username-3"
pattern="^[a-zA-Z0-9_.-]*$"
placeholder="gebruikersnaam"
title="Gebruikersnaam mag alleen alfanumerieke tekens (letters A-Z, cijfers 0-9) bevatten, met uitzondering van onderstrepingstekens."
type="text"
aria-describedby="text-form-username-3-message"
required >
<button type="submit">Verzend</button>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view">
<div>
<label for="text-form-username-4">Gebruikersnaam</label>
<div>
<p class="explanation" id="text-form-username-4-message"><span>Toelichting:</span> Gebruikersnaam mag alleen alfanumerieke tekens (letters A-Z, cijfers 0-9) bevatten, met uitzondering van onderstrepingstekens.</p>
<input
id="text-form-username-4"
name="text-form-username-4"
pattern="^[a-zA-Z0-9_.-]*$"
placeholder="gebruikersnaam"
title="Gebruikersnaam mag alleen alfanumerieke tekens (letters A-Z, cijfers 0-9) bevatten, met uitzondering van onderstrepingstekens." type="text"
aria-describedby="text-form-username-4-message"
required >
</div>
</div>
<button type="submit">Verzend</button>
</form>
Wachtwoord
Aandachtspunten:
Vertel de gebruiker welke eisen er aan de gebruikersnaam zijn gesteld indien er eisen
zijn. Dit kan met een standaard opengeklapt bericht zoals in het onderstaande voorbeeld
of met een ingeklapt bericht die de gebruiker zelf kan openen indien gewenst. Voor meer
informatie zie: Berichten en meldingen en ingeklapte hulpteksten.
Om berichten visueel te koppelen aan een inputveld kunnen de <input>
en het bericht gegroepeerd worden binnen een <div. Let op:
Binnen de weergave met kolommen dienen berichten altijd gegroepeerd te worden met het
inputveld.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<label for="text-form-password-1">Wachtwoord</label>
<p class="explanation"
id="text-form-password-1-message"><span>Toelichting:</span> Wachtwoord moet minimaal 8 tekens bevatten waarvan minimaal 1 hoofdletter, 1 kleineletter en 1 cijfer.</p>
<input id="text-form-password-1"
name="text-form-password-1"
pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"
placeholder="wachtwoord"
title="Wachtwoord moet minimaal 8 tekens bevatten waarvan minimaal 1 hoofdletter, 1 kleineletter en 1 cijfer."
type="password"
aria-describedby="text-form-password-1-message">
<button type="submit">Verzend</button>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view">
<div>
<label for="text-form-password-2">Wachtwoord</label>
<div>
<p class="explanation"
id="text-form-password-2-message"><span>Toelichting:</span> Wachtwoord moet minimaal 8 tekens bevatten waarvan minimaal 1 hoofdletter, 1 kleineletter en 1 cijfer.</p>
<input id="text-form-password-2"
name="text-form-password-2"
pattern="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$"
placeholder="wachtwoord"
title="Wachtwoord moet minimaal 8 tekens bevatten waarvan minimaal 1 hoofdletter, 1 kleineletter en 1 cijfer."
type="password"
aria-describedby="text-form-password-2-message">
</div>
</div>
<button type="submit">Verzend</button>
</form>
Berichten en meldingen
Om de gebruiker van de nodige feedback en uitleg te voorzien kan gebruik gemaakt worden
van meldingen binnen het formulier.
Aandachtspunten:
Indien er gebruik wordt gemaakt van de weergaven in
kolommen, groepeer het invoerveld met het bijbehorende bericht. Als er geen gebruik
gemaakt wordt van kolommen kunnen meldingen direct boven of onder het bijbehorende
invoerveld geplaatst worden.
Plaats meldingen met betrekking tot het invullen van velden altijd boven het
invoerveld, zodat de gebruiker eerst de uitleg leest en daarna het bijbehorende
invoerveld tegenkomt. Denk hierbij aan waarschuwingen en extra toelichting.
Plaats foutmeldingen altijd onder het invoerveld, zodat de gebruiker eerst te zien
krijgt wat de context van de foutmelding is.
Algemene melding op het formulier
Voeg berichten die op het hele formulier slaan toe door het bericht direct binnen de
<form>-tag te plaatsen.
Hiervoor kan gebruik gemaakt worden van de verschillende berichttypes, en de beschikbare
berichtweergaven. Denk hierbij aan, toelichting, waarschuwingen en foutmeldingen. Voor
alle beschikbare voorbeelden en types zie: notificaties.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" aria-describedby="form-1-message">
<p class="explanation" id="form-1-message"><span>Toelichting:</span> Lorem ipsum dolor set amet</p>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view" aria-describedby="form-2-message">
<p class="explanation" id="form-2-message"><span>Toelichting:</span> Lorem ipsum dolor set amet</p>
</form>
Feedback op invoervelden
Feedback direct op het invoerveld is een van de meest directe manieren om de gebruiker te
laten weten welk invoerveld extra aandacht nodig heeft. Beschikbare notificatietypes
zijn:
error
warning
explanation
Aandachtspunten:
Let op: visuele feedback op het invoerveld is op zichzelf onvoldoende om
toegankelijkheid en een goede gebruikerservaring te waarborgen.
Vertel de gebruiker altijd wat de vervolgstappen zijn die zij kunnen nemen om het
probleem op te lossen of om zelf verder te kunnen.
Voeg de class toe met het type melding op het invoerveld om gebruik te maken van
visuele feedback direct op het invoerveld. Voorbeeld: class="error".
Voeg voor screenreader gebruikers aria-invalid="true" toe aan
invoervelden met een error.
Meldingen die over een specifiek invoerveld gaan, dienen in de context bij het invoerveld
geplaatst te worden. Hierdoor is het voor de gebruiker direct duidelijk waar de melding
bij hoort.
Indien er gebruik wordt gemaakt van de weergaven in
kolommen, groepeer het invoerveld met het bijbehorende bericht. Als er geen gebruik
gemaakt wordt van kolommen kunnen meldingen direct boven of onder het bijbehorende
invoerveld geplaatst worden.
Plaats toelichting met betrekking tot het invullen van velden boven het invoerveld,
zodat de gebruiker eerst de toelichtig leest en daarna het bijbehorende invoerveld
tegenkomt. Hierdoor weet de gebruiker hoe het invoerveld ingevuld dient te worden
voordat deze gepresenteerd wordt. Uitzondering hierop zijn toelichtingsteksten die de
gerbruiker zelf activeert door middel van de hulpknop. Die teksten worden onder het
gekozen invoerveld geplaatst zodat de structuur van het formulier en het element waar de
gebruiker interactie mee heeft zo min mogelijk verspringt.
Plaats foutmeldingen altijd onder het invoerveld. Dit zorgt ervoor dat de gebruiker
eerst te zien krijgt wat de context van de foutmelding is wat het begrijpen van de
foutmelding toegankelijker maakt.
Voor het toevoegen van meldingen kan gebruik gemaakt worden van de types en
html-elementen zoals beschreven in Notificaties.
Voor het geven van extra toelichting op een invoerveld die niet voor iedere gebruiker
nodig zal zijn, kan het beste gekozen worden voor de ingeklapte variant. Bij deze weergave
is de toelichting verborgen tot dat de gebruiker op het hulpicoon klikt.
Aandachtspunten:
Om gebruik te maken van de ingeklapte weergave dient de class help
toegevoegd te worden aan het formulier.
Plaats het invoerveld met de bijbehorende hulptekst in een <div> voor
de correcte weergave.
Ingeklapte hulpteksten dienen onder het invoerveld geplaatst te
worden zodat de structuur van het formulier en het element waar de gebruiker interactie
mee heeft zo min mogelijk verspringt. Hulptekst die boven het invoerveld staat, wordt
niet ingeklapt.
Icoonknoppen tonen geen tekst. Voeg de knoptekst wel altijd toe voor screenreader
gebruikers.
Dit kan middels de data-open-label en data-close-label
attributen op de .explanation. Zie het Html-voorbeeld hieronder.
Zorg ervoor dat de knoptekst in dezelfde taal is als de rest van het document, en
dat deze duidelijk aangeeft welke toelichting de knop bedient.
Let op: Deze functionaliteit maakt gebruik van JavaScript.
Voeg <script defer src="./pad/naar/form-help.min.js"></script>
toe aan de <head> van de site.
De knop wordt automatisch toegevoegd. Deze hoeft dus niet handmatig in de html
opgenomen te worden.
Zonder JavaScript wordt de knop niet toegevoegd en wordt hulptekst getoont zonder
deze in te klappen.
Toelichting: Wordt de hulptekst niet ingeklapt?
Controleer dan of de JavaScript correct geladen wordt en of de hulptekst onder
het invoerveld geplaatst is.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="help">
<label for="voorbeeld-text-input-met-hulptekst-simpel-1">Help op simpel formulierveld</label>
<div>
<input
id="voorbeeld-text-input-met-hulptekst-simpel-1"
name="voorbeeld-text-input"
placeholder="voorbeeld text input" type="text"
aria-describedby="voorbeeld-text-input-met-hulptekst-simpel-1-message">
<p
class="explanation"
data-open-label="Toelichting bij het veld: Voorbeeld text input"
data-close-label="Sluit toelichting bij het veld: Voorbeeld text input"
id="voorbeeld-text-input-met-hulptekst-simpel-1-message"
>
Lorem ipsum dolor set amet.</p>
</div>
<button type="submit">Verzend</button>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view help">
<div>
<label for="voorbeeld-text-input-met-hulptekst-kolommen-1">Voorbeeld text input</label>
<div>
<input
id="voorbeeld-text-input-met-hulptekst-kolommen-1"
name="voorbeeld-text-input-met-hulptekst-kolommen-1"
placeholder="voorbeeld text input"
type="text"
aria-describedby="voorbeeld-text-input-met-hulptekst-kolommen-1-message">
<p
class="explanation"
data-open-label="Toelichting bij het veld: Voorbeeld text input"
data-close-label="Sluit toelichting bij het veld: Voorbeeld text input"
id="voorbeeld-text-input-met-hulptekst-kolommen-1-message">
Lorem ipsum dolor set amet.</p>
</div>
</div>
<button type="submit">Verzend</button>
</form>
Voorbeeld verplicht veld met ingeklapte hulptekst
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="help">
<label for="voorbeeld-text-input-met-hulptekst-simpel-2">Help op simpel
formulierveld</label>
<div class="required">
<p class="nota-bene">Dit veld is verplicht</p>
<div>
<input id="voorbeeld-text-input-met-hulptekst-simpel-2"
name="voorbeeld-text-input-met-hulptekst-simpel-2" placeholder="voorbeeld text input" type="text"
aria-describedby="voorbeeld-text-input-met-hulptekst-simpel-2-message">
<p class="explanation" data-open-label="Toelichting bij het veld: Voorbeeld text input"
data-close-label="Sluit toelichting bij het veld: Voorbeeld text input"
id="voorbeeld-text-input-met-hulptekst-simpel-2-message">
Lorem ipsum dolor set amet.</p>
</div>
</div>
<button type="submit">Verzend</button>
</form>
Voorbeeld verplicht veld met ingeklapte hulptekst weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view help">
<div class="required">
<label for="voorbeeld-text-input-met-hulptekst-kolommen-2">Voorbeeld text input</label>
<div>
<p class="nota-bene">Dit veld is verplicht</p>
<div>
<input id="voorbeeld-text-input-met-hulptekst-kolommen-2" name="voorbeeld-text-input"
placeholder="voorbeeld text input" type="text"
aria-describedby="voorbeeld-text-input-met-hulptekst-kolommen-2-message">
<p class="explanation" data-open-label="Toelichting bij het veld: Voorbeeld text input"
data-close-label="Sluit toelichting bij het veld: Voorbeeld text input"
id="voorbeeld-text-input-met-hulptekst-kolommen-2-message">
Lorem ipsum dolor set amet.</p>
</div>
</div>
</div>
<button type="submit">Verzend</button>
</form>
Radio-selecteerknop
Radio-selecteerknoppen geven de gebruiker de mogelijkheid om een enkele voorkeur uit een
lijst te kiezen.
Aandachtspunten:
Groepeer de <input> met direct daaropvolgend het bijbehorende <label>
in een <div>.
Plaats eventuele ondersteunende teksten zoals "Dit veld is verplicht", direct boven de
bijbehorende <input>.
Het <input> dient van het type="radio" te zijn.
De selectieopties onder een <label> dienen met het bijbehorende <label>
en de bijbehorende radio-selecteerknoppen gegroepeerd te zijn binnen een
<div>. Zie lijstweergave voor meer
informatie en voorbeelden.
Beschikbare voorbeelden:
Standaard weergave
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<div class="radio">
<input
type="radio"
id="radio-example-default-5"
name="standaard-radiobutton"
value="value">
<label for="radio-example-default-5">Lorem ipsum dolor set amet</label>
</div>
<button type="submit">Verzend</button>
</form>
Radio selecteerknoppen staan nooit op zichzelf. Je hebt altijd tenminste twee opties.
Voor verplichte radio selecteerknoppen geld dan ook dat je tenminste 1 van deze opties
moet aanvinken.
Plaats ten behoeve van toegankelijkheid lijsten met selectievakken altijd binnen een
fieldset.
Plaats direct binnen de <fieldset> een <legend> met
een omschrijvende naam. Houdt er rekening mee dat deze naam bij sommige hulptechnologiën
voor iedere optie opgelezen wordt.
Invoerveld met een lijst aan keuzes voor de gebruiker.
Aandachtspunten:
Let op: Het overschrijven van de standaard styling van
<select>-elementen wordt sterk afgeraden. Dit omdat in verschillende
contexten, browsers en systemen het <select>-element anders getoont
wordt. De rijksoverheidhuisstijl bevat geen specificaties voor de styling van
<select>-elementen. En het is daarom dan ook niet nodig om extra styling
toe te voegen. Bestaande websites gebruiken in sommige gevallen wel aangepaste styling
voor het <select>-element. Voor de volledigheid is een variant hiervan
wel opgenomen binnen deze componenten bibliotheek, om developers op weg te helpen indien
het onomkoombaar is dat het <select>-element deze styling-versie nodig
heeft. Let op: Deze variant is niet volledig doorgetest in de verschillende
situaties, browsers en systemen. Test daarom bij gebruik zelf de elementen goed
door. Om gebruik te maken van deze extra toegevoegde styling zie alternatieve weergave.
Als een selectielijst een verplicht invoerveld is, voeg dan altijd als eerste optie
een lege optie toe: <option value="">--Please choose an
option--</option> Zie Verplichte
selectielijst voor meer informatie.
Waarschuwing: Het gebruik maken van meerdere opties selecteren binnen een
<select> wordt sterk afgeraden vanwege de grote hoeveelheid problemen
die het met zich mee brengt op het gebied van gebruikersgemak en toegankelijkheid.
Voeg het attribuut multiple toe aan de <select> om het
selecteren van meerdere opties mogelijk te maken.
De browser handelt de vormgeving af, in veel gevallen betekend dit de lijst met opties
direct getoond worden.
Geef de gebruiker bij deze optie altijd toelichting over de werking, aangezien deze
niet af te lezen is uit de standaard weergave. Dit zorgt qua gebruikservaring snel voor
problemen, gebruik daarom een lijst met selectievakken
als aternatief.
Let op: Houd bij het implementeren van deze optie rekening mee dat gebruikers
die gebruik maken van screenreaders of die enkel met het toetsenbord navigeren naar alle
waarschijnlijkheid problemen zullen ondervinden. gebruik daarom een lijst met selectievakken als aternatief.
Geef indien nodig aan hoeveel opties er tegelijkertijd getoont worden. Gebruik
hiervoor size="[number]" voorbeeld: size="5". Zie Hoeveelheid getoonde opties voor meer informatie.
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<label for="select-multiple">Meerdere opties selecteren</label>
<div class="explanation" role="group" id="select-multiple-1-message">
<span>Toelichting:</span>
<p>Het selecteren van meerdere opties hangt af van uw gebruikte systeem. Enkele voorbeelden:</p>
<ul>
<li>Windows: Houd de <code>ctrl</code>-knop ingedrukt en selecteer met de muis de gewenste opties.</li>
<li>Mac: Houd de <code>cmd</code>-knop ingedrukt en selecteer met de muis de gewenste opties.</li>
</ul>
</div>
<select
id="select-multiple"
name="select-multiple"
multiple
aria-describedby="select-multiple-1-message">
<option value="1">Optie 1</option>
<option value="2">Optie 2</option>
<option value="3">Optie 3</option>
</select>
<button type="submit">Verzend</button>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view">
<div>
<label for="select-multiple">Meerdere opties selecteren</label>
<div>
<div class="explanation" role="group" id="select-multiple-2-message">
<span>Toelichting:</span>
<p>Het selecteren van meerdere opties hangt af van uw gebruikte systeem. Enkele voorbeelden:</p>
<ul>
<li>Windows: Houd de <code>ctrl</code>-knop ingedrukt en selecteer met de muis de gewenste opties.</li>
<li>Mac: Houd de <code>cmd</code>-knop ingedrukt en selecteer met de muis de gewenste opties.</li>
</ul>
</div>
<select
id="select-multiple"
name="select-multiple"
multiple
aria-describedby="select-multiple-2-message">
<option value="1">Optie 1</option>
<option value="2">Optie 2</option>
<option value="3">Optie 3</option>
</select>
</div>
</div>
<button type="submit">Verzend</button>
</form>
Hoeveelheid getoonde opties
Aandachtspunten:
Geef indien nodig aan hoeveel opties er tegelijkertijd getoont worden. Gebruik
hiervoor size="[number]" voorbeeld: size="5".
Voorbeeld
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post">
<label for="select-mulitple-size">Meerdere opties selecteren</label>
<div class="explanation" role="group" id="select-multiple-size-1-message">
<span>Toelichting:</span>
<p>Het selecteren van meerdere opties hangt af van uw gebruikte systeem. Enkele voorbeelden:</p>
<ul>
<li>Windows: Houd de <code>ctrl</code>-knop ingedrukt en selecteer met de muis de gewenste opties.</li>
<li>Mac: Houd de <code>cmd</code>-knop ingedrukt en selecteer met de muis de gewenste opties.</li>
</ul>
</div>
<select
id="select-mulitple-size"
name="select-mulitple-size"
multiple size="3"
aria-describedby="select-multiple-size-1-message">
<option value="1">Optie 1</option>
<option value="2">Optie 2</option>
<option value="3">Optie 3</option>
<option value="4">Optie 4</option>
<option value="5">Optie 5</option>
<option value="6">Optie 6</option>
</select>
<button type="submit">Verzend</button>
</form>
Voorbeeld weergave in kolommen
Visueel voorbeeld:
Html-voorbeeld:
<form action="" method="post" class="horizontal-view">
<div>
<label for="select-mulitple-size">Meerdere opties selecteren</label>
<div>
<div class="explanation" role="group" id="select-multiple-size-2-message">
<span>Toelichting:</span>
<p>Het selecteren van meerdere opties hangt af van uw gebruikte systeem. Enkele voorbeelden:</p>
<ul>
<li>Windows: Houd de <code>ctrl</code>-knop ingedrukt en selecteer met de muis de gewenste opties.</li>
<li>Mac: Houd de <code>cmd</code>-knop ingedrukt en selecteer met de muis de gewenste opties.</li>
</ul>
</div>
<select
id="select-mulitple-size"
name="select-mulitple-size"
multiple size="3"
aria-describedby="select-multiple-size-2-message">
<option value="1">Optie 1</option>
<option value="2">Optie 2</option>
<option value="3">Optie 3</option>
<option value="4">Optie 4</option>
<option value="5">Optie 5</option>
<option value="6">Optie 6</option>
</select>
</div>
</div>
<button type="submit">Verzend</button>
</form>
Gegroepeerde opties
Aandachtspunten:
Gebruik <optgroup label="[groepsnaam]"> om opties binnen de lijst te
groeperen.
Waarschuwing: Het overschrijven van de standaard styling van
<select>-elementen wordt sterk afgeraden. Dit omdat in verschillende
contexten, browsers en systemen het <select>-element anders getoont wordt.
Aandachtspunten:
De rijksoverheidhuisstijl bevat geen specificaties voor de styling van
<select>-elementen.
En het is daarom dan ook niet nodig om extra styling toe te voegen.
Bestaande websites gebruiken in sommige gevallen wel aangepaste styling voor het
<select>-element. Voor de volledigheid is een variant hiervan wel
opgenomen binnen deze componenten bibliotheek, om developers op weg te helpen indien het
onomkoombaar is dat het <select>-element deze styling-versie nodig
heeft. Let op: Deze variant is niet volledig doorgetest in de verschillende
situaties, browsers en systemen. Test daarom bij gebruik zelf de elementen goed
door. Om gebruik te maken van deze extra toegevoegde styling zie Alternatieve weergave.
Voeg een extra <div> rondom het <select>-element met
de class ro-select toe om gebruik te maken van de alternatieve weergave
voor het <select>-element.