Lliçó 5 de 10 · 15 min de lectura · Revisada el 26/10/2026
Components complexos amb lector de pantalla: provar els patrons de l'APG
Estàs llegint una lliçó oberta. Matricula't per fer els tests i els exercicis, desar el teu progrés i aconseguir el certificat.
Matricula-m'hi · nivell 4 (49 €)Els components personalitzats (pestanyes, combos amb compleció automàtica, diàlegs, menús desplegables, controls lliscants) concentren bona part de les troballes greus d'una auditoria, i són justament el que les eines automàtiques no saben avaluar. A la lliçó de NVDA i JAWS vas aprendre les ordres; en aquesta aprendràs un mètode per avaluar cada component: què hauria d'anunciar, quines tecles ha d'acceptar, on ha d'anar el focus i com comprovar-ho a l'escriptori i al mòbil. La referència és l'APG (s'obre en una finestra nova) (ARIA Authoring Practices Guide, guia de pràctiques d'autoria ARIA) del W3C, que descriu el comportament que les persones usuàries esperen i que els lectors estan preparats per interpretar.
El mètode: contracte, teclat, lector i mòbil
- Identifica el patró per la seva funció. Abans de tocar res, decideix què és el component per a qui el fa servir: un grup de pestanyes, un botó que desplega contingut (disclosure), un combo amb suggeriments, un diàleg? El rol que hagi triat l'equip de desenvolupament pot estar equivocat; la teva referència és el que fa el component, no el que diu el codi.
- Escriu el contracte esperat. Del patró de l'APG extreu-ne tres coses: el rol, el nom i els estats que s'han d'anunciar; les tecles que han de funcionar; i on va el focus en obrir, tancar o seleccionar.
- Prova només amb teclat, sense lector, com vas veure a la lliçó de teclat i zoom. Si no es pot fer servir amb teclat, ja tens una fallada del 2.1.1 Teclat i el lector només hi afegirà matisos.
- Prova amb NVDA en els dos modes. Arriba al component amb Tab (el lector sol passar a mode formulari) i també en mode navegació, amb fletxes o amb les lletres de navegació ràpida, activant-lo amb Retorn o Espai. Molts components funcionen en un mode i fallen en l'altre.
- Repeteix-ho al mòbil amb VoiceOver o TalkBack: llisca fins al component, activa'l amb doble toc i comprova que els estats també s'hi anuncien.
Punt clau
L'APG no és normativa: un component pot complir el 2.1.1 Teclat i el 4.1.2 Nom, funció i valor amb un model de teclat diferent. Però quan el codi declara un rol ARIA, per exemple role="tablist", el lector anuncia aquest rol i la persona usuària espera les tecles associades. Un rol que promet un comportament que no existeix confon més que no tenir rol.
Taula de referència: què s'ha d'anunciar i quines tecles cal provar
Les paraules exactes canvien entre lectors i idiomes; el que importa és que la informació arribi. Fes servir aquesta taula com a guió de prova i amplia-la amb els patrons de l'APG que apareguin a la teva mostra.
| Component | S'ha d'anunciar | Tecles que cal provar | Fallada típica |
|---|---|---|---|
| Botó desplegable (disclosure) | Nom, «botó», contret o expandit (aria-expanded) | Retorn i Espai; Tab cap al contingut revelat | L'estat no canvia, o el contingut s'insereix al final del DOM, lluny del botó |
| Pestanyes | «Pestanya», nom, seleccionada, posició («2 de 4») | Fletxes entre pestanyes; Tab al panell; Inici i Fi opcionals | Les fletxes no fan res o no s'anuncia quina està seleccionada |
| Combo amb compleció automàtica | «Quadre combinat», nom, expandit; l'opció activa en moure's; nombre de suggeriments | Escriure, Fletxa avall, Retorn, Escapada | L'opció ressaltada visualment no s'anuncia |
| Diàleg modal | «Diàleg» i el seu títol | Tab circula a dins; Escapada el tanca; el focus torna al botó que l'ha obert | El fons continua accessible amb el cursor virtual; el focus es queda darrere |
| Acordió | Botó dins d'un encapçalament, contret o expandit | Retorn i Espai | Encapçalament clicable sense botó: ni operable ni anunciat |
| Taula ordenable | Encapçalament de columna amb el seu estat d'ordenació (aria-sort) | Retorn o Espai sobre el botó de l'encapçalament | L'ordre només s'indica amb una fletxa visual |
| Control lliscant | «Control lliscant», nom, valor (aria-valuetext si el número no és suficient) | Fletxes, Inici, Fi, Re Pàg i Av Pàg | El valor no s'anuncia; a iOS, lliscar amunt o avall no l'ajusta |
Exemple detallat: el combo amb compleció automàtica
És el component que falla més i un dels més utilitzats: cercadors de carrers i municipis en seus electròniques, origen i destinació en webs de transport, cercadors de botigues. Segons WAI-ARIA 1.2 (s'obre en una finestra nova) i el patró de l'APG, el camp porta role="combobox", aria-expanded i aria-controls que apunta a una llista amb role="listbox"; cada suggeriment és un role="option" i el focus es manté al camp mentre l'opció activa es comunica amb aria-activedescendant.
Versió que només funciona per a qui veu la pantalla:
<input type="text" id="calle" placeholder="Carrer">
<ul class="sugerencias">
<li class="activa">Carrer Major</li>
<li>Carrer Major Alt</li>
</ul>Versió que exposa el contracte complet a l'arbre d'accessibilitat:
<label for="calle">Carrer</label>
<input id="calle" type="text" role="combobox"
aria-autocomplete="list" aria-expanded="true"
aria-controls="lista-calles"
aria-activedescendant="calle-op1">
<ul id="lista-calles" role="listbox" aria-label="Carrers suggerits">
<li id="calle-op1" role="option" aria-selected="true">Carrer Major</li>
<li id="calle-op2" role="option" aria-selected="false">Carrer Major Alt</li>
</ul>Guió de prova amb NVDA i el visor de veu obert:
- Tab fins al camp: s'ha d'anunciar el nom («Carrer»), el rol de quadre combinat i que és editable.
- Escriu «Maj»: es comunica que hi ha suggeriments, ja sigui pel canvi a expandit o per un missatge amb el nombre de resultats?
- Fletxa avall: es llegeix «Carrer Major» i, segons el lector, la seva posició a la llista?
- Retorn: el valor passa al camp, la llista es tanca i el lector confirma el valor?
- Escapada: es tanca la llista sense esborrar el que s'ha escrit?
- A iOS amb VoiceOver: pots arribar als suggeriments lliscant i triar-ne un amb doble toc?
Error freqüent
Donar per bo un combo perquè «les fletxes mouen el ressaltat». Si el lector no diu res en prémer Fletxa avall, la persona cega no sap quina opció està activa: és una fallada del 4.1.2 Nom, funció i valor. Comprova al visor de veu que cada pulsació produeix un anunci i que aquest anunci coincideix amb el que està ressaltat a la pantalla.
Diàlegs: el que només revela el lector
Amb teclat ja hauràs comprovat que el focus queda atrapat dins del diàleg i que Escapada el tanca. Amb lector hi afegeixes quatre comprovacions:
- En obrir-lo: s'anuncia que és un diàleg i el seu títol? El nom sol venir d'
aria-labelledbyque apunta a l'encapçalament del diàleg. - En mode navegació: pots sortir del diàleg amb Fletxa avall o amb H i acabar llegint el contingut de fons? Amb l'element
<dialog>obert mitjançantshowModal(), la resta de la pàgina queda inert; ambrole="dialog"depèn d'aria-modal, d'inerti del suport de cada combinació, i per això es prova en totes les de la línia base. - En tancar-lo: el focus torna al botó que l'ha obert, o es perd i el lector comença a llegir des del principi de la pàgina?
- Al mòbil: VoiceOver o TalkBack permeten lliscar cap al contingut del darrere?
Les fallades es registren normalment al 2.4.3 Ordre del focus (focus que s'escapa o no torna) i al 4.1.2 Nom, funció i valor (diàleg sense rol o sense nom); si no se'n pot sortir amb teclat, al 2.1.2 Sense paranys per al focus del teclat.
Un cas clàssic: la navegació del lloc amb role="menu"
Els rols menu i menubar estan pensats per a menús d'aplicació, com els d'un programa d'escriptori. Quan s'apliquen a la navegació principal d'un lloc, el lector anuncia «barra de menú» i «element de menú», sol passar a mode formulari i la persona usuària espera moure's amb fletxes. Si l'script no implementa aquest model de teclat, l'experiència es trenca: les fletxes no fan res i el comportament contradiu el que s'ha anunciat. Per a la navegació d'un lloc, l'APG recomana el patró de botons desplegables amb enllaços normals.
Exemple
Banca en línia. El menú «Els meus productes» té role="menubar". NVDA anuncia «barra de menú, Els meus productes, submenú». En prémer Fletxa avall per obrir-lo no passa res; amb Retorn es desplega, però el focus es queda al botó i les opcions només s'assoleixen amb Tab, sense que el lector indiqui que el submenú està obert. Com que es pot completar la tasca amb Tab, no és una fallada del 2.1.1; sí que ho és del 4.1.2, perquè el rol i l'estat exposats no corresponen al comportament real. Recomanació: substituir el menú ARIA pel patró de navegació amb botons desplegables i aria-expanded.
Criteri pràctic per a l'informe: si en una combinació de la línia base el component no es pot fer servir, és una fallada (2.1.1 o 4.1.2 segons la causa). Si es pot fer servir però contradiu el que anuncia, registra-ho amb el seu criteri quan el rol o l'estat exposats siguin incorrectes, i afegeix-hi sempre la recomanació del patró adequat.
Prova-ho tu
Obre l'exemple de pestanyes de l'APG al catàleg de patrons del W3C amb NVDA actiu. Recorre'l amb Tab i amb fletxes, i després en mode navegació amb Retorn. Copia del visor de veu el que s'anuncia. Després repeteix la prova amb les pestanyes d'un web que facis servir cada dia i compara les dues sortides: què falta a la segona?
Resum
- Avalua cada component amb el mateix mètode: identificar el patró per la seva funció, escriure el contracte esperat, provar amb teclat, amb lector en tots dos modes i al mòbil.
- L'APG descriu el comportament esperat; no és obligatòria, però un rol ARIA declarat promet unes tecles i uns anuncis que s'han de complir.
- En els combos, comprova amb el visor de veu que l'opció activa s'anuncia a cada pulsació; si no, és una fallada del 4.1.2.
- En els diàlegs, verifica l'anunci de rol i títol, que el fons no sigui accessible en mode navegació i que el focus torni al disparador.
role="menu"a la navegació del lloc és una font habitual de problemes: recomana el patró de botons desplegables.
Portes 3 lliçons d'aquest curs: que no es perdin
Crea el teu compte i desa el que ja has llegit i segueix el curs amb tot:
- El test d'aquesta lliçó (3 preguntes) per comprovar el que has après
- Exercicis pràctics amb pàgines reals
- El teu progrés desat: continues on ho vas deixar, des de qualsevol dispositiu
- Constància del curs amb les hores i certificat del nivell 4 quan aprovis l'examen
Entres amb el teu compte de Google o només amb el teu correu electrònic. No cal contrasenya.
Matricula-m'hi · nivell 4 (49 €)