toolbar
Marca un contenedor como barra de herramientas — un conjunto agrupado de controles relacionados (una barra de formato, una fila de botones de icono). Reduce el coste de tabulación: una barra con 10 botones se convierte en un único punto de tabulación; las teclas de flecha permiten moverse entre los botones.
Cuándo utilizarlo
Cuando se disponga de una fila (o columna) de tres o más controles relacionados — una barra de formato de un editor de texto, la fila de iconos sobre un campo de chat, acciones de edición fotográfica. La ventaja es la eficiencia de teclado: en lugar de que cada botón sea un punto de tabulación independiente, la barra ocupa un único punto de tabulación y expone sus elementos mediante las teclas de flecha.
Una barra de herramientas DEBE tener un nombre accesible (aria-label o aria-labelledby). La orientación predeterminada es horizontal; establezca aria-orientation="vertical" para una barra vertical.
Los elementos hijos suelen ser botones (<button>), con role="separator" entre grupos lógicos. Las barras de herramientas PUEDEN contener botones, botones de alternancia, enlaces, menubuttons y otros controles pequeños — pero no formularios completos ni widgets de lista.
Contrato de teclado y foco
Según el patrón de toolbar de la APG:
- Tab lleva el foco a la barra de herramientas, situándolo en el primer control o en el último que tuvo el foco; Tab vuelve a salir.
- Las flechas Derecha/Izquierda (Arriba/Abajo si es vertical) se desplazan entre los elementos de la barra.
- Inicio / Fin saltan al primero / último elemento.
- Cada botón individual sigue activándose con Enter o Espacio — su contrato de activación no cambia por el rol de la barra.
Use un tabindex itinerante (roving tabindex): solo un elemento de la barra tendrá tabindex="0" en cada momento.
Errores frecuentes
- Todos los botones de la barra con
tabindex="0". Esto anula por completo el propósito — Tab recorrerá igualmente cada botón. - Barra de herramientas sin nombre accesible.
- Botones de la barra sin etiqueta porque el contenido visual es solo un icono. Añada
aria-labela cada uno. - Confundir la barra de herramientas con la semántica de
role="group". Debe elegirse uno: toolbar implica navegación con teclas de flecha, group no. role="toolbar"sobre un elemento<nav>. Los roles son incompatibles — utilice uno u otro.
Ejemplo
<div role="toolbar" aria-label="Formato de texto">
<button type="button" tabindex="0" aria-pressed="false" aria-label="Negrita">B</button>
<button type="button" tabindex="-1" aria-pressed="false" aria-label="Cursiva">I</button>
<button type="button" tabindex="-1" aria-pressed="false" aria-label="Subrayado">U</button>
<span role="separator" aria-orientation="vertical"></span>
<button type="button" tabindex="-1" aria-label="Insertar enlace">Enlace</button>
</div>