Uno de los problemas de accesibilidad que presentan los menús dentro de una aplicación, es la navegación por ellos mediante el uso de teclado haciendo uso de la tecla tab y dado que estos menús por lo general son creados para personas que pueden ver, entonces los desarrolladores crean menús muy bonitos usando CSS pero suelen usar display:none para ocultar los menús desplegables y esto puede que no lo detecte un lector de pantalla
Por esta razón y para mejorar la accesibilidad la W3C creo la iniciativa WAI-ARIA la cual por medio de sus atributos y roles ayudan a que las herramientas asistidas puedan reconocer los menús.
A continuación se mostraran dos ejemplos de menús accesibles usando ARIA, el primero será un ejemplo simple y el segundo será un ejemplo de un nivel más técnico que incluye scripts para mejorar la interacción del teclado con el menú.
Un menú dinámico puede incluir las siguientes etiquetas ARIA:
role="menubar" en el elemento raíz de cada uno de los menús desplegables, normalmente es un <ul>.
role="menu" en el elemento raiz de cada uno de los menús desplegables, normalmente es un <ul> o un <ol>.
role="menuitem" en cada elemento accionable del sistema de menús, incluye los de los menús, menús desplegables y submenús.
aria-haspopup="true" En cualquier elemento que active la visualización de un menú desplegable. Esto se aplica típicamente a todos los elementos de menú de nivel superior y a cualquier elemento de menú que tenga submenús.
aria-hidden="true" en cada elemento del contenedor del menú desplegable, normalmente un <ul> o un <div>. Cuando JavaScript se utiliza para hacer que el menu sea visible, también debe cambiar este atributo a aria-hidden= "false".
aria-expanded="false" se inicia en false pero cambia a true cuando se abre el submenú, lo cual obliga al lector de pantalla a anunciar que el elemento del menú ahora esta expandido.
Juntando todos estos elementos juntos, un menú ARIA accesible sencillo sería algo así:
Además de los atributos aria-expanded y aria-haspopup, se utilizan también los siguientes roles usados en el siguiente ejemplo.
aria-menubar: Representa usualmente un menú horizontal.
aria-menu: Representa un conjunto de enlaces o comandos en una barra de menús, este se usa en menús desplegables.
aria-menuitem: Representa un elemento de menú individual.