# Criar Páginas Web Acessíveis

> Sketchnote por [Tomomi Imura](https://twitter.com/girlie_mac)
```mermaid
journey
title A Sua Aventura de Aprendizagem em Acessibilidade
section Fundamentos
Compreender os Utilizadores: 5: You
Ferramentas de Teste: 4: You
Princípios POUR: 5: You
section Desenvolver Competências
HTML Semântico: 4: You
Design Visual: 5: You
Técnicas ARIA: 4: You
section Prática Avançada
Navegação por Teclado: 5: You
Acessibilidade de Formulários: 4: You
Testes no Mundo Real: 5: You
```
## Quiz Pré-Aula
[Quiz pré-aula](https://ff-quizzes.netlify.app/web/)
> O poder da Web está na sua universalidade. O acesso por todos, independentemente da deficiência, é um aspeto essencial.
>
> \- Sir Timothy Berners-Lee, Diretor do W3C e inventor da World Wide Web
Aqui está algo que pode surpreender-te: quando crias websites acessíveis, não estás apenas a ajudar pessoas com deficiências—estás na verdade a tornar a web melhor para todos!
Alguma vez reparaste naqueles rebaixos nos passeios? Eles foram originalmente desenhados para cadeiras de rodas, mas agora ajudam pessoas com carrinhos de bebé, trabalhadores de entregas com carrinhos, viajantes com bagagem com rodas e também ciclistas. É exatamente assim que o design web acessível funciona—soluções que ajudam um grupo acabam muitas vezes por beneficiar todos. Porreiro, não é?
Nesta lição, vamos explorar como criar websites que realmente funcionam para toda a gente, independentemente da forma como navegam na web. Vais descobrir técnicas práticas que já estão integradas nos standards web, experimentar ferramentas de teste e ver como a acessibilidade torna os teus sites mais utilizáveis para todos os utilizadores.
No final desta lição, vais ter a confiança para fazer da acessibilidade uma parte natural do teu fluxo de trabalho de desenvolvimento. Pronto para explorar como escolhas cuidadosas de design podem abrir a web a biliões de utilizadores? Vamos a isso!
```mermaid
mindmap
root((Acessibilidade Web))
Users
Leitores de ecrã
Navegação por teclado
Controlo por voz
Ampliação
Technologies
Semântica HTML
Atributos ARIA
Indicadores de foco CSS
Eventos do teclado
Benefits
Público mais amplo
Melhor SEO
Conformidade legal
Design universal
Testing
Ferramentas automatizadas
Testes manuais
Feedback dos utilizadores
Tecnologia assistiva real
```
> Podes fazer esta lição no [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/accessibility/?WT.mc_id=academic-77807-sagibbon)!
## Compreender Tecnologias Assistivas
Antes de começarmos a codificar, vamos tirar um momento para entender como as pessoas com diferentes capacidades realmente experienciam a web. Isto não é só teoria—compreender estes padrões de navegação do mundo real vai fazer de ti um desenvolvedor muito melhor!
Tecnologias assistivas são ferramentas bastante incríveis que ajudam pessoas com deficiências a interagir com websites de formas que podem surpreender-te. Assim que percebes como estas tecnologias funcionam, criar experiências web acessíveis torna-se muito mais intuitivo. É como aprender a ver o teu código pelos olhos de outra pessoa.
### Leitores de ecrã
[Leitores de ecrã](https://en.wikipedia.org/wiki/Screen_reader) são tecnologias bastante sofisticadas que convertem texto digital em fala ou saída braille. Embora sejam principalmente usados por pessoas com deficiências visuais, são também extremamente úteis para utilizadores com dificuldades de aprendizagem como a dislexia.
Gosto de pensar num leitor de ecrã como ter um narrador realmente inteligente a ler um livro para ti. Ele lê o conteúdo em voz alta numa ordem lógica, anuncia elementos interativos como "botão" ou "link" e fornece atalhos de teclado para saltar pela página. Mas aqui está a questão—os leitores de ecrã só funcionam completamente se construirmos websites com estrutura correta e conteúdo significativo. É aqui que entras como desenvolvedor!
**Leitores de ecrã populares em diferentes plataformas:**
- **Windows**: [NVDA](https://www.nvaccess.org/about-nvda/) (grátis e mais popular), [JAWS](https://webaim.org/articles/jaws/), [Narrator](https://support.microsoft.com/windows/complete-guide-to-narrator-e4397a0d-ef4f-b386-d8ae-c172f109bdb1/?WT.mc_id=academic-77807-sagibbon) (integrado)
- **macOS/iOS**: [VoiceOver](https://support.apple.com/guide/voiceover/welcome/10) (integrado e muito capaz)
- **Android**: [TalkBack](https://support.google.com/accessibility/android/answer/6283677) (integrado)
- **Linux**: [Orca](https://wiki.gnome.org/Projects/Orca) (grátis e open-source)
**Como os leitores de ecrã navegam pelo conteúdo web:**
Os leitores de ecrã oferecem múltiplos métodos de navegação que tornam a navegação eficiente para utilizadores experientes:
- **Leitura sequencial**: Lê o conteúdo de cima para baixo, como seguir um livro
- **Navegação por marcos (landmarks)**: Salta entre secções da página (header, nav, main, footer)
- **Navegação por títulos**: Passa entre cabeçalhos para compreender a estrutura da página
- **Listas de links**: Gera uma lista de todos os links para acesso rápido
- **Controlo de formulários**: Navega diretamente entre campos de entrada e botões
> 💡 **Isto surpreendeu-me mesmo**: 68% dos utilizadores de leitores de ecrã navegam principalmente por cabeçalhos ([WebAIM Survey](https://webaim.org/projects/screenreadersurvey9/#finding)). Isto significa que a tua estrutura de cabeçalhos é como um mapa para os utilizadores—quando a fazes bem, estás literalmente a ajudar as pessoas a encontrarem-se mais depressa no teu conteúdo!
### Construir o teu fluxo de trabalho de testes
Aqui vai uma boa notícia—testar acessibilidade de forma eficaz não tem de ser esmagador! Vais querer combinar ferramentas automáticas (são fantásticas para apanhar problemas óbvios) com algum teste prático. Aqui está uma abordagem sistemática que encontrei, que apanha a maioria dos problemas sem te roubar o dia todo:
**Fluxo de trabalho essencial para testes manuais:**
```mermaid
flowchart TD
A[🚀 Iniciar Testes] --> B{⌨️ Navegação por Teclado}
B --> C[Tabular por todos os elementos interativos]
C --> D{🎧 Teste com Leitor de Ecrã}
D --> E[Testar com NVDA/VoiceOver]
E --> F{🔍 Teste de Zoom}
F --> G[Aumentar para 200% e testar funcionalidade]
G --> H{🎨 Verificação de Cor/Contraste}
H --> I[Verificar se todo o texto cumpre as proporções de contraste]
I --> J{👁️ Gestão do Foco}
J --> K[Assegurar que indicadores de foco são visíveis]
K --> L[✅ Testes Concluídos]
style A fill:#e3f2fd
style L fill:#e8f5e8
style B fill:#fff3e0
style D fill:#f3e5f5
style F fill:#e0f2f1
style H fill:#fce4ec
style J fill:#e8eaf6
```
**Checklist passo-a-passo para testes:**
1. **Navegação por teclado**: Usa apenas Tab, Shift+Tab, Enter, Espaço e teclas de seta
2. **Teste com leitor de ecrã**: Ativa NVDA, VoiceOver ou Narrator e navega de olhos fechados
3. **Teste de zoom**: Testa nos níveis de zoom 200% e 400%
4. **Verificação do contraste de cores**: Confere todo o texto e componentes da interface
5. **Teste de indicadores de foco**: Assegura que todos os elementos interativos têm estados de foco visíveis
✅ **Começa com o Lighthouse**: Abre as ferramentas de desenvolvedor do teu browser, executa uma auditoria de acessibilidade com o Lighthouse e depois usa os resultados para guiar as tuas áreas de foco em testes manuais.
### Zoom e ferramentas de ampliação
Sabes quando às vezes fazes um gesto de pinça para dar zoom no telemóvel porque o texto está pequeno, ou semicerras os olhos para ver melhor o ecrã do portátil ao sol? Muitos utilizadores contam com ferramentas de ampliação para tornar o conteúdo legível todos os dias. Isto inclui pessoas com baixa visão, adultos mais idosos e quem alguma vez tentou ler um website ao ar livre.
Tecnologias modernas de zoom evoluíram para além de apenas tornar tudo maior. Compreender como estas ferramentas funcionam vai ajudar-te a criar designs responsivos que continuam funcionais e atraentes em qualquer nível de ampliação.
**Capacidades modernas de zoom nos browsers:**
- **Zoom da página**: Escala todo o conteúdo proporcionalmente (texto, imagens, layout) - este é o método preferido
- **Zoom só do texto**: Aumenta o tamanho da fonte mantendo o layout original
- **Pinch-to-zoom**: Suporte móvel para ampliação temporária
- **Suporte dos browsers**: Todos os browsers modernos suportam zoom até 500% sem comprometer funcionalidade
**Software especializado de ampliação:**
- **Windows**: [Ampliador](https://support.microsoft.com/windows/use-magnifier-to-make-things-on-the-screen-easier-to-see-414948ba-8b1c-d3bd-8615-0e5e32204198) (integrado), [ZoomText](https://www.freedomscientific.com/training/zoomtext/getting-started/)
- **macOS/iOS**: [Zoom](https://www.apple.com/accessibility/mac/vision/) (integrado com funcionalidades avançadas)
> ⚠️ **Consideração de design**: O WCAG exige que o conteúdo permaneça funcional quando ampliado a 200%. Neste nível, a rolagem horizontal deve ser mínima e todos os elementos interativos devem continuar acessíveis.
✅ **Testa o teu design responsivo**: Dá zoom ao browser a 200% e 400%. O teu layout adapta-se graciosamente? Consegues aceder a toda a funcionalidade sem necessidade de rolagem excessiva?
## Ferramentas modernas de teste de acessibilidade
Agora que percebes como as pessoas navegam na web com tecnologias assistivas, vamos explorar as ferramentas que te ajudam a construir e testar websites acessíveis.
Pensa assim: ferramentas automáticas são ótimas para apanhar problemas evidentes (como texto alt em falta), enquanto testes práticos ajudam a garantir que o teu site é agradável de usar na vida real. Juntas, dão-te a confiança que os teus sites funcionam para toda a gente.
### Teste de contraste de cores
Aqui vai uma boa notícia: contraste de cores é um dos problemas de acessibilidade mais comuns, mas também um dos mais fáceis de corrigir. Um bom contraste beneficia toda a gente—desde utilizadores com deficiência visual a pessoas a tentar ler os seus telemóveis na praia.
**Requisitos de contraste segundo WCAG:**
| Tipo de Texto | WCAG AA (Mínimo) | WCAG AAA (Aumentado) |
|---------------|------------------|---------------------|
| **Texto normal** (menos de 18pt) | Razão de contraste 4.5:1 | Razão de contraste 7:1 |
| **Texto grande** (18pt+ ou 14pt+ a negrito) | Razão de contraste 3:1 | Razão de contraste 4.5:1 |
| **Componentes da UI** (botões, bordas de formulário) | Razão de contraste 3:1 | Razão de contraste 3:1 |
**Ferramentas essenciais para teste:**
- [Colour Contrast Analyser](https://www.tpgi.com/color-contrast-checker/) - Aplicação desktop com seletor de cor
- [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) - Online com feedback instantâneo
- [Stark](https://www.getstark.co/) - Plugin de design para Figma, Sketch, Adobe XD
- [Accessible Colors](https://accessible-colors.com/) - Encontra paletas de cores acessíveis
✅ **Constrói melhores paletas de cores**: Começa com as cores da tua marca e usa verificadores de contraste para criar variações acessíveis. Documenta-as como tokens de cor acessíveis do teu sistema de design.
### Auditoria abrangente de acessibilidade
O teste de acessibilidade mais eficaz combina múltiplas abordagens. Nenhuma ferramenta única apanha tudo, por isso construir uma rotina de testes com vários métodos garante cobertura completa.
**Testes no browser (integrados nas DevTools):**
- **Chrome/Edge**: Auditoria de acessibilidade Lighthouse + Painel de acessibilidade
- **Firefox**: Inspector de acessibilidade com vista detalhada da árvore
- **Safari**: Separador de auditoria no Web Inspector com simulação VoiceOver
**Extensões profissionais de teste:**
- [axe DevTools](https://www.deque.com/axe/devtools/) - Testes automáticos padrão da indústria
- [WAVE](https://wave.webaim.org/extension/) - Feedback visual com destaque de erros
- [Accessibility Insights](https://accessibilityinsights.io/) - Conjunto abrangente de testes da Microsoft
**Linha de comando e integração CI/CD:**
- [axe-core](https://github.com/dequelabs/axe-core) - Biblioteca JavaScript para testes automáticos
- [Pa11y](https://pa11y.org/) - Ferramenta CLI para teste de acessibilidade
- [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci) - Avaliação automática de acessibilidade
> 🎯 **Objetivo de teste**: Aponta a uma pontuação de acessibilidade do Lighthouse de 95+ como baseline. Lembra-te, ferramentas automáticas apanham apenas cerca de 30-40% dos problemas de acessibilidade—testes manuais continuam essenciais!
### 🧠 **Teste das tuas competências: Pronto para encontrar problemas?**
**Vamos ver como te sentes sobre testes de acessibilidade:**
- Qual método de teste te parece mais acessível neste momento?
- Consegues imaginar usar apenas navegação por teclado durante todo um dia?
- Qual é uma barreira de acessibilidade que já experimentaste pessoalmente online?
```mermaid
pie title "Problemas de Acessibilidade Detectados por Diferentes Métodos"
"Ferramentas Automatizadas" : 35
"Testes Manuais" : 40
"Feedback dos Utilizadores" : 25
```
> **Impulsionador de confiança**: Testadores profissionais de acessibilidade usam exatamente esta combinação de métodos. Estás a aprender práticas padrão da indústria!
## Construir Acessibilidade desde a Base
A chave para o sucesso na acessibilidade é incorporá-la desde o início. Sei que é tentador pensar "vou adicionar acessibilidade mais tarde", mas isso é como tentar adicionar uma rampa a uma casa depois desta já estar construída. É possível? Sim. Fácil? Nem por isso.
Pensa na acessibilidade como planear uma casa—é muito mais fácil incluir acessibilidade para cadeiras de rodas nos planos arquitetónicos iniciais do que depois remodelar tudo.
### Os princípios POUR: A tua base para acessibilidade
As Diretrizes de Acessibilidade para Conteúdo Web (WCAG) baseiam-se em quatro princípios fundamentais que formam o POUR. Não te preocupes—isto não são conceitos académicos enfadonhos! São na verdade diretrizes práticas para criar conteúdos que funcionem para toda a gente.
Quando dominares o POUR, tomar decisões sobre acessibilidade torna-se muito mais intuitivo. É como ter um checklist mental que guia as tuas escolhas de design. Vamos analisar:
```mermaid
flowchart LR
A[🔍 PERCEPTÍVEL Os utilizadores conseguem senti-lo?] --> B[🎮 OPERÁVEL Os utilizadores conseguem usá-lo?]
B --> C[📖 COMPREENSÍVEL Os utilizadores conseguem compreendê-lo?]
C --> D[💪 ROBUSTO Funciona em todo o lado?]
A1[Texto alternativo Legendas Contraste] --> A
B1[Acesso por teclado Sem convulsões Limites de tempo] --> B
C1[Linguagem clara Previsível Ajuda em erros] --> C
D1[Código válido Compatível Preparado para o futuro] --> D
style A fill:#e1f5fe
style B fill:#e8f5e8
style C fill:#fff3e0
style D fill:#f3e5f5
```
**🔍 Perceptível**: A informação deve ser apresentável de formas que os utilizadores possam perceber através dos seus sentidos disponíveis
- Fornece alternativas textuais para conteúdo não textual (imagens, vídeos, áudio)
- Garante contraste de cor suficiente para todo o texto e componentes da interface
- Oferece legendas e transcrições para conteúdos multimédia
- Desenha conteúdo que permaneça funcional ao ser redimensionado até 200%
- Usa múltiplas características sensoriais (não apenas cor) para transmitir informação
**🎮 Operável**: Todos os componentes da interface devem ser operáveis através dos métodos de entrada disponíveis
- Torna toda a funcionalidade acessível via navegação por teclado
- Dá aos utilizadores tempo suficiente para ler e interagir com o conteúdo
- Evita conteúdos que provoquem convulsões ou distúrbios vestibulares
- Ajuda os utilizadores a navegar eficientemente com estrutura clara e marcos
- Assegura que os elementos interativos têm tamanhos de alvo adequados (mínimo 44px)
**📖 Compreensível**: A informação e a operação da interface devem ser claras e compreensíveis
- Usa uma linguagem clara e simples, apropriada ao público
- Assegura que o conteúdo aparece e funciona de forma previsível e consistente
- Fornece instruções claras e mensagens de erro para entrada do utilizador
- Ajuda os utilizadores a compreender e corrigir erros nos formulários
- Organiza o conteúdo com ordem lógica de leitura e hierarquia de informação
**💪 Robusto**: O conteúdo deve funcionar de forma fiável em diferentes tecnologias e dispositivos assistivos
- **Usa HTML válido e semântico como tua base**
- **Garante compatibilidade com tecnologias assistivas atuais e futuras**
- **Segue standards web e boas práticas para marcação**
- **Testar em diferentes navegadores, dispositivos e ferramentas assistivas**
- **Estruturar o conteúdo para que degrade de forma elegante quando funcionalidades avançadas não forem suportadas**
### 🎯 **Verificação dos Princípios POUR: Fixando o Conhecimento**
**Reflexão rápida sobre os fundamentos:**
- Consegue pensar numa funcionalidade de um website que falhe em cada princípio POUR?
- Qual princípio lhe parece mais natural enquanto desenvolvedor?
- Como podem estes princípios melhorar o design para todos, e não apenas para pessoas com deficiência?
```mermaid
quadrantChart
title Matriz de Impacto dos Princípios POUR
x-axis Esforço Baixo --> Esforço Alto
y-axis Impacto Baixo --> Impacto Alto
quadrant-1 Ganhos Rápidos
quadrant-2 Projetos Principais
quadrant-3 Considerar Mais Tarde
quadrant-4 Foco Estratégico
Alt Text: [0.2, 0.9]
Color Contrast: [0.3, 0.8]
Semantic HTML: [0.4, 0.9]
Keyboard Nav: [0.6, 0.8]
ARIA Complex: [0.8, 0.7]
Screen Reader Testing: [0.7, 0.6]
```
> **Lembrete**: Comece por melhorias de alto impacto e baixo esforço. HTML semântico e texto alternativo oferecem o maior aumento em acessibilidade com o menor esforço!
## Criar Design Visual Acessível
Um bom design visual e a acessibilidade andam de mãos dadas. Quando projeta com acessibilidade em mente, frequentemente descobre que estas restrições levam a soluções mais simples e elegantes que beneficiam todos os utilizadores.
Vamos explorar como criar designs visualmente apelativos que funcionem para todos, independentemente das suas capacidades visuais ou das condições nas quais estão a visualizar o seu conteúdo.
### Estratégias de cor e acessibilidade visual
A cor é poderosa para comunicação, mas nunca deve ser o único meio para transmitir informação importante. Projetar além da cor cria experiências mais robustas e inclusivas que funcionam em mais situações.
**Projetar para diferenças na visão das cores:**
Aproximadamente 8% dos homens e 0,5% das mulheres têm algum tipo de diferença na perceção das cores (frequentemente chamada "daltonismo"). Os tipos mais comuns são:
- **Deuteranopia**: Dificuldade em distinguir vermelho e verde
- **Protanopia**: O vermelho aparece mais escuro
- **Tritanopia**: Dificuldade com azul e amarelo (raro)
**Estratégias inclusivas de cor:**
```css
/* ❌ Bad: Using only color to indicate status */
.error { color: red; }
.success { color: green; }
/* ✅ Good: Color plus icons and context */
.error {
color: #d32f2f;
border-left: 4px solid #d32f2f;
}
.error::before {
content: "⚠️";
margin-right: 8px;
}
.success {
color: #2e7d32;
border-left: 4px solid #2e7d32;
}
.success::before {
content: "✅";
margin-right: 8px;
}
```
**Para além dos requisitos básicos de contraste:**
- Teste as suas escolhas de cores com simuladores de daltonismo
- Use padrões, texturas ou formas em conjunto com a codificação de cor
- Garanta que estados interativos permanecem distinguíveis sem cor
- Considere como o seu design se apresenta em modo de alto contraste
✅ **Teste a acessibilidade da cor**: Use ferramentas como [Coblis](https://www.color-blindness.com/coblis-color-blindness-simulator/) para ver como o seu site aparece para utilizadores com diferentes tipos de visão das cores.
### Indicadores de foco e design de interação
Indicadores de foco são o equivalente digital de um cursor — mostram aos utilizadores de teclado onde eles estão na página. Indicadores de foco bem desenhados melhoram a experiência para todos, tornando as interações claras e previsíveis.
**Melhores práticas modernas para indicadores de foco:**
```css
/* Enhanced focus styles that work across browsers */
button:focus-visible {
outline: 2px solid #0066cc;
outline-offset: 2px;
box-shadow: 0 0 0 4px rgba(0, 102, 204, 0.25);
}
/* Remove focus outline for mouse users, preserve for keyboard users */
button:focus:not(:focus-visible) {
outline: none;
}
/* Focus-within for complex components */
.card:focus-within {
box-shadow: 0 0 0 3px rgba(74, 144, 164, 0.5);
border-color: #4A90A4;
}
/* Ensure focus indicators meet contrast requirements */
.custom-focus:focus-visible {
outline: 3px solid #ffffff;
outline-offset: 2px;
box-shadow: 0 0 0 6px #000000;
}
```
**Requisitos dos indicadores de foco:**
- **Visibilidade**: Deve ter pelo menos uma relação de contraste de 3:1 com os elementos envolventes
- **Largura**: Espessura mínima de 2px em redor de todo o elemento
- **Persistência**: Deve permanecer visível até o foco mudar para outro local
- **Distinção**: Deve ser visualmente diferente dos outros estados da UI
> 💡 **Dica de Design**: Bons indicadores de foco usam frequentemente uma combinação de contorno, sombra e mudanças de cor para garantir visibilidade em diferentes fundos e contextos.
✅ **Auditagem dos indicadores de foco**: Navegue por tabulação no seu website e verifique quais elementos apresentam indicadores de foco claros. Existem alguns difíceis de ver ou completamente ausentes?
### HTML Semântico: A base da acessibilidade
HTML semântico é como dar às tecnologias assistivas um sistema GPS para o seu website. Quando usa os elementos HTML corretos para o seu propósito, está a fornecer aos leitores de ecrã, teclados e outras ferramentas um mapa detalhado para ajudar os utilizadores a navegar eficazmente.
Aqui está uma analogia que me fez sentido: HTML semântico é a diferença entre uma biblioteca bem organizada com categorias claras e sinais úteis versus um armazém onde os livros estão espalhados aleatoriamente. Ambos os locais têm os mesmos livros, mas onde preferiria procurar algo? Exatamente!
```mermaid
flowchart TD
A[🏠 Documento HTML] --> B[📰 cabeçalho]
A --> C[🧭 navegação]
A --> D[📄 conteúdo principal]
A --> E[📋 rodapé]
B --> B1[h1: Nome do Site Logótipo e branding]
C --> C1[ul: Navegação Ligações principais]
D --> D1[artigo: Conteúdo seção: Subseções]
D --> D2[aside: Barra lateral Conteúdo relacionado]
E --> E1[navegação: Ligações no rodapé Informação de direitos de autor]
D1 --> D1a[h1: Título da página h2: Secções principais h3: Subseções]
style A fill:#e3f2fd
style B fill:#e8f5e8
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#e0f2f1
```
**Blocos de construção da estrutura acessível da página:**
```html
Your Site Name
Article Title
Published on
First Section
Content that relates to this section...
Second Section
More related content...
```
**Porque é que o HTML semântico transforma a acessibilidade:**
| Elemento Semântico | Propósito | Benefício para Leitores de Ecrã |
|-------------------|-----------|---------------------------------|
| `` | Cabeçalho da página ou secção | "Ponto de referência Banner" - navegação rápida ao topo |
| `