AvançadoAcessibilidadeAberto

Otimizacao para leitores de tela com ARIA e HTML semantico

Guia pratico de implementacao de landmarks, live regions, roles e properties ARIA para tornar interfaces ricas acessiveis via leitores de tela.

leitor de telaARIAHTML semanticoVoiceOverNVDA

Objetivo do Prompt

Implementar suporte completo a leitores de tela (NVDA, JAWS, VoiceOver, TalkBack) usando HTML semantico como base e ARIA como complemento, seguindo a regra 'nenhuma ARIA e melhor que ARIA ruim'.

Exemplo Real de Uso

O DeliveryJa precisa tornar seu fluxo de pedido acessivel para os 6,7 milhoes de brasileiros com deficiencia visual. O app usa muitos componentes custom (carrossel de restaurantes, cards interativos, bottom sheet de pedido) que sao invisiveis para o VoiceOver no iOS.

Prompt

Otimize [NOME DO PRODUTO/FUNCIONALIDADE] para leitores de tela, focando no fluxo de [DESCRICAO DO FLUXO].

Tecnologias: [FRAMEWORK] com [COMPONENT LIBRARY]. Leitores de tela alvo: [NVDA/JAWS/VoiceOver/TalkBack].

**1) HTML Semantico (Fundacao):**
Para cada tipo de conteudo, o elemento correto:
- Navegacao principal: `<nav aria-label="...">`
- Conteudo principal: `<main>`
- Secoes: `<section aria-labelledby="...">`
- Listas: `<ul>/<ol>` (nunca divs com bullet visual)
- Tabelas de dados: `<table>` com `<th scope>`
- Formularios: `<form>` com `<fieldset>/<legend>`
- Headings: h1-h6 em hierarquia correta

**2) Landmarks e Regioes:**
- Mapa de landmarks por pagina/tela
- aria-label para landmarks duplicados (ex: duas `<nav>`)
- Skip links: implementacao e posicionamento
- Ordem de leitura vs. ordem visual (flex order, grid)

**3) Componentes Custom (ARIA Patterns):**
Para cada componente interativo custom:

a) **Carrossel/Slider:**
- role="region" + aria-label + aria-roledescription="carrossel"
- Botoes prev/next com aria-label
- Live region para anunciar slide atual
- Controle de autoplay

b) **Modal/Dialog:**
- role="dialog" + aria-modal="true" + aria-labelledby
- Focus trap: Tab e Shift+Tab cicla dentro do modal
- Escape fecha o modal
- Focus retorna ao trigger ao fechar

c) **Tabs:**
- role="tablist" + role="tab" + role="tabpanel"
- aria-selected, aria-controls
- Setas esquerda/direita navegam entre tabs

d) **Dropdown/Menu:**
- role="menu" + role="menuitem"
- aria-expanded no trigger
- Setas up/down navegam itens

e) **Toast/Notification:**
- role="alert" ou aria-live="polite"
- aria-atomic="true"
- Timer suficiente para leitura

**4) Formularios Acessiveis:**
- Labels explicitos (for/id) ou implicitos
- Grupos com fieldset/legend
- Mensagens de erro: aria-describedby + aria-invalid
- Instrucoes: aria-describedby
- Autocomplete attribute para dados pessoais
- Validacao: anunciar erros em live region

**5) Conteudo Dinamico:**
- SPA route changes: anunciar nova pagina (aria-live ou document.title)
- Loading states: aria-busy="true" + anuncio quando completo
- Infinite scroll: aria-live region para novos itens
- Filtros que atualizam lista: anunciar quantidade de resultados

**6) Testes:**
- Checklist de teste manual com VoiceOver (Mac/iOS)
- Checklist de teste manual com NVDA (Windows)
- Testes automatizados com jest-axe e @testing-library
- Screen reader output esperado vs. real para cada fluxo

Regra de ouro: **Primeiro HTML semantico. ARIA so quando HTML nao resolve.**

Como usar este prompt

  1. 1Cole o prompt diretamente no ChatGPT, Claude, Gemini ou qualquer assistente de IA.
  2. 2Personalize os campos entre colchetes [assim] com suas informações específicas.
  3. 3Para melhores resultados, forneça contexto adicional sobre seu caso de uso.
  4. 4Combine múltiplos prompts em uma conversa para resultados mais completos.
  5. 5Salve os prompts que mais usa para acesso rápido no futuro.

Prompts relacionados

Ver todos

Explore outras categorias de prompts

Assine o AulasDeIA para desbloquear

Acesse 10.000+ prompts prontos para usar em qualquer profissão, além de todos os cursos da plataforma.

Assinar por R$ 49,90/mês

Cancele quando quiser. Sem multas.