Super el curso, un apunte que quiero hacer respecto al Modal. No todos los elementos, como el texto, deben tener foco. Al iniciar el curso fue una de las cosas que se mencionó. Creo que el foco al abrir el modal debería ir directo al boton de cerrar ya que este elemento si tiene interacción. Ahora bien como manejar este caso para el voiceover, yo hice un ejercicio similar.
<dialog aria-label="Este es un dialogo" aria-describedby="description" open>
<p id="description">
Mi descripción
</p>
<button>Mi botón</button>
</dialog>
De esta manera usando el elemento dialog se deberia hacer foco al botón cuando se abre el modal pero debería leer la descripción. Si no lo hace con Js se puede enfocar el dialog y el tab pasaría al botón.
Ahora bien, <dialog> api no es soportado por algunos navegadores. Para este caso se puede utlizar el aria-role,.
<div role="dialog" aria-labelledby="dialog1Title" aria-describedby="dialog1Desc">
<h2 id="dialog1Title">Your personal details were successfully updated</h2>
<p id="dialog1Desc">You can change your details at any time in the user account section.</p>
<button>Close</button>
</div>
Por último, si se tiene problemas con el voiceover que es frecuente cuando se trata de hacer focus a un elemento que se requiere leer como los elementos p, que no son interactuables, se puede hacer uso del tabindex=-1 .
<p id="dialog1Desc" tabindex="-1">You can change your details at any time in the user account section.</p>
De esta manera programaticamente se puede enviar el foco a ese elemento haciendo que el voiceover lo lea para luego al presionar tab el elemento no es interactuable y tiene sentido, como mencione al inicio no todos los elementos deben tener foco.
document.querySelector("#dialog1Desc").focus();
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?