Como usar o tabindex

Dave Gash
Dave Gash
Meggin Kearney
Meggin Kearney
Alexandra Klepper
Alexandra Klepper

A ordem de tabulação padrão fornecida pela posição DOM dos elementos HTML semânticos é conveniente, mas pode haver momentos em que você precisa modificar a ordem da tabulação. Transporte no HTML é o ideal, mas isso pode não ser viável. Nesses casos, pode usar o atributo HTML tabindex para definir explicitamente a guia de um elemento. posição

Compatibilidade com navegadores

  • 1
  • 12
  • 1.5
  • ≤4

Origem

tabindex pode ser aplicado a qualquer elemento, embora não seja necessariamente útil em cada elemento e aceita um intervalo de valores inteiros. Com tabindex, será possível especificar uma ordem explícita para elementos de página focalizáveis, inserir um elemento que seria sem foco na ordem de tabulação e remover elementos na ordem de tabulação. Exemplo:

tabindex="0": insere um elemento na ordem natural de tabulação. O elemento pode focar pressionando Tab, e o elemento pode ser focado chamando o método focus().

tabindex="-1": remove um elemento da ordem natural de tabulação, mas o elemento ainda pode ser focada chamando seu método focus().

tabindex="5": qualquer tabindex maior que 0 coloca esse elemento em primeiro plano da ordem natural de tabulação. Se houver vários elementos com um tabindex maior que 0, a ordem de tabulação começa no valor mais baixo que é maior que zero e avança cada vez mais.

Isso é particularmente verdadeiro para elementos não de entrada, como cabeçalhos, imagens ou artigos títulos. Quando possível, é melhor organizar seu código-fonte de forma que a sequência DOM forneça uma ordem lógica da tabulação. Se você usar tabindex, restrinja a interação personalizada personalizada controles, como botões, guias, menus suspensos e campos de texto; ou seja, elementos que que um usuário pode esperar fornecer informações.

Adicione tabindex apenas a conteúdo interativo. Mesmo que o conteúdo seja importante, como uma imagem principal, os usuários de leitores de tela podem entendê-lo sem adicionando foco.

Gerenciar o foco no nível da página

Às vezes, tabindex é necessário para uma experiência do usuário perfeita. Por exemplo: se você criar uma única página robusta com diferentes seções de conteúdo, quando não todo o conteúdo fica visível simultaneamente. Isso pode significar links de navegação alterar o conteúdo visível, sem uma atualização de página.

Nesse caso, identifique a área de conteúdo selecionada e atribua a ela um tabindex de -1 e chamar o método focus dele. Isso garante que o conteúdo não apareça em na ordem natural de tabulação. Essa técnica, chamada de gerenciamento de foco, mantém o contexto percebido pelo usuário em sincronia com o conteúdo visual do site.

Gerenciar o foco em componentes

Em alguns casos, você também precisa gerenciar o foco no nível de controle, como com componentes personalizados.

Por exemplo, o elemento select pode receber foco básico, mas uma vez é possível usar as teclas de seta para exibir mais opções selecionáveis. Se você criar um elemento select personalizado, é importante replicá-lo. para que os usuários do teclado ainda possam interagir com seu controle.

Saber quais comportamentos de teclado implementar pode ser difícil. A Criação de Accessible Rich Internet Applications (ARIA) autoria Práticas lista os tipos de componentes e os tipos de ações do teclado compatíveis.

Talvez você esteja trabalhando em Elementos personalizados que parecem um conjunto de botões de opção, mas com sua visão única de do seu modelo.

<radio-group>
    <radio-button>Water</radio-button>
    <radio-button>Coffee</radio-button>
    <radio-button>Tea</radio-button>
    <radio-button>Cola</radio-button>
    <radio-button>Ginger Ale</radio-button>
</radio-group>

Para determinar a compatibilidade de teclado necessária, verifique o Práticas de criação ARIA guia. A seção 2 contém uma lista de padrões de design, incluindo tabela de características para rádio grupos, o componente existente que melhor corresponde ao novo elemento.

Um dos comportamentos comuns de teclado que deve ser com suporte são as teclas de seta para cima/para baixo/para a esquerda/direita. Para adicionar esse comportamento ao novo usamos uma técnica chamada tabindex itinerante.

O tabindex itinerante funciona definindo tabindex como -1 para todos os filhos, exceto o ativo no momento.

<radio-group>
  <radio-button tabindex="0">Water</radio-button>
  <radio-button tabindex="-1">Coffee</radio-button>
  <radio-button tabindex="-1">Tea</radio-button>
  <radio-button tabindex="-1">Cola</radio-button>
  <radio-button tabindex="-1">Ginger Ale</radio-button>
</radio-group>

O componente usa um listener de eventos de teclado para determinar qual tecla a pressionamentos do usuário; quando isso acontece, ele define tabindex como -1, define o tabindex da criança a ser focada como 0 e chama método de foco.

<radio-group>
    <!-- Assuming the user pressed the down arrow, we'll focus the next available child -->
    <radio-button tabindex="-1">Water</radio-button>
    <radio-button tabindex="0">Coffee</radio-button> // call .focus() on this element
    <radio-button tabindex="-1">Tea</radio-button>
    <radio-button tabindex="-1">Cola</radio-button>
    <radio-button tabindex="-1">Ginger Ale</radio-button>
</radio-group>

Quando o usuário chega ao último (ou primeiro, dependendo da direção em que está) movendo o foco), o foco volta para o primeiro (ou o último) criança.

Teste o exemplo a seguir. Inspecione o elemento no DevTools para observar o tabindex se mover de um rádio para outro.

Armadilhas modais e de teclado

É melhor evitar gerenciar o foco manualmente, já que isso pode levar a situações complicadas. Por exemplo, um widget de preenchimento automático que tenta gerenciar o foco e captura comportamento da guia, mas impede que o usuário a deixe até que seja concluída. Isso é chamado de armadilha do teclado e pode ser muito frustrante para o usuário.

A seção 2.1.2 das WCAG afirma que o foco do teclado nunca deve ser bloqueado ou presos em um elemento de página específico. O usuário deve ser capaz de navegar de e para todos os elementos da página usando apenas o teclado.

A exceção a essa regra são os modais. Porém, você ainda deve evitar o uso tabindex ao criar um modal. Com o inert, você pode: garantir que os usuários não possam interagir acidentalmente com um elemento (uma ação armadilha de teclado). Usar o <dialog> que é inerte por padrão para criar um modal para os usuários e, ao mesmo tempo, bloquear cliques e guias fora do modal. Isso permite que o usuário se concentre em uma seleção necessária.