Skip to Content
AccessibilityFocus & keyboard

Focus & keyboard

Accessibility · 03

Se um componente não é operável por teclado, ele não está pronto para produção.

Todo controle interativo do Pulso precisa suportar navegação por teclado, foco visível e ordem previsível. O foco é um sinal de estado, não decoração.

Focus ring canônico

PropriedadeValor
Cor--ring
Contraste≥ 3.0:1 sobre a superfície, nos dois temas (WCAG 2.4.7) — em tokens color-mix, isso pede opacidade ≥ 80% da cor de marca sobre fundo claro
Espessura2px
Offset2px
Pseudo-classe:focus-visible
CoberturaRegra global de :focus-visible no CSS base — nenhum elemento focável fica sem anel por omissão
RemoçãoNunca remover sem substituto estrutural equivalente

Mapa mínimo de teclado

ComponenteTeclasComportamento esperado
ButtonTab, Enter, SpaceFoco, aciona, mantém feedback visível
LinkTab, EnterNavega ou abre ação declarada
DialogEsc, Tab, Shift+TabFecha, prende foco, retorna foco ao gatilho
Dropdown/menuEnter, Space, ArrowUp/Down, EscAbre, navega itens, fecha sem perder contexto
TabsArrowLeft/Right, Home, EndMove seleção sem quebrar ordem visual
Table row actionTab, EnterExpõe ação sem exigir hover
Form fieldTab, Shift+TabLabel, helper e erro ficam associados

Hit target

ContextoMínimoUso
Desktop denso32pxTabelas, filtros, controles internos
Touch padrão44pxMobile, tablet, sheet responsivo
Ação crítica48pxConfirmar, escalonar, silenciar alerta, handover

Ordem de foco

  • Segue a ordem visual e semântica da página.
  • Nunca entra em conteúdo oculto ou tab inativa.
  • Ao abrir modal/sheet, foco inicial vai para título, primeiro campo ou ação principal segura.
  • Ao fechar modal/sheet, foco retorna ao elemento que abriu a superfície.
  • Skip links aparecem quando necessários para pular navegação longa.

Anti-patterns

EvitarCorreção
outline: none sem substitutoUsar :focus-visible com --ring — componentes com ring próprio continuam válidos, desde que o anel resultante seja visível
Ring com opacidade baixa (< 3:1 no tema claro)Elevar a opacidade do --ring até passar 3:1
Ação disponível apenas por hoverExpor ação no fluxo de teclado
Modal que deixa foco escaparPrender foco até fechar
Ordem DOM diferente da ordem visualReordenar DOM ou layout
Ícone clicável menor que 32pxAumentar target, não só ícone

Acceptance criteria

  • Fluxo principal é concluído apenas com teclado.
  • Foco é visível em light e dark.
  • Estados de erro e risco não dependem de hover.
  • Componentes com popover/modal retornam foco corretamente.
Last updated on