Acordeón y pestañas accesibles en JavaScript

Acordeón y pestañas en JavaScript

Acordeón y pestañas accesibles en JavaScript: código para copiar y pegar | We.Inc

Un acordeón en JavaScript puro con altura animada y aria-expanded, y pestañas con teclas de flecha y roving tabindex. Ambos funcionan en vivo en la página, con un checklist de teclado y una tabla ARIA.

Un acordeón accesible usa un botón real dentro de cada encabezado, con aria-expanded indicando si su panel está abierto y aria-controls nombrando el panel. Las pestañas accesibles usan role=tablist, tab y tabpanel, con aria-selected, y se recorren con las teclas de flecha, dejando solo la pestaña seleccionada en el orden de Tab. Las dos demos de abajo funcionan en vivo.

Cuál usar

Cada demo es un único bloque autónomo de HTML, CSS y JavaScript. Edítalo y el resultado se vuelve a ejecutar. Después aparta el ratón y pruébalo con el teclado usando el checklist de más abajo.

Preguntas frecuentes

¿Las pestañas deben cambiar con las flechas o con Enter?

La guía de ARIA permite las dos cosas. Cambiar a medida que se mueve la flecha (activación automática) resulta lo más rápido cuando los paneles ya están cargados. Si mostrar un panel es lento, mueve el foco con las flechas y cambia con Enter o Space.

¿Cómo animo la altura de un acordeón sin medirla con JavaScript?

Convierte el panel en una cuadrícula y haz una transición de grid-template-rows de 0fr a 1fr, con un elemento interior que tenga overflow hidden. El navegador calcula la altura por ti.

¿Es accesible un elemento details?

Sí. Los navegadores exponen summary como un botón con estado expandido, y funciona con el teclado sin hacer nada. Estilizar el marcador y animarlo es más difícil, por eso muchos sitios siguen creando el suyo propio.

¿Cuentan para el SEO las respuestas ocultas de un acordeón?

El contenido que está en el HTML pero contraído se sigue rastreando. Mantenlo en el código fuente de la página en lugar de cargarlo al hacer clic, y asegúrate de que la respuesta visible coincide con lo que hay en el HTML.

Siguientes pasos

Errores habituales

Acordeón

Acordeón accesible con altura animada

Cada encabezado contiene un botón real con aria-expanded y aria-controls. La altura se anima con una transición de filas de grid, así que no hay que medir scrollHeight. Pruébalo con Tab, Enter y Space.

Solo un panel abierto a la vez

Cuando se abre un panel, cierra cualquier otro que esté abierto. Que sea opcional: quien compara dos respuestas a menudo quiere tener ambas abiertas.

Alternativa sin JavaScript: details y summary

Los elementos details nativos se abren y cierran sin script. Darles el mismo atributo name los hace excluyentes en los navegadores actuales; los antiguos simplemente permiten varios abiertos.

Pestañas

Pestañas con roving tabindex y teclas de flecha

Solo la pestaña seleccionada tiene tabindex 0, así que Tab entra una vez en la lista de pestañas y luego pasa al panel. Las flechas izquierda y derecha se mueven entre pestañas, Home y End saltan a los extremos.

Checklist de teclado y ARIA

Prueba de teclado: prueba cada una en las demos

Referencia ARIA

Atributos que necesita cada parte

¿Trabajas con React? Empieza con nuestros

componentes de pestañas para React

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio