El orden del DOM es importante

Trabajar con elementos nativos es una forma excelente de aprender sobre el comportamiento del foco, ya que se insertan automáticamente en el orden de tabulación según su posición en el DOM.

Por ejemplo, podrías tener tres elementos de botones, uno al lado del otro en el DOM. Al presionar Tab, se coloca el foco en cada botón por orden. Intenta hacer clic en el siguiente bloque de código para mover el punto de partida de la navegación del foco, luego presiona Tab para mover el foco entre los botones.

<button>I Should</button>
<button>Be Focused</button>
<button>Last!</button>

Sin embargo, es importante tener en cuenta que, al usar CSS, es posible que los elementos tengan un orden en el DOM pero que aparezcan en un orden diferente en la pantalla. Por ejemplo, si usas una propiedad CSS como float para mover un botón a la derecha, los botones aparecen en un orden diferente en la pantalla. Sin embargo, ya que el orden en el DOM se mantiene igual, también se mantiene su orden de tabulación. Cuando el usuario presiona la tecla de tabulación en la página, los botones obtienen el foco en un orden no intuitivo. Intenta hacer clic en el siguiente bloque de código para mover el punto de partida de la navegación del foco, luego presiona Tab para mover el foco entre los botones.

<button style="float: right">I Should</button>
<button>Be Focused</button>
<button>Last!</button>

Ten cuidado al cambiar la posición visual de los elementos en la pantalla con CSS. Esto puede provocar que el orden de tabulación salte, de forma aparentemente aleatoria, y confunda a los usuarios que utilizan el teclado. Por esta razón, la lista de comprobación de la Web AIM indica en la sección 1.3.2 que el orden de navegación y lectura, como lo determina el orden del código, debe ser lógico e intuitivo.

Como regla, intenta navegar con tabulación por tu página de vez en cuando para asegurarte de que no hayas arruinado accidentalmente el orden de tabulación. Es un buen hábito y no necesita demasiado esfuerzo.

Contenido fuera de pantalla

¿Qué pasa si tienes contenido que actualmente no se muestra, pero que de todas formas necesita estar en el DOM, como una barra lateral de navegación receptiva? Cuando tienes elementos como este, que obtienen el foco cuando están fuera de pantalla, puede parecer que el foco desaparece y reaparece cuando el usuario navega con tabulación por la página. Está claro que es un efecto no deseado. Lo ideal es evitar que el panel obtenga el foco cuando se encuentre fuera de pantalla, y solo permitirle que lo tenga cuando el usuario pueda interactuar con él.

un panel que se desliza hacia adentro, puede robar el foco fuera de pantalla

A veces necesitas investigar un poco para encontrar a dónde se fue el foco. Puedes usar document.activeElement desde la consola para encontrar qué elemento tiene actualmente el foco.

Cuando descubras qué elemento fuera de pantalla tiene el foco, puedes configurarlo en display: none o visibility: hidden, y luego volver a configurarlo en display: block or visibility: visible antes de mostrarlo al usuario.

un panel que se desliza hacia adentro configurado para no mostrar nada

un panel que se desliza hacia adentro configurado para mostrar bloqueo

En general, recomendamos a los programadores navegar con tabulación por sus sitios antes de cada publicación para que vean si el orden de tabulación no desaparece o se sale de una secuencia lógica. Si esto sucede, deberías asegurarte de esconder adecuadamente el contenido fuera de pantalla con display: none o visibility: hidden, o de reordenar las posiciones físicas de los elementos en el DOM para que sigan un orden lógico.