ARIA roles, states y properties

Lectura
22 min~5 min lectura
Objetivo de la lección

Se usa cuando el HTML semántico no es suficiente para comunicar el significado o estado de un componente interactivo.

Puntos de control
  • ARIA roles, states y properties
  • La regla de oro de ARIA
  • Tabla de ARIA roles, states y properties
  • Roles ARIA más comunes

ARIA roles, states y properties

ARIA (Accessible Rich Internet Applications) es un conjunto de atributos que puedes agregar al HTML para proporcionar información adicional a las tecnologías asistivas. Se usa cuando el HTML semántico no es suficiente para comunicar el significado o estado de un componente interactivo.

Respuesta rápida: qué son ARIA roles, states y properties: ARIA agrega semántica al árbol de accesibilidad cuando el HTML nativo no alcanza. Los ARIA roles describen qué es un componente, los ARIA states describen su estado actual y las ARIA properties agregan nombre, descripción, relación o configuración.

La regla de oro de ARIA

  • Primera regla de ARIA: NO uses ARIA si puedes usar un elemento HTML nativo que ya tiene la semántica
  • <button> es SIEMPRE mejor que <div role='button'> — el nativo viene con focus y keyboard handling gratis
  • ARIA no cambia el comportamiento — solo cambia lo que el lector de pantalla anuncia al usuario
  • Si agregás role='button' a un div, también debes agregar tabindex='0' y manejar Enter y Space con JavaScript
  • ARIA mal usado es PEOR que no usar ARIA — puede confundir al lector de pantalla y al usuario

Tabla de ARIA roles, states y properties

Usá esta tabla para decidir si necesitás ARIA o si el HTML semántico ya resuelve el problema.

Tipo Qué comunica Ejemplos Cuándo usarlo
ARIA roles Tipo de elemento o patrón de interfaz. role="dialog", role="alert", role="tablist" Cuando un componente custom no tiene equivalente HTML suficiente.
ARIA states Estado que cambia durante la interacción. aria-expanded, aria-selected, aria-invalid Cuando el lector de pantalla debe conocer el estado actual.
ARIA properties Nombre, descripción, relación o comportamiento. aria-label, aria-describedby, aria-controls Cuando necesitás conectar controles, labels, ayuda o regiones dinámicas.

Referencia oficial: W3C WAI-ARIA overview y MDN: Using ARIA roles, states and properties.

Roles ARIA más comunes

  • role='navigation': marca una sección de navegación (aunque <nav> es preferible)
  • role='dialog': para modales — indica al lector de pantalla que hay un diálogo superpuesto
  • role='alert': para mensajes importantes que aparecen dinámicamente — se anuncia inmediatamente
  • role='tablist', role='tab', role='tabpanel': para interfaces de pestañas accesibles
  • role='menu', role='menuitem': para menús de acciones (no de navegación)

Properties y States ARIA esenciales

  • aria-label: proporciona un nombre accesible cuando el texto visible no es suficiente — <button aria-label='Cerrar modal'>X</button>
  • aria-labelledby: referencia otro elemento como label — útil cuando el label está en otro lugar del DOM
  • aria-describedby: proporciona una descripción adicional — ideal para campos de formulario con instrucciones
  • aria-expanded='true/false': indica si un acordeón, dropdown o menú está expandido o colapsado
  • aria-hidden='true': oculta un elemento de las tecnologías asistivas (pero sigue visible) — para decoraciones
  • aria-live='polite/assertive': anuncia contenido dinámico que cambia sin recargar la página (notificaciones, contadores)

aria-label, aria-labelledby y aria-describedby

Muchas búsquedas sobre ARIA vienen de una duda concreta: cómo dar nombre o contexto a un control. La regla práctica es simple:

  • aria-label: usalo cuando no hay texto visible suficiente, por ejemplo un botón solo con icono.
  • aria-labelledby: usalo cuando el nombre accesible debe venir de otro elemento visible.
  • aria-describedby: usalo para ayuda, error, restricción o explicación adicional.
<button aria-label="Cerrar modal">X</button>

<h2 id="billing-title">Datos de facturación</h2>
<section aria-labelledby="billing-title">
  ...
</section>

<label for="email">Email</label>
<input id="email" aria-describedby="email-help">
<p id="email-help">Usá el email donde querés recibir acceso.</p>

No dupliques nombres. Si el botón ya dice "Cerrar", normalmente no necesita aria-label="Cerrar".

