Componentes UI
Botones, enlaces, controles y widgets tienen un propósito identificable mediante roles, nombres y estados ARIA.
role="button"+aria-labelrole="navigation"aria-expanded,aria-pressed
En contenido implementado mediante lenguajes de marcado, el propósito de los componentes de la interfaz de usuario, los iconos y las regiones puede determinarse mediante programación.
Mientras que 1.3.5 se centra en los campos de formulario que recopilan datos del usuario, 1.3.6 amplía el alcance a toda la interfaz: componentes interactivos, iconos y regiones de la página deben tener un propósito determinable programáticamente. Esto permite que el software —navegadores, extensiones, tecnologías de apoyo— adapte la presentación para personas con discapacidades cognitivas o del lenguaje.
Botones, enlaces, controles y widgets tienen un propósito identificable mediante roles, nombres y estados ARIA.
role="button" + aria-labelrole="navigation"aria-expanded, aria-pressedLos iconos que transmiten información tienen un nombre accesible que las tecnologías de apoyo pueden leer y adaptar.
aria-label="Guardar"aria-labelledby para iconos complejos<title> accesibleLas áreas de la página —cabecera, navegación, contenido principal, complementario, pie— están delimitadas mediante landmarks semánticos.
<header>, <main>, <nav><aside>, <footer>role="search", role="region"Los tres criterios trabajan en capas complementarias para hacer la interfaz completamente interpretable por software:
Estructura visual (encabezados, listas, tablas) determinable mediante marcado semántico.
Todos los componentes UI tienen nombre, rol y valor accesibles para tecnologías de apoyo.
El propósito funcional de componentes, iconos y regiones es determinable para que el software pueda adaptar la presentación.
Cuando el propósito de los elementos de la interfaz puede determinarse programáticamente, el software puede personalizar la presentación para cada usuario. El flujo es:
El desarrollador añade roles, labels y landmarks que exponen el propósito de cada elemento en el árbol de accesibilidad.
El navegador, extensión o tecnología de apoyo lee el propósito y puede modificar la presentación: cambiar iconos, añadir etiquetas, aplicar temas.
Personas con dislexia, discapacidades cognitivas o del lenguaje reciben la interfaz en un formato que pueden entender: símbolos familiares, texto simplificado, alto contraste.
Personas con dislexia, autismo, discapacidad intelectual o diferencias cognitivas pueden usar software que reemplaza texto por símbolos o iconos familiares de comunicación aumentativa y alternativa (AAC).
Usuarios que dependen de sistemas pictográficos (como ARASAAC) para comunicarse pueden navegar interfaces cuando los propósitos están expuestos y mapeables a símbolos.
Herramientas como Dragon pueden activar componentes por su propósito semántico cuando el nombre accesible refleja fielmente la función del elemento.
Personas que usan extensiones de personalización de interfaz se benefician cuando los elementos tienen propósitos claros que el software puede intercambiar o resaltar.
Usa los elementos de landmark HTML5. Son la base y cubren la mayoría de los casos:
<header>
<nav aria-label="Principal">...</nav>
</header>
<main id="main-content">
<article>...</article>
<aside aria-label="Artículos relacionados">...</aside>
</main>
<footer>...</footer>
<!-- Región de búsqueda -->
<search aria-label="Buscar en el sitio">
<form role="search">...</form>
</search> Los iconos informativos o interactivos deben tener nombre accesible. Los decorativos deben ocultarse:
aria-label Fallo <button>💾</button>
<button>✏️</button> aria-label Correcto <button aria-label="Guardar">
💾
</button>
<button>
<span aria-hidden="true">✏️</span>
<span class="visually-hidden">Editar</span>
</button> Usa role de ARIA cuando el elemento HTML no expresa el propósito por sí solo:
<!-- Navegación de migas de pan -->
<nav aria-label="Ruta de navegación">
<ol role="list">
<li><a href="/es/">Inicio</a></li>
<li><a href="/es/servicios/">Servicios</a></li>
<li aria-current="page">Auditoría</li>
</ol>
</nav>
<!-- Widget de valoración -->
<div role="radiogroup" aria-labelledby="rating-label">
<span id="rating-label">Valoración</span>
<button role="radio" aria-checked="false" aria-label="1 estrella">★</button>
<button role="radio" aria-checked="true" aria-label="2 estrellas">★</button>
</div>
<!-- Menú de usuario -->
<button aria-haspopup="menu" aria-expanded="false" aria-controls="user-menu">
Mi cuenta
</button>
<ul id="user-menu" role="menu" hidden>
<li role="menuitem"><a href="/perfil">Perfil</a></li>
<li role="menuitem"><a href="/salir">Cerrar sesión</a></li>
</ul> Una barra de iconos (negrita, cursiva, enlace, imagen) donde cada botón tiene aria-label con el nombre de la acción y aria-pressed para estados activos. Un software de AAC puede reemplazar los iconos por los del set del usuario.
<div role="toolbar" aria-label="Formato de texto">
<button aria-label="Negrita" aria-pressed="false"><b>B</b></button>
<button aria-label="Cursiva" aria-pressed="true"><i>I</i></button>
<button aria-label="Insertar enlace">🔗</button>
</div> Un artículo de blog con cabecera, navegación principal, navegación de artículo, contenido principal, zona de comentarios y pie. Cada región tiene su landmark y aria-label descriptivo para que el usuario pueda saltar directamente a cualquier sección.
<header>
<nav aria-label="Principal">...</nav>
</header>
<main>
<nav aria-label="Índice del artículo">...</nav>
<article>...</article>
<section aria-label="Comentarios">...</section>
</main>
<aside aria-label="Artículos relacionados">...</aside>
<footer>...</footer> Un gráfico SVG que muestra datos de accesibilidad web expone su propósito con <title> y role="img" para que el software pueda identificarlo como "imagen con información" y ofrecerlo al usuario de forma apropiada.
<svg role="img" aria-labelledby="chart-title chart-desc">
<title id="chart-title">Adopción de WCAG 2.2 por sector</title>
<desc id="chart-desc">
Gráfico de barras: sector público 68 %, privado 42 %, educación 55 %
</desc>
<!-- paths del gráfico -->
</svg> | Código | Técnica | Tipo |
|---|---|---|
| ARIA11 | Usar aria-labelledby para identificar el propósito de las regiones | Suficiente |
| ARIA16 | Usar aria-labelledby para proporcionar un nombre a los controles de la interfaz | Suficiente |
| G197 | Usar etiquetas, nombres y alternativas de texto de forma consistente para contenidos de igual función | Suficiente |
| H97 | Agrupar los elementos relacionados de un menú de navegación con el elemento nav | Suficiente |
| H101 | Usar el elemento search para identificar el formulario de búsqueda | Suficiente |
| ARIA6 | Usar aria-label para proporcionar etiquetas a objetos | Suficiente |
Botones que solo contienen un icono (font icon o emoji) sin aria-label ni texto oculto con clase visually-hidden. Las tecnologías de apoyo anuncian el código de carácter o nada.
<button><i class="icon-trash"></i></button>
<button>❌</button> <button aria-label="Eliminar">
<i class="icon-trash" aria-hidden="true"></i>
</button> Cuando una página tiene más de un <nav> sin aria-label o aria-labelledby, los lectores de pantalla los anuncian todos como "Navegación" sin distinción.
<nav>...menú principal...</nav>
<nav>...paginación...</nav>
<nav>...pie de página...</nav> <nav aria-label="Principal">...</nav>
<nav aria-label="Paginación">...</nav>
<nav aria-label="Pie de página">...</nav> div y span para regiones sin roleConstruir la estructura de la página solo con <div> y <span> sin landmarks ni roles ARIA impide que el software identifique el propósito de cada región.
<div class="header">...</div>
<div class="nav">...</div>
<div class="main">...</div> <header>...</header>
<nav aria-label="Principal">...</nav>
<main>...</main> Etiquetar todas las regiones con el mismo nombre (aria-label="Sección") o usar nombres que no describen el propósito real (aria-label="Contenedor 1") inutiliza la identificación del propósito.