Addaw, anar a la pàgina d'inici Donar

Lliçó 7 de 10 · 12 min de lectura · Revisada el 26/10/2026

Components complexos i contingut dinàmic: auditar el 4.1.2 i el 4.1.3 patró a patró

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 €)

La lliçó 6 et va donar el mètode per avaluar el 4.1.2 i el 4.1.3: inventari, arbre d'accessibilitat, teclat i lector. Per aplicar-lo amb soltesa has de saber quins valors esperar en cada component i en quins escenaris dinàmics solen faltar els anuncis. Aquesta lliçó és la teva taula de referència: els patrons més freqüents de l'ARIA Authoring Practices Guide (s'obre en una finestra nova) (APG) amb el seu rol i els seus estats, els casos frontera del nom accessible i els missatges d'estat que més s'obliden en webs reals.

Què cal esperar en cada patró

Amb la taula següent pots comparar el que mostra l'arbre d'accessibilitat amb el que s'espera. Recorda que l'element natiu, quan existeix, ja aporta rol i estat: un <button> o un <input type="checkbox"> no necessiten ARIA.

PatróRol esperatEstats i propietats clauFallada típica
Botó commutadorbuttonaria-pressedEstat només visual (icona plena o buida)
Interruptorswitcharia-checkedClasse CSS «on» sense estat accessible
Desplegable o acordióbuttonaria-expanded (i aria-controls)Valor que no s'actualitza en tancar
Pestanyestablist, tab, tabpanelaria-selected a la pestanya activaPestanyes com a enllaços sense estat
Diàleg modaldialog o alertdialogNom (aria-labelledby), aria-modal="true"Capa sense rol ni nom
Quadre combinatcombobox al camp; listbox i optionaria-expanded, aria-controls, aria-activedescendant, aria-selectedOpció ressaltada que el lector no anuncia
Botó de menúbutton; menu i menuitemaria-haspopup, aria-expandedrole="menu" a la navegació del lloc
Control lliscantslideraria-valuenow, aria-valuemin, aria-valuemax, aria-valuetextValor que no canvia en moure el control
Marc (iframe)NatiuNom mitjançant titleMapes o vídeos incrustats sense títol

Dos matisos. A ARIA 1.2 el patró de quadre combinat va canviar: el rol combobox va al mateix camp de text, no en un contenidor que l'embolcalla, i els components construïts amb el patró antic donen resultats irregulars segons el lector. I el rol menu promet la interacció d'un menú d'aplicació (fletxes, focus gestionat); aplicat a un menú de navegació corrent, el rol anunciat no correspon a com es fa servir, cosa que sol generar fallades del 4.1.2 i del 2.1.1 alhora. Consulta cada patró a l'APG abans de dictaminar.

Error freqüent

Exigir el patró APG al peu de la lletra com si fos normatiu. L'APG és una guia de bones pràctiques, no forma part de les WCAG. El que exigeix el 4.1.2 és que el nom, el rol, els estats i els valors siguin determinables i que se'n notifiquin els canvis. Un component que s'aparta de l'APG però ho comunica tot correctament compleix; cita l'APG com a referència de la solució, no com el requisit incomplert.

Casos frontera del nom accessible

L'algorisme de l'especificació Accessible Name and Description Computation té conseqüències que convé conèixer en auditar:

  • aria-labelledby pot concatenar i apuntar a text ocult. Serveix per donar context a botons repetits sense canviar el que es veu.
  • aria-label no serveix en qualsevol element. ARIA 1.2 prohibeix anomenar elements genèrics (div o span sense rol) i alguns altres rols; els navegadors i els lectors el poden ignorar. Un <div aria-label="Menú"> clicable continua sense rol ni nom fiable.
  • El contingut generat per CSS compta. El text de ::before i ::after entra en el càlcul del nom. Les fonts d'icones que insereixen caràcters d'ús privat poden produir noms il·legibles.
  • title i placeholder són l'últim recurs. Donen nom, però fràgil; si és l'únic que hi ha, revisa també el 3.3.2 i el 2.5.3.
  • Les referències per id no travessen el shadow DOM (el DOM encapsulat dels components web). Un aria-labelledby que apunta fora de la seva arrel no funciona encara que l'id existeixi.

Exemple

<!-- Incorrecte: vint botons amb el mateix nom «Elimina» -->
<tr><td>Certificat d'empadronament</td>
  <td><button>Elimina</button></td></tr>

<!-- Correcte: nom «Elimina Certificat d'empadronament» -->
<tr><td id="doc-17">Certificat d'empadronament</td>
  <td><button id="del-17" aria-labelledby="del-17 doc-17">Elimina</button></td></tr>

El nom accessible comença per l'etiqueta visible, així que també es respecta el 2.5.3 Etiqueta en el nom. Compte amb el veredicte: si cada botó és a la seva fila d'una taula ben marcada, el context programàtic ja els distingeix i l'exemple correcte és una millora; la fallada apareix quan res no permet saber a quin element afecta cada botó.

Valors i estats que estableix l'usuari

El 4.1.2 no es limita a llegir: els estats i els valors que l'usuari pot establir s'han de poder establir programàticament, i se n'han de notificar els canvis. En un selector personalitzat, el valor triat ha de figurar a l'arbre (no només pintat en un span); en un control lliscant, aria-valuenow ha de canviar en moure'l; en un grup de caselles amb «Selecciona-ho tot», l'estat mixt s'expressa amb aria-checked="mixed". La descripció (aria-describedby), en canvi, no l'exigeix el 4.1.2: la seva absència pot afectar l'1.3.1 o el 3.3.2, no aquest criteri.

Missatges d'estat en escenaris dinàmics

Recorre aquests escenaris a cada auditoria; són els que més sovint es queden en silenci:

  • Emplenament automàtic: «5 suggeriments disponibles» quan apareix la llista, si es mostra a la pantalla un recompte o un avís equivalent.
  • Carretó i preferits: «Producte afegit a la cistella» sense moure el focus.
  • Desament automàtic: «Esborrany desat», amb polite i sense repetir-lo cada pocs segons.
  • Càrrega i progrés: «S'estan carregant els resultats…» i el seu final; per a un progrés mesurable, role="progressbar" amb valors.
  • Desplaçament infinit: «S'han carregat 20 productes més».
  • Validació en sortir del camp: l'error en línia és un missatge d'estat si el focus no s'hi mou.
  • Avisos emergents (toasts) amb acció: el text s'anuncia i l'acció («Desfés») és accessible amb teclat; si desapareix sola, revisa també el 2.2.1 Temps ajustable.
<!-- La regió existeix buida des de la càrrega de la pàgina -->
<div id="aviso" role="status"></div>

<script>
  // En afegir el producte, només es canvia el text
  document.getElementById('aviso').textContent =
    'Producte afegit a la cistella. Total: 3 articles.';
</script>

Amb role="status" o aria-live, inserir el contenidor ja emplenat sol no anunciar-se; role="alert" es comporta millor en aquest cas, però no convé dependre'n. Escriure dues vegades el mateix text tampoc no garanteix un segon anunci: si el missatge es repeteix, buida la regió abans o afegeix-hi una dada que canviï.

Com verificar el que s'anuncia

No n'hi ha prou de veure l'atribut al codi: cal comprovar l'anunci a la línia base. A NVDA, el Visor de veu (menú de NVDA, Eines) mostra per escrit tot el que diu el lector, cosa que et dona una evidència literal per a l'informe. A VoiceOver de macOS, el tauler de subtítols fa la mateixa funció. A les eines de desenvolupament, comprova que el contenidor amb role o aria-live és al DOM abans de l'acció, i que no es crea amb ella.

Prova-ho tu

Obre una botiga en línia, activa NVDA amb el Visor de veu i afegeix un producte a la cistella sense moure el focus. Copia el que apareix al Visor de veu. Després obre les pestanyes d'una fitxa de producte o un acordió de preguntes freqüents i, al tauler Accessibility de Chrome, anota el rol, el nom i l'estat abans i després d'activar-lo. Compara-ho amb la taula d'aquesta lliçó.

Resum

  • Cada patró té un rol i uns estats esperats; compara'ls amb l'arbre d'accessibilitat i fes servir l'APG com a referència de la solució, no com a requisit normatiu.
  • El nom accessible té paranys: aria-label en elements genèrics, contingut generat per CSS, title com a únic nom i referències que no travessen el shadow DOM.
  • El 4.1.2 inclou establir i notificar valors i estats, no la descripció.
  • Emplenaments automàtics, carretons, desaments, càrregues, desplaçament infinit, validació en línia i toasts són els missatges d'estat que més s'obliden.
  • Verifica els anuncis amb el Visor de veu de NVDA o el tauler de subtítols de VoiceOver, i comprova que la regió viva existeix abans del canvi.

T'ha servit aquesta lliçó?

Crea el teu compte 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 €)