Blog ·
O excepție de accesibilitate care se măsoară
Orice verificator de accesibilitate ajunge la o listă de excepții. A noastră are două, fiecare cu o măsurătoare, iar rularea eșuează când una nu mai prinde.
De Provibr
Îndreptați un verificator automat de accesibilitate spre un produs real și obțineți un număr. Reparați tot ce a găsit și obțineți un număr mai mic. Undeva în acest proces veți da peste o constatare care chiar nu este un defect, iar în acel moment scrieți prima dumneavoastră excepție.
Aceasta este partea interesantă, pentru că o listă de excepții este locul în care un program de accesibilitate moare în tăcere. Începe cu două intrări bine argumentate. Un an mai târziu are unsprezece, dintre care trei nu mai prind nimic, una ascunde o problemă reală, iar nimeni nu își mai amintește de ce se află acolo vreuna dintre ele. Raportul spune zero și nu înseamnă nimic.
Am construit verificatorul pentru panoul nostru luna aceasta. El nu raportează nicio constatare la niciun nivel de gravitate, iar acest text este în mare parte despre de ce nu credem acel număr de unul singur.
Trei reguli erau oprite implicit, iar două dintre ele ascundeau constatări
Biblioteca pe care o folosim livrează unele reguli dezactivate implicit. Am verificat care anume, întrebând-o în loc să presupunem: nepotrivirea dintre nume și conținut, celulele de tabel fără antet și dimensiunea țintei sunt toate trei oprite din start.
Două dintre ele au produs constatări reale pe panoul nostru, 36 împreună, printre care ambele puncte pe care o rundă anterioară le lăsase deschise. Un verificator care rulează setul implicit de reguli este așadar verde exact pe eșecurile pe care cineva le căutase deja, ceea ce este cel mai rău fel de verde: nu se poate deosebi de un produs care este în regulă.
Ele sunt pornite explicit, iar acea singură decizie a schimbat linia de bază mai mult decât orice altă alegere de configurare.
Nouă limbi, pentru că o singură limbă este un dat cu banul
Comutatorul de limbă din antetul nostru arată un cod din două litere și are un nume accesibil care spune ce limbă este. În engleză butonul scrie EN și se numește „Language: English”, iar regula trece, pentru că en se nimerește să apară în interiorul cuvântului English.
În neerlandeză eșuează. Aceeași componentă, același cod, același marcaj.
Măsurat pe toate cele nouă limbi pe care le livrăm: trei eșuează și șase trec, iar fiecare dintre acele șase trece din întâmplare: en în English, de în Deutsch, fr în Français, it în Italiano, es în Español, ro în Română. A testa o singură limbă aici este un verde în gol.
Așa că parcursul de marketing rulează fiecare limbă pe regulile al căror rezultat poate depinde de limbă. Costă timp și este singurul mod în care acea constatare există.
Linia de bază și din ce era făcută
Prima rulare completă peste marketing, autentificare și panoul autentificat a raportat 3 critice, 51 serioase, 72 moderate și 6 minore. Opt reguli au dat socoteală pentru tot.
| Regulă | Constatări |
|---|---|
| conținut care nu se află într-un reper | 60 |
| nepotrivire între nume și conținut | 33 |
| contrast de culoare | 13 |
niciun reper main | 9 |
| antet de tabel gol | 6 |
| regiune derulabilă care nu poate primi focus | 5 |
| celulă de tabel fără antet | 3 |
| ordinea titlurilor | 3 |
Aproape tot era structural, nu vizual. Paginile de autentificare și panoul nu aveau niciun element main și niciun link de salt. Tabelele din articole aveau anteturi goale. Blocurile de cod se derulează pe orizontală și nu puteau fi atinse de la tastatură, ceea ce înseamnă că un utilizator de tastatură pur și simplu nu poate citi partea dreaptă a unei comenzi lungi. Fila de statistici punea un titlu de grafic la nivelul greșit sub titlul paginii.
După reparații: zero, zero, zero, zero. Ceea ce ne readuce la întrebarea cât valorează acel zero.
Două excepții, fiecare cu o măsurătoare
Lista de excepții are exact două intrări, iar fiecare dintre ele poartă un motiv și o măsurătoare care chiar a fost făcută.
Contrastul de culoare sub culori forțate. Rularea panoului cu culorile forțate active a produs 610 eșecuri de contrast pe douăsprezece pagini. Acesta nu este un defect al produsului, este o interacțiune între verificator și browser. Verificatorul citește -webkit-text-fill-color înaintea lui color, iar Chrome nu îl forțează pe primul. Pe pagina de autentificare, pe același titlu, la aceeași încărcare a paginii:
| proprietate | normal | culori forțate |
|---|---|---|
color | rgb(16, 19, 25) | rgb(255, 255, 255) |
-webkit-text-fill-color | rgb(16, 19, 25) | rgb(16, 19, 25) |
| fundalul paginii | rgb(244, 246, 248) | rgb(0, 0, 0) |
Așadar, el compară prim-planul scris de autor cu fundalul forțat și raportează 1,12 la 1 acolo unde ecranul arată de fapt 21 la 1. În acel mod cerința de contrast oricum nu se aplică, pentru că paleta îi aparține utilizatorului.
Regula este oprită în acel singur mod, iar motivul este remăsurat la fiecare rulare. Dacă Chrome sau verificatorul repară asta, acea autoverificare eșuează, iar excepția trebuie argumentată din nou. O excepție fără o autoverificare este o listă de permisiuni tăcută.
Butonul de cont. Regula de nepotrivire între nume și conținut se declanșează pe butonul meniului de utilizator din panou. Șase nume accesibile candidate au fost puse pe butonul real, iar regula a fost rulată pe fiecare dintre ele. Trece numai atunci când numele conține literalmente șirul DKDemo Klant€0.00, în care inițialele și numele contului au fost lipite unul de altul, și eșuează cu același text distanțat, DK Demo Klant €0.00, precum și cu numele real. Toți cei trei copii ai acelui buton sunt ascunși de tehnologia asistivă, lucru pe care regula îl ignoră.
A trece ar însemna deci ca un cititor de ecran să anunțe DKDemo ca pe un singur cuvânt. Acesta este un buton mai prost, adoptat ca să satisfacă o regulă pe care biblioteca însăși o marchează drept experimentală și o livrează dezactivată. Cerința funcțională este îndeplinită: cineva care folosește controlul vocal spune „Demo Klant”, iar asta se află în nume.
Excepția care a murit fără să spună nimic
Aceasta este partea care merită cât tot articolul.
O excepție trebuie să recunoască elementul căruia i se aplică. Selectorul CSS propriu al verificatorului nu este suficient de stabil pentru asta: același buton de cont era identificat într-un fel pe o pagină și în alt fel pe următoarea, așa că o excepție care prinde pe selector acoperă o pagină și nu pe cealaltă. În schimb, excepția prinde pe un atribut de marcaj pe care îl pune componenta însăși, în fragmentul HTML al elementului.
Fragmentul pe care îl raportează verificatorul este trunchiat la 140 de caractere.
Eticheta accesibilă a butonului a crescut, pentru că i s-a adăugat creditul contului. Marcajul a alunecat dincolo de granița de 140 de caractere. Fragmentul se termina acum cu ... Credit €0.00." data-us. Excepția nu a mai prins nimic, în tăcere, iar rularea a raportat 27 de constatări serioase pe care le acoperise cu o rulare mai devreme.
Nimic din acel eșec nu este zgomotos. Excepția nu a dat eroare, lista nu s-a micșorat, nicio configurare nu s-a schimbat. O modificare de interfață într-o funcționalitate fără legătură a mutat un șir, iar o bucată de infrastructură de siguranță a încetat să funcționeze. Remediul este să prindeți pe eticheta de deschidere netrunchiată, pe care verificatorul o oferă la fel de bine.
Lecția generală este mai mare decât accesibilitatea: orice prinde pe text trunchiat este o gardă care cedează exact în momentul în care se schimbă ceva, adică singurul moment în care era nevoie de ea.
O excepție care nu prinde nimic face rularea să eșueze
Fiecare intrare este numărată. Dacă o rulare completă se încheie cu o excepție care a fost atinsă de zero ori, rularea este roșie.
Aceasta este aceeași formă ca o listă de constante din altă parte a acestei baze de cod, și din același motiv: o excepție care nu mai acoperă nimic ar trebui ștearsă, nu lăsată în picioare. Lăsată în picioare, este încă o linie despre care următorul om trebuie să gândească, iar în cele din urmă încetează să mai fie citită.
Numărătoarea se aplică numai unei rulări complete. Restrângeți rularea la un singur parcurs sau la un singur mod și „neatins” nu mai înseamnă nimic.
Cum se dovedește că un zero este un zero adevărat
Dimensiunea țintei, cerința ca un control să aibă cel puțin 24 pe 24 de pixeli, este una dintre cele trei reguli pe care biblioteca le livrează dezactivate. Am pornit-o și am scris alături o a doua măsurătoare proprie, pentru că cele două excepții pe care standardul însuși le acordă trebuie măsurate, nu presupuse. Rularea finală a examinat 2056 de ținte. 155 erau sub dimensiune. 70 dintre ele intrau sub excepția standardului pentru text în linie, adică ținta stă în interiorul unei propoziții, iar 85 sub excepția de spațiere, adică un cerc de 24 de pixeli în jurul ei nu atinge nimic altceva. Nu a rămas niciuna.
Un zero venit de la o sondă pe care ați scris-o dumneavoastră nu se poate deosebi de o sondă care nu poate raporta nimic. Așa că un script separat injectează pe o pagină vie un buton de 16 pe 16 pixeli lângă un vecin și rulează peste el exact acest text al sondei, citit din fișierul sursă și nu copiat. Trece de la 0 la 1 și numește elementul. Traseul de raportare funcționează, așa că zeroul este un rezultat și nu o tăcere.
Ambele excepții ale standardului sunt măsurate, nu ghicite. În linie înseamnă că valoarea calculată a lui display este exact inline și că cel mai apropiat strămoș de tip bloc conține și alt text, ceea ce înseamnă cu adevărat „stă într-o propoziție”. Aceasta nu este o listă de nume de clase. Iar testul de spațiere măsoară cercul față de dreptunghiurile celorlalte ținte și nu față de cercurile lor, ceea ce este mai strict decât standardul: poate produce un roșu fals, niciodată un verde fals.
Ce nu poate face o mașină
Există un scurt manual de patru porți care au nevoie de un om, pentru că ele sunt lucrurile la care nu ajunge niciun verificator: dacă ordinea de citire are sens și dacă un anunț chiar sosește, dacă un parcurs este realizabil numai cu tastatura și nu doar accesibil, dacă aspectul rămâne lizibil la 200 la sută și nu doar încape, și dacă ecranul mai înseamnă ceva în paleta proprie a utilizatorului.
Acele patru sunt deschise. Faptul că o spunem face parte din idee: un raport care spune zero și nu spune la ce nu s-a uitat este același eșec ca o excepție fără o măsurătoare.
Ce am scrie noi
- Întrebați biblioteca ce reguli sunt oprite, nu presupuneți. Cele dezactivate sunt acolo unde erau constatările noastre.
- Rulați fiecare limbă pe care o livrați pe orice regulă al cărei rezultat poate depinde de text.
- Dați fiecărei excepții un motiv și o măsurătoare, scrise acolo unde trăiește excepția.
- Faceți ca o excepție care nu prinde nimic să ducă la eșecul rulării.
- Nu prindeți niciodată o gardă pe text trunchiat.
- Dovediți-vă zerourile injectând ceva ce ar trebui prins.
- Publicați ce nu poate verifica o mașină, ca numărul să fie citit pentru ce este.
Același instinct, aplicat traducerilor și nu marcajului, se află în șaisprezece mii de chei în nouă limbi.
Din munca la panou de la Provibr.