Formularios accesibles con ARIA

  • Cada input DEBE tener un label asociado: <label for='email'>Email</label><input id='email'>
  • aria-required='true': indica que un campo es obligatorio (además del visual como asterisco)
  • aria-invalid='true': marca un campo que tiene un error de validación
  • aria-describedby: conecta mensajes de error o instrucciones con el campo correspondiente
  • Grupos de radio buttons necesitan <fieldset> + <legend> para dar contexto al grupo completo

aria-required vs required

Para un <input>, <select> o <textarea> nativo, preferí required. Además de comunicar obligatoriedad, el navegador puede bloquear el envío inválido. aria-required="true" comunica el requisito a tecnologías asistivas, pero no agrega comportamiento ni validación por sí solo.

Caso Mejor opción Razón
Input HTML real required Semántica y validación nativa.
Control custom con role="checkbox" aria-required="true" + JS ARIA comunica, JavaScript implementa comportamiento.
Label ya dice "obligatorio" Evitar duplicación Algunos lectores pueden anunciar "obligatorio" dos veces.

Fuente: MDN aria-required.

Ejemplo práctico

<!-- Modal accesible -->
<div role="dialog" aria-modal="true" aria-labelledby="modal-title">
  <h2 id="modal-title">Confirmar eliminación</h2>
  <p>¿Estás seguro de que quieres eliminar este archivo?</p>
  <button>Cancelar</button>
  <button>Eliminar</button>
</div>

<!-- Formulario accesible -->
<form>
  <label for="email">Email *</label>
  <input id="email" type="email" aria-required="true" 
    aria-invalid="true" aria-describedby="email-error">
  <span id="email-error" role="alert">
    Ingresá un email válido
  </span>
</form>
Consejo: Probá siempre con un lector de pantalla real (VoiceOver o NVDA). Los ARIA attributes pueden verse correctos en el código pero sonar confusos cuando se anuncian en voz alta.

Checklist ARIA para revisar componentes reales

  • Primero HTML: si existe <button>, <nav>, <dialog>, <label> o <fieldset>, empezá ahí.
  • Nombre accesible: todo botón, input, enlace e icon button debe tener nombre entendible.
  • Teclado: si usás role="button", también necesitás foco, Enter, Space y estado visual.
  • Estados sincronizados: aria-expanded, aria-selected y aria-invalid deben cambiar con la UI real.
  • No ocultar contenido útil: aria-hidden="true" en contenido enfocable o importante suele romper la experiencia.
  • Probar de verdad: revisá con teclado, VoiceOver/NVDA y herramientas como axe o Lighthouse.

ARIA como habilidad laboral

ARIA es una señal fuerte para roles frontend, UX/UI, QA, producto y auditoría de accesibilidad porque conecta código con experiencia real. Convertí esta lección en portfolio auditando un componente: modal, tabs, menú, formulario o dropdown.

  • Frontend: documentá HTML nativo usado, ARIA agregado, foco y comportamiento de teclado.
  • QA: armá casos de prueba para lector de pantalla, tab order, errores y estados dinámicos.
  • Freelance: ofrecé revisión de formularios, checkouts, dashboards y componentes custom.

Conectá esta habilidad con Frontend Developer, oportunidades en empleos y servicios de auditoría en el marketplace.

Laboratorio de práctica

Antes de marcar esta lección como completa, escribí una evidencia breve para Accesibilidad Web (WCAG): un ejemplo, una decisión, una captura, una mini demo o una nota que puedas reutilizar en portfolio.

Reflexión rápida

¿Qué cambiarías en tu forma de trabajar después de aplicar aria roles, states y properties?

De lección a portfolio

Convertí esta lección en evidencia profesional.

Una lección aislada se olvida rápido. Un entregable visible puede abrir una entrevista, un cliente o una conversación útil.

Paso 1

Resumí el concepto en un ejemplo propio.

Paso 2

Creá una pieza visible: captura, documento, demo, checklist o caso corto.

Paso 3

Sumá el enlace a tu perfil y seguí con la siguiente lección del curso.

Newsletter Cursalo

Recibí rutas y cursos nuevos

Sumate para recibir recursos orientados a empleo y portfolio.

  • Rutas de empleo
  • Cursos prácticos
  • Portfolio y entrevistas

Sin spam. También podés entrar con tu cuenta para guardar progreso. Iniciá sesión

ARIA roles, states y properties | CursaloFalar no WhatsApp