Lección 5 de 10 · 14 min de lectura · Revisado el 26/10/2026
Leer la especificación: la ficha de cada rol, ARIA in HTML y la APG
Muchos de los errores que catalogaremos en la última lección de teoría se evitan con una consulta de dos minutos antes de escribir un atributo. La duda «¿puedo poner aria-label aquí?» o «¿qué necesita un role="tab" para funcionar?» tiene una respuesta exacta y pública. En la lección anterior viste el vocabulario de roles, estados y propiedades; en esta aprenderás a leer los documentos que lo definen, para que dejes de depender de fragmentos copiados y de respuestas de foros.
El mapa de documentos
Bajo el nombre genérico de «ARIA» conviven varios documentos del W3C con funciones distintas. Saber cuál consultar en cada caso ahorra mucho tiempo:
| Documento | Qué responde | Carácter |
|---|---|---|
| WAI-ARIA 1.2 (se abre en una ventana nueva) | Qué significa cada rol y cada atributo, qué atributos admite o exige cada rol y en qué contexto debe aparecer | Recomendación del W3C (normativa) |
| ARIA in HTML | Qué roles y atributos ARIA se pueden poner en cada elemento HTML, y cuáles son redundantes | Especificación del W3C con requisitos para autores |
| Accessible Name and Description Computation (accname) | Cómo se calculan paso a paso el nombre y la descripción accesibles | Especificación del W3C |
| Core-AAM y HTML-AAM | Cómo traduce el navegador cada rol y elemento a las API de accesibilidad | Especificaciones dirigidas a los navegadores |
| ARIA Authoring Practices Guide (se abre en una ventana nueva) (APG) | Cómo implementar patrones concretos: teclado, roles, estados y ejemplos | Guía informativa (no normativa) |
| Using ARIA | Las cinco reglas de uso y consejos prácticos | Nota informativa del W3C |
En el día a día bastan tres: WAI-ARIA (qué es cada cosa), ARIA in HTML (dónde puedes ponerla) y la APG (cómo se comporta un patrón completo).
Anatomía de la ficha de un rol
Cada rol de WAI-ARIA 1.2 tiene una definición en prosa seguida de una tabla de características. La tabla está en inglés y es muy compacta, pero cada fila responde a una pregunta práctica:
- Is Abstract (rol abstracto). Roles como
widget,structure,landmark,input,command,composite,section,select,rangeowindowsolo existen para ordenar la taxonomía. Nunca se escriben en el atributorole:role="widget"no significa nada para el navegador. - Superclass Role / Subclass Roles (herencia).
switches subclase decheckboxy por eso heredaaria-checked;searchboxes subclase detextbox. La herencia explica qué atributos tiene un rol aunque no aparezcan en su propia lista. - Base Concept / Related Concepts (equivalentes). Indican el elemento HTML o el concepto en que se inspira el rol: el de
checkboxremite a<input type="checkbox">. Si hay un equivalente nativo, la regla 1 te dice que lo uses. - Required Context Role (contexto obligatorio). Dónde debe estar el rol:
tabdentro detablist,optiondentro delistbox(o de ungroupdentro de él),listitemdentro delist. - Required Owned Elements (hijos obligatorios). Lo que el rol debe contener:
tablistcontienetab,listcontienelistitem,listboxcontieneoption. - Required States and Properties (atributos obligatorios). Sin ellos el componente está incompleto:
checkboxyswitchexigenaria-checked;slider,aria-valuenow;heading,aria-level. - Supported / Inherited States and Properties (atributos admitidos). Todo lo que el rol acepta, propio o heredado. Lo que no aparece aquí ni entre los atributos globales no tiene efecto en ese rol.
- Prohibited States and Properties (atributos prohibidos). Por ejemplo, el rol
generic(el de<div>y<span>) prohíbearia-labelyaria-labelledby. Es la explicación formal de lo que vimos en la lección anterior: unaria-labelen un<div>sin rol no sirve. - Name From (origen del nombre).
contentssi el nombre puede salir del texto interior (botones, enlaces, pestañas);authorsi debe darlo quien desarrolla conaria-label,aria-labelledbyo un<label>(campos, diálogos, listas de opciones);prohibitedsi el rol no admite nombre. - Accessible Name Required (nombre obligatorio). Si es
True, un elemento con ese rol sin nombre es un error de 4.1.2. - Children Presentational (hijos presentacionales). Si es
True, el contenido se aplana, como viste en la lección sobre el árbol de accesibilidad. - Implicit Value for Role (valores por defecto). Por ejemplo, en
sliderel mínimo implícito es 0 y el máximo 100 si no indicasaria-valueminyaria-valuemax.
Ejemplo
Vas a construir el interruptor «Recibir avisos por SMS» de un área personal bancaria. Antes de escribir código, lees la ficha de switch y sacas cinco decisiones:
- Es subclase de
checkbox: el estado se expresa conaria-checked, y es obligatorio. - Un interruptor solo tiene dos posiciones: usa
trueyfalse; el valormixedno tiene sentido aquí. - El nombre puede salir del contenido: basta con que el texto visible esté dentro del control.
- El nombre es obligatorio: si el diseño solo muestra un icono, necesitarás
aria-labelledbyoaria-label. - Tiene hijos presentacionales: no metas un enlace a las condiciones dentro del interruptor, ponlo al lado.
Con esas decisiones, el <button role="switch" aria-checked="false"> que viste en la lección anterior queda justificado línea a línea.
ARIA in HTML: lo que puedes poner en cada elemento
La especificación WAI-ARIA define los roles en abstracto; ARIA in HTML aterriza esas reglas en HTML. Para cada elemento indica su rol implícito, qué roles se le pueden asignar y qué atributos aria-* admite. Algunas consecuencias que conviene conocer:
- Hay elementos que no admiten ningún rol, como
<label>o<input type="password">. Otros admiten pocos: una imagen conalt=""solo puede llevarrole="none"orole="presentation", y ningún atributo ARIA salvoaria-hidden. - No dupliques el estado nativo. En un
<input type="checkbox">no se debe usararia-checked: el estado lo da la propiedadchecked. Del mismo modo, si un campo tienerequiredodisabled, el equivalente ARIA sobra, y contradecirlo (requiredconaria-required="false") es un error. - Los roles redundantes se desaconsejan:
<nav role="navigation">o<button role="button">no aportan nada. - Permitido no significa recomendable. ARIA in HTML permite, por ejemplo, poner
role="tab"en un<h2>, pero hacerlo destruye el encabezado. La regla 2 de la primera lección sigue mandando.
Error frecuente
<input type="checkbox" id="lopd" aria-checked="true">
<label for="lopd" role="button">Acepto la política de privacidad</label>
<img src="separador.png" alt="" aria-label="Separador">Tres incumplimientos de ARIA in HTML en tres líneas: aria-checked en una casilla nativa (y que además puede contradecir su estado real), un rol en un <label>, que no lo admite, y un aria-label en una imagen marcada como decorativa. El validador del W3C (Nu Html Checker) y las herramientas como axe detectan este tipo de errores: pásalos siempre antes de revisar a mano.
La APG: guía, no norma
La ARIA Authoring Practices Guide describe decenas de patrones (acordeón, diálogo, pestañas, combobox, árbol, deslizador…). Cada patrón incluye una tabla de interacción con el teclado, otra de roles, estados y propiedades, y ejemplos funcionales. Es la referencia más útil para construir componentes, y la usaremos a fondo en el curso N3-C5. Al consultarla, ten presentes tres cautelas:
- No es normativa. No forma parte de WCAG ni de la EN 301 549 (PDF, se abre en una ventana nueva). Un componente puede cumplir 4.1.2 sin seguir la APG al pie de la letra, y uno que la copie puede incumplir si se adapta mal.
- Sus ejemplos demuestran patrones, no son código de producción. La propia guía advierte de que el soporte en navegadores y lectores varía y de que hay que probar.
- Elige el patrón por la función, no por el aspecto. El patrón de menú está pensado para menús de aplicación; la navegación de un sitio no es un
menuaunque visualmente se despliegue.
La APG incluye también páginas de prácticas transversales, como las dedicadas a los nombres y descripciones accesibles o a la interfaz de teclado.
Un método de consulta en cinco minutos
- ¿Existe un elemento HTML? Mira el concepto base del rol y la tabla de ARIA in HTML. Si existe, úsalo y quizá no necesites ARIA.
- Lee la ficha del rol: contexto obligatorio, hijos obligatorios, atributos obligatorios, origen del nombre e hijos presentacionales.
- Comprueba ARIA in HTML: ¿se permite ese rol en el elemento sobre el que lo vas a poner?
- Abre el patrón de la APG: teclado esperado y estados que hay que actualizar.
- Prueba el soporte con los lectores de pantalla de tu público, como vimos en la lección sobre el árbol de accesibilidad.
Pruébalo tú
Abre la especificación WAI-ARIA 1.2, busca la definición del rol tab y responde a partir de su tabla: ¿qué rol de contexto exige?, ¿admite aria-selected?, ¿tiene hijos presentacionales?, ¿de dónde puede salir su nombre? Después, en ARIA in HTML, comprueba si un <button> puede llevar role="tab". (Respuestas: tablist; sí; sí; del contenido o del autor; sí.)
Referencias: WAI-ARIA 1.2, ARIA in HTML y ARIA Authoring Practices Guide.
Resumen
- WAI-ARIA 1.2 define qué es cada rol y atributo; ARIA in HTML, dónde se puede usar; la APG, cómo se implementa cada patrón.
- La ficha de un rol responde a las preguntas clave: contexto y hijos obligatorios, atributos obligatorios, admitidos y prohibidos, origen del nombre e hijos presentacionales.
- No dupliques ni contradigas el estado nativo con ARIA, y recuerda que «permitido» no equivale a «recomendable».
- La APG es informativa: guía excelente, pero no es norma ni código listo para producción.
- Antes de escribir un atributo, sigue el método: HTML nativo, ficha del rol, ARIA in HTML, APG y prueba real.
Comprueba lo que has aprendido
Esta lección se puede leer libremente. Para hacer su test de 3 preguntas, los ejercicios prácticos con páginas reales, guardar tu avance y optar al examen y al certificado, matricúlate en el curso.