Hoe aangepaste toegankelijke checkboxes en keuzerondjes te maken

Vormelementen zoals selectievakjes en keuzerondjes zien er anders uit, afhankelijk van de browser en het besturingssysteem van de gebruiker. Om deze reden hebben ontwerpers en ontwikkelaars al lang hun eigen selectievakjes en keuzerondjes ontworpen, met het oog op consistentie, ongeacht de browser of het besturingssysteem.

Dit is prima, maar we moeten er tegelijkertijd voor zorgen dat onze selectievakjes en keuzerondjes toegankelijk blijven voor assistentietechnologie (AT) en toetsenbordgebruikers. In deze tutorial leg ik uit wat dit betekent en hoe we de dingen op verschillende manieren correct kunnen doen.

Al vanaf het begin

Deze zelfstudie maakt deel uit van Web Accessibility: de complete leergids, waar we een reeks zelfstudies, artikelen, cursussen en e-boeken hebben verzameld, zodat u de webtoegankelijkheid vanaf het begin beter begrijpt.

Browser standaardstijlen

Laten we beginnen met te kijken hoe uw browser standaard de selectievakjes aanvinkt. Zoals eerder vermeld, hangt wat u hier ziet af van uw browser en besturingssysteem. 

U zult merken dat u uw muis kunt gebruiken om de selectievakjes in of uit te schakelen, plus u kunt uw toetsenbord gebruiken (doorschakelen via TAB en schakelen met RUIMTE, hoewel dit kan veranderen afhankelijk van uw instellingen).

1. Aangepaste checkboxes ontwerpen

Tijd om onze eigen te bouwen. We gaan de standaardvinkjes visueel "verbergen", waarbij op maat gemaakte versies over de kop worden gezet. Het eerste dat we moeten bekijken, is de opmaak.

De HTML-markering

Opmaak voor een enkel selectievakje ziet er als volgt uit:

We gebruiken een

 wrapper om te helpen met aangepaste stijlen, maar afgezien daarvan is de HTML hier standaard opmaak in semantische vorm. De magie gebeurt wanneer we onze visueel verbergen  gebruik van de CSS-regel dekking: 0.

.wrapper positie: relatief;  .wrapper input height: 40px; links: 0; dekking: 0; positie: absoluut; boven: 0; breedte: 40px; 

Dit verbergt ons selectievakje visueel, waardoor we ons eigen kunnen maken. Het is belangrijk dat we het niet verbergen met Geen weergeven omdat dit het selectievakje voor gebruikers van zowel browser- als hulptechnologie (AT) zou verbergen en we ook toetsenbordinteracties zouden verliezen.

Je zult merken dat, hoewel we het verbergen, we het selectievakje een hoogte en breedte van 40 px geven. Dit geeft ons een duidelijk, functioneel doelgebied om onder ons gefabriceerde selectievakje te plaatsen.

De verpakking 

 heeft een positie: relatief CSS-regel. Dit helpt ons om het selectievakje en label te positioneren ::voor en ::na pseudo-elementen gebruiken positie: absoluut.

Visuele checkbox toevoegen met behulp van pseudo-elementen 

We missen nog steeds een visueel selectievakje. Om dit op te lossen gebruiken we eerst een label :: vóór element om een ​​rand toe te voegen:

.wrapper input + label :: before border: 2px solid; inhoud: ""; hoogte: 40px; links: 0; positie: absoluut; boven: 0; breedte: 40px; 

Ik heb een 2px volle rand en overerfde kleur gebruikt, maar je kunt desgewenst een andere randkleur gebruiken. Merk op dat we dit op dezelfde manier positioneren en vergroten als ons transparante checkbox.

Met wat extra marges voor de labels om ons wat ruimte te geven, zo zien onze selectievakjes er op dit punt uit:

Aangepaste selectievakstijlen met 2px-rand.

De volgende stap is om de label :: na pseudo-element om de "vinkje" te stijlen:

.wrapper input + label :: after content: ""; rand: 4px massief; grens links: 0; border-top: 0; hoogte: 20 px; links: 14px; dekking: 0; positie: absoluut; top: 6px; transformeren: roteren (45 graden); overgang: ondoorzichtigheid 0,2s gemak in gebruik; breedte: 12px; 

We maken de controle met behulp van een element dat we een onderrand van vier pixels geven voor onder en rechts. Daarna draaien we het 45 graden: bingo! Een aangepaste controle. U kunt ook verschillende randkleuren gebruiken die passen bij uw ontwerp.

Pseudo-element gestileerd met 4 px-rand onder en rechts. Als het 45 graden gedraaid is, lijkt het op een vinkje

In dit stadium kunt u niets zien; we verbergen de cheque nog steeds visueel met behulp van dekking: 0. Laten we dat verhelpen!

Reveal Custom Check gebruiken : aangevinkt Pseudo-selector

De : aangevinkt pseudo-selector target een selectievakje wanneer het in de "aan" -status wordt geschakeld. We kunnen dit gebruiken om de dekking van onze aangepaste check te wijzigen:

.wrapper input: checked + label :: after opacity: 1; 

Met dat gedaan, is dit wat we hebben:

Notitie: er is nog iets anders dat we hierin moeten opnemen, en dat zijn 'focusstijlen'. We bespreken ze in de volgende demo.

2. Aangepast selectievakje met Inline SVG

Laten we de zaken een niveau hoger leggen. In plaats van een pseudo-element kunnen we een aangepast SVG-pictogram gebruiken voor onze controle. Om dit te doen, plaatsen we de SVG in het label:

In de meeste gevallen is SVG gewoon decoratief, dus aria-verborgen = "true" verbergt het van AT-apparaten.

SVG-stijlen toevoegen

We moeten een aantal stijlen toepassen op het SVG-element, zodat het op de juiste manier wordt gepositioneerd en gedimensioneerd. We kunnen ook de vullen eigenschap om de kleur te wijzigen (blauw in dit geval):

.wrapper input + label svg border: 0; opvulling: blauw; hoogte: 20 px; breedte: 20px; dekking: 0; positie: absoluut; links: 10px; top: 10px; overgang: ondoorzichtigheid 0,2s gemak in gebruik; 

Onthoud Focus State Styles

Inspiratie voor mijn voorbeeld checkbox-stijlen werd genomen van die gevonden in GOV.UK's ontwerpsysteem voor formulierelementen (een briljante bron, ga en neem een ​​kijkje). De focusstijlen zijn net zo belangrijk als in elk focuseerbaar element:

.wrapper input: focus + label :: before box-shadow: 0 0 0 3px # ffbf47; 

We gebruiken een box-shadow voor focusstijlen omdat het afgeronde randen respecteert, die we later ook zullen gebruiken voor keuzerondjes

Focusstijlen voor selectievakje: gele rand

Focusstijlen toevoegen voor Windows "High Contrast Mode"

Windows High Contrast Mode verwijdert box-shadow regels, daarom moeten we daarom ook transparante outline styles toevoegen:

.wrapper input: focus + label :: before box-shadow: 0 0 0 3px # ffbf47; overzicht: 3px solide transparant; / * Voor Windows-modus Hoog contrast. * /

Deze transparante omtrek verschijnt als extra rand in de modus Hoog contrast.

Transparante omtrek verschijnt als een extra rand in Windows High Contrast Mode

3. SVG als achtergrond van een pseudo-element

Naast het gebruik van SVG-code inline, konden we ook een versie van de eerste aangepaste selectievakjes maken die we hebben gemaakt, met behulp van SVG als achtergrond voor het pseudo-element in plaats van een eigen "vinkje" met randen te maken. We hebben alle technieken besproken die je hiervoor moet weten, dus hier is de demo die je kunt ontleden:

4. Aangepaste keuzerondjes

Vrijwel alle stijlen en logica die we tot nu toe voor onze selectievakjes hebben gebruikt, zijn hetzelfde voor keuzerondjes. Bekijk de demo en ontdek het zelf (om met het toetsenbord te navigeren, gebruik de Pijltjestoetsen):

Het enige duidelijke verschil is ons gebruik border-radius en stylen van het : aangevinkt staat een beetje anders. Je zou in dit geval zeker ook een SVG-pictogram kunnen gebruiken - ik zal dat als huiswerk voor je achterlaten! Toon ons uw resultaten in de commentarensectie.

5. Testen op toegankelijkheid

Testen is een belangrijk onderdeel van het proces bij het sleutelen aan native HTML-elementen. Mijn tests zijn verre van perfect, maar dit is hoe ik dingen deed voor deze tutorial:

  • Toetsenbordtest in alle moderne browsers, en IE11.
  • Voice-over met Safari.
  • NVDA-schermlezer met Firefox.
  • Talkback met een Android-apparaat.
  • Kleurblinde omstandigheden met behulp van Sim Daltonism-software.
  • Hoogcontrastmodus in Windows.

Wellicht ontbreekt in deze lijst spraakherkenningssoftware zoals Dragon of schakelt u van apparaat. Maar bij al mijn tests gedroegen de aangepaste selectievakjes en keuzerondjes zich op dezelfde manier als native elementen.

Conclusie en verwijzingen

Hopelijk heeft deze tutorial je inzicht gegeven in hoe je aangepaste stijlen voor selectievakjes en keuzerondjes kunt maken, terwijl je toch bouwt voor toegankelijkheid.

Ik raad ten zeerste aan meer te leren over aangepaste formulierelementen uit deze bronnen:

  • De toegankelijkheid van gestileerde formulierbesturingselementen door Scott O'Hara: veel extra voorbeelden zoals sterbeoordeling, selecteren en schakelen.
  • GOV.UK-formulierelementen.
  • Aangepaste selectievakjes en keuzerondjes van Adrian Roselli.