Partilhar: WhatsApp
aulify · Sebenta
UC · Unidade de Competência · UC02636

Acessibilidade e inclusão em multimédia

Design para todos · WCAG · Tecnologias assistivas
25h · 2.25 pontos crédito Curso: T. Multimédia ↗ Referencial oficial SNQ
Índice

Introdução

Acessibilidade é a propriedade de um produto poder ser usado por qualquer pessoa, independentemente das suas capacidades sensoriais, motoras ou cognitivas. Inclusão vai um passo além: pensar nas pessoas desde o início, não como um patch.

Esta UC complementa todas as outras de Multimédia. Não há "site bonito mas inacessível" — há sites bem feitos e sites mal feitos. Boa a11y = boa engenharia.

1. Porque importa

1.1 Números (Portugal e UE)

1.2 Razões para fazer

1.3 Mitos a desfazer

2. WCAG — Web Content Accessibility Guidelines

WCAG 2.1 (e 2.2) é o standard internacional, mantido pelo W3C. Baseia-se em 4 princípios — POUR.

2.1 Perceptível

A informação tem de chegar pelos sentidos disponíveis.

2.2 Operável

A interface tem de ser usável.

2.3 Compreensível

O conteúdo e operação têm de ser claros.

2.4 Robusto

O código tem de funcionar com tecnologias assistivas.

2.5 Níveis de conformidade

3. Tecnologias assistivas

3.1 Leitor de ecrã

Software que lê o conteúdo em voz alta (ou para braille). Os principais:

Lê o DOM em ordem, não o ecrã. Por isso o HTML semântico é crítico:

<button type="submit">Enviar</button>
<!-- anunciado: "Enviar, botão" -->

<div onclick="enviar()">Enviar</div>
<!-- anunciado: "Enviar" (texto sem função) -->

3.2 Outras

3.3 Não-tecnológicas

4. Como aplicar em cada meio

4.1 Imagens

<!-- Informativa -->
<img src="grafico.png" alt="Vendas subiram 30% entre 2023 e 2024.">

<!-- Decorativa -->
<img src="ornamento.png" alt="">

<!-- Funcional (logo que é link) -->
<a href="/"><img src="logo.svg" alt="Aulify"></a>

<!-- Complexa: descrição longa -->
<figure>
  <img src="infografico.png" alt="Infográfico das 6 fases.">
  <figcaption>Fases: 1. Briefing...</figcaption>
</figure>

Regras de ouro do alt: - Descreve o propósito, não pixels. - Vazio (alt="") se decorativo. - Não comeces com "Imagem de…" — o leitor já diz "imagem". - Texto sobre a imagem? Replica em texto real (alt ou ao lado).

4.2 Vídeo

4.3 Áudio

4.4 Cor

4.5 Formulários

<label for="email">Email</label>
<input
  id="email"
  type="email"
  name="email"
  autocomplete="email"
  required
  aria-describedby="email-hint"
>
<small id="email-hint">Usamos para enviar a confirmação.</small>

<!-- Erro inline -->
<input id="email" aria-invalid="true" aria-describedby="email-erro">
<p id="email-erro" role="alert">Email inválido — falta '@'.</p>

Boas práticas: - Cada input com <label> (não placeholder a fingir de label). - autocomplete correto (name, email, tel, street-address...). - Mensagens de erro específicas e inline. - Não submeter "ao escrever" (utilizador de teclado precisa de tempo). - Indicar campos obrigatórios visualmente e programaticamente.

4.6 Tabelas

4.7 Animação e motion

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

4.8 Mobile

4.9 PDF e documentos

5. ARIA — quando e como

ARIA = Accessible Rich Internet Applications. Atributos HTML que adicionam semântica quando o HTML não chega.

5.1 Regras de ouro

  1. No ARIA é melhor que mau ARIA. Usar <button> é sempre melhor que <div role="button" tabindex="0"> com handlers à mão.
  2. ARIA não muda comportamento, só anuncia. Um role="button" num <div> não passa a responder a Enter — tens de implementar.
  3. Não inventar — só usar atributos válidos.

5.2 Atributos comuns

5.3 Padrões prontos

Em vez de implementar do zero, segue o ARIA Authoring Practices Guide (APG) do W3C: receitas testadas para combobox, modal, tabs, menu, etc.

6. Testar — automático, manual, com pessoas

6.1 Ferramentas automáticas

Ferramenta Onde Apanha
axe DevTools Chrome/Firefox 30-40% dos problemas reais
Lighthouse Chrome DevTools Quick check, conta para auditorias
WAVE webaim.org/wave Overlay visual amigável
Pa11y CLI CI/CD, batch de páginas
Stark / Contrast Figma/macOS Design-time

⚠️ Automático só apanha o básico. Um relatório verde não significa "site acessível".

6.2 Testes manuais — checklist

  1. Só com tecladoTab por todo o ecrã. Consegues:
  2. Ver onde está o foco em cada passo? (sem outline = falha)
  3. Abrir e fechar modais/menus?
  4. Submeter formulários?
  5. Sair de carousels/widgets (sem armadilhas)?
  6. Zoom a 200% (Cmd/Ctrl +) — texto cortado? Layout parte? Scroll horizontal?
  7. Sem cor — DevTools → Rendering → Emulate vision deficiencies → "Achromatopsia". Tudo ainda faz sentido?
  8. Leitor de ecrã (VoiceOver é gratuito):
  9. Cmd+F5 para ligar.
  10. Setas para navegar; VO+H headings; VO+L links; VO+G graphics.
  11. O fluxo de leitura faz sentido?
  12. Sem som — vídeo continua compreensível?

6.3 Teste com utilizadores reais

Nada substitui pessoas com deficiência a usar o produto. 1-2 sessões revelam problemas que ferramentas nunca apanham.

7. Inclusão para lá da técnica

7.1 Linguagem

7.2 Imagens e representação

7.3 Cognição e neurodivergência

7.4 Acesso e dispositivo

8. Workflow de equipa

8.1 Quem é responsável?

Toda a gente. Designer, copywriter, dev, PM, QA, conteúdo.

8.2 Acessibilidade no fluxo

  1. Design: anotar estados de foco, contrastes verificados, alts no design.
  2. Implementação: HTML semântico, axe a cada PR.
  3. QA: checklist + auditoria periódica.
  4. Pós-lançamento: monitorizar com Pa11y CI; feedback channel acessível.

8.3 Documentar a a11y

9. Casos práticos

9.1 Card clicável

Mau:

<div onclick="window.location='/post/1'">
  <h3>Título</h3>
  <p>Excerto</p>
</div>

Bom:

<article>
  <h3><a href="/post/1">Título</a></h3>
  <p>Excerto</p>
</article>

Toda a área pode ser clicável com CSS (a::after { content: ""; position: absolute; inset: 0; }), mantendo o link real.

9.2 Botão hamburger

<button
  type="button"
  aria-label="Abrir menu"
  aria-expanded="false"
  aria-controls="menu-principal"
>
  <svg aria-hidden="true">...</svg>
</button>
<nav id="menu-principal" hidden>...</nav>

JS troca aria-expanded e hidden.

9.3 Toast acessível

<div role="status" aria-live="polite">
  Encomenda guardada.
</div>

polite para confirmação; assertive para erros críticos (interrompe o leitor).

9.4 Modal

10. Conclusão

Acessibilidade é uma prática, não um certificado. Pequenas decisões — usar <button> em vez de <div>, contraste 4.5:1, foco visível — compõem-se em algo que funciona para todos. E "todos" inclui o teu eu futuro: vais querer um site que ainda funcione quando tiveres 70 anos, óculos novos e uma mão dorida.

Apêndice A · Checklist rápida

Apêndice B · Recursos