Nimi, rooli, arvo
Jokaisen käyttöliittymäkomponentin on ohjelmallisesti esitettävä nimi, rooli ja — tarvittaessa — arvo ja tila. Ilman tätä ruudunlukuohjelmat, ääniohjaus ja kytkimet eivät pysty tunnistamaan tai käyttämään elementtiä.
Mitä vaaditaan
Jokaisen sivun interaktiivisen elementin — painikkeet, linkit, lomakekentät, välilehdet, liukusäätimet, mukautetut widgetit — on esitettävä kolme tietoa avustavalle teknologialle:
- Nimi — miten tätä elementtiä kutsutaan? (“Lähetä”, “Sulje valintaikkuna”, “Äänenvoimakkuus”)
- Rooli — minkä tyyppinen elementti tämä on? (painike, linkki, valintaruutu, välilehti, liukusäädin)
- Arvo / tila — komponenteille, joilla sellainen on: onko se painettu, laajennettu, valittu, merkitty? Mikä on nykyinen arvo?
Esittämisen on oltava ohjelmallista — asetettu DOM:iin eikä CSS:llä maalattu. Ruudunlukuohjelmat, pistekirjoitusnäytöt, ääniohjausohjelmistot ja kytkinskannerit lukevat saavutettavuuspuuta eikä pikseleitä.
Vaatimustenmukaisuuden saavuttaminen
- Käytä natiivia HTML-elementtiä aina kun sellainen on olemassa.
<button>sisältää oikean roolin, kohdistuksen, näppäimistönkäsittelyn ja saavutettavan nimen tekstisisällöstään — ilmaiseksi. - Vain-ikoni-painikkeille lisää
aria-label(tai visuaalisesti piilotettu teksti).<button aria-label="Sulje">×</button>. - Lomakesyötteille yhdistä
<label for>syötteenid:hen. Tai sisällytä syöte<label>-elementin sisään. Paikkamerkki ei ole nimilappu. - Kun mukautettu widget on rakennettava
<div>- ja<span>-elementeistä, lisäärole="…", hallinnoitabindex:iä, käsittele Enter ja Välilyönti, ja heijasta tilaaria-pressed-,aria-expanded-,aria-checked-,aria-selected-,aria-valuenow-attribuuteilla. - Aja renderöity sivu selaimen saavutettavuuspuutarkastimen läpi (Chrome DevTools → Elementit → Saavutettavuus) ja lue jokainen elementti: jokaisen tulisi ilmoittaa itsensä nimellä + roolilla + tilalla.
Yleiset virheet
<div onclick="…">tyyliteltynä painikkeena — ei roolia, ei näppäimistöä, ei nimeä. Ruudunlukuohjelmat ohittavat sen. Ääniohjaus ei pysty sanomaan “klikkaa Tallenna.”<div role="button">ilmantabindex="0", ilman Enter/Välilyönti-käsittelijää — näyttää saavutettavalta, ei ole sitä.- Vain-ikoni-painikkeet (
<button><svg /></button>) ilmanaria-label:ia,aria-labelledby:tä tai visuaalisesti piilotettua tekstiä. Ilmoitetaan pelkkänä “painike.” - Mukautetut pudotusvalikot rakennettu
<div>- ja JavaScript-elementeillä, joista puuttuvatrole="combobox",aria-expanded,aria-controlsja listbox/option-roolit sen alla. - Vaihtopainikkeet (mykistys, suosikit, seuraaminen), jotka muuttavat tilaa visuaalisesti mutta eivät koskaan päivitä
aria-pressed:ia. Näkevät käyttäjät näkevät muutoksen; ruudunlukuohjelman käyttäjät eivät kuule eroa. - Lomakesyötteet, joiden vieressä on visuaalinen nimilappu mutta joilta puuttuu
for/id-linkitys tai käärivä<label>. - Mukautetut valintaruudut piirretty
<svg>-elementillä ja piilotetulla natiivisyötteellä, joka ei koskaan heijasta:checked-tilaa visuaaliseen käyttöliittymään — ruudunlukuohjelman ja visuaalinen tila eriytyvät.
Miksi tämä on tärkeää
Tämä on spesifikaation useimmin mainittu onnistumiskriteeri. Lähes jokainen “tätä sivustoa ei voi käyttää ruudunlukuohjelmalla” -valitus johtuu jonnekin 4.1.2-virheeseen — yleensä <div>, joka esiintyy painikkeena, tai ikoni-painike ilman nimeä. Tässä myös mukautettujen widgetien rakentamiskustannukset tulevat näkyviin: jokainen natiivi HTML-elementti läpäisee 4.1.2:n automaattisesti; jokainen käsin rakennettu <div>-widget joutuu ansaitsemaan sen rivi riviltä. Nopein 4.1.2-auditointi on selata sivu ruudunlukuohjelman kanssa ja kuunnella — kaikki, mikä ilmoittaa itsensä “tyhjänä” tai pelkkänä “painikkeena”, on löydös.