Acessibilidade na Web

Acessibilidade Mobile

Mais de 60% do tráfego web é móvel — boas práticas específicas para dispositivos touch

Tamanho dos Alvos de Toque

Padrões e recomendações

  • WCAG 2.5.8 (AA): mínimo 24×24 CSS px
  • WCAG 2.5.5 (AAA): mínimo 44×44 CSS px
  • Apple Human Interface Guidelines: 44×44 pt
  • Google Material Design: 48×48 dp
  • Espaçamento entre alvos adjacentes: ≥ 8px

Exceções WCAG 2.5.8: links inline em texto corrido, elementos com espaçamento compensatório ao redor, elementos essencialmente menores (como pin em mapa).

Aplicando em CSS

/* Garantir tamanho mínimo */
.btn-touch {
  min-width: 44px;
  min-height: 44px;
  padding: 0.75rem 1rem;
}

/* Expandir área clicável sem
   alterar o layout */
.icon-btn {
  position: relative;
  width: 24px;
  height: 24px;
}
.icon-btn::after {
  content: '';
  position: absolute;
  inset: -10px; /* expande 10px em torno */
}

Zoom e Reflow

Regras WCAG

  • WCAG 1.4.4 (AA): texto deve poder ser redimensionado até 200% sem perda de conteúdo ou funcionalidade
  • WCAG 1.4.10 (AA): conteúdo deve funcionar com zoom de 400% em viewport de 320px de largura sem rolagem horizontal
  • Nunca bloqueie o zoom do usuário

Proibido:

<meta name="viewport"
  content="width=device-width,
  user-scalable=no">

<meta name="viewport"
  content="width=device-width,
  maximum-scale=1">

Boas práticas de CSS responsivo

/* Use unidades relativas */
body { font-size: 1rem; }       /* ✓ */
body { font-size: 16px; }       /* ⚠ fixo */

.container { max-width: 80ch; } /* ✓ */
.container { max-width: 960px; }/* ✓ com media */

/* Evite overflow horizontal */
img, video, iframe {
  max-width: 100%;
}

/* Colunas que se adaptam */
.grid {
  display: grid;
  grid-template-columns:
    repeat(auto-fit, minmax(280px, 1fr));
}

Gestos e Orientação

WCAG 1.3.4 — Orientação

Não bloqueie a orientação da tela (portrait/landscape) a não ser que a orientação seja essencial para a funcionalidade (ex: piano virtual, jogo específico).

/* Proibido bloquear via CSS: */
@media (orientation: landscape) {
  body { display: none; } /* ❌ */
}

WCAG 2.5.1 — Gestos com múltiplos pontos

Toda funcionalidade que usa gestos com múltiplos pontos (pinch-to-zoom, swipe com 2 dedos) ou gestos baseados em trajetória deve ter uma alternativa de toque simples.

WCAG 2.5.4 — Atuação por Movimento

Funcionalidades ativadas por movimento do dispositivo (agitar para desfazer, inclinar para navegar) devem ter alternativa de interface e o usuário deve poder desativar a resposta ao movimento.

WCAG 2.5.2 — Cancelamento de Ponteiro

Para ações ativadas por toque único: use o evento pointerup (não pointerdown), ou permita que o usuário cancele movendo o dedo para fora do alvo antes de soltar.

Teclado Virtual

Tipos de input para o teclado certo

<!-- Teclado numérico com telefone -->
<input type="tel"
  autocomplete="tel">

<!-- Teclado com @ para e-mail -->
<input type="email"
  autocomplete="email">

<!-- Teclado numérico -->
<input type="number" min="0">

<!-- inputmode: mais controle -->
<input inputmode="numeric"
  pattern="[0-9]*">

<input inputmode="decimal">
<input inputmode="search">
<input inputmode="url">

autocomplete para preenchimento rápido

<!-- Dados pessoais (WCAG 1.3.5) -->
<input autocomplete="name">
<input autocomplete="given-name">
<input autocomplete="family-name">
<input autocomplete="email">
<input autocomplete="tel">

<!-- Endereço -->
<input autocomplete="street-address">
<input autocomplete="postal-code">
<input autocomplete="country">

<!-- Pagamento -->
<input autocomplete="cc-number">
<input autocomplete="cc-exp">

Respeite as Preferências do Usuário

Sistemas operacionais expõem as preferências do usuário via media queries. Respeitá-las é uma das formas mais importantes de acessibilidade.

/* Modo escuro automático */
@media (prefers-color-scheme: dark) {
  :root {
    --bg: #0a0a0a;
    --text: #f5f5f5;
  }
}

/* Reduzir animações (epilepsia,
   vertigem, sobrecarga cognitiva) */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Alto contraste */
@media (prefers-contrast: high) {
  :root {
    --bg: #000;
    --text: #fff;
    --border: #fff;
  }
}

/* Transparência reduzida */
@media (prefers-reduced-transparency: reduce) {
  .glassmorphism {
    background: var(--bg-solid);
    backdrop-filter: none;
  }
}

prefers-reduced-motion

Afeta usuários com epilepsia fotossensível, transtorno vestibular, TDAH e outros. Desative ou reduza animações, transições e scroll suave.

prefers-color-scheme

~82% dos usuários usam modo escuro no mobile. Implementar é acessibilidade e preferência do usuário.

forced-colors (Windows High Contrast)

No modo de alto contraste do Windows, o sistema substitui cores. Teste seu site com este modo ativo.

@media (forced-colors: active) {
  .custom-focus {
    outline: 3px solid ButtonText;
  }
}