Criação de páginas web acessíveis

Aprenda a criar páginas web que funcionem para todas as pessoas: com teclado, com leitor de tela e com zoom. Comece pelo HTML semântico e pela estrutura da página, escreva alternativas textuais úteis para imagens e mídias e torne todos os controles alcançáveis, com foco visível. Verifique o contraste de cores, evite depender apenas da cor e mantenha os layouts utilizáveis com zoom de 400%. Crie formulários com rótulos, orientações e mensagens de erro claros, adicione ARIA apenas onde o HTML não oferece uma solução nativa e teste suas páginas com ferramentas automatizadas e manualmente. A meta em todo o curso é o nível AA das WCAG 2.2.

BásicoAula 7 de 8 do curso Curso de Noções básicas de desenvolvimento web

O que você vai aprender

  1. Use elementos HTML pelo seu significado para que navegadores, leitores de tela e teclados possam funcionar com suas páginas, e entenda o que as tecnologias assistivas recebem do seu código.
    • Explique como as tecnologias assistivas leem uma página web
      Descreva quem depende de código acessível, como o navegador transforma HTML em uma árvore de acessibilidade e como o nível AA das WCAG 2.2 define uma meta verificável.
    • Dê a cada página uma estrutura clara e fácil de navegar
      Defina o idioma e o título da página, marque regiões de referência, títulos e listas e mantenha uma ordem significativa no código-fonte.
    • Escolha elementos nativos para links, botões, controles e tabelas
      Escolha links para navegação e botões para ações, escreva textos de link que façam sentido, prefira controles nativos e marque tabelas de dados para que seus cabeçalhos sejam anunciados.
  2. Dê a imagens, ícones, gráficos, áudio e vídeo um equivalente textual que cumpra a mesma finalidade e oculte conteúdo puramente decorativo das tecnologias assistivas.
    • Escreva textos alternativos adequados à finalidade de cada imagem
      Decida se uma imagem é informativa, decorativa, funcional, de texto ou complexa e escreva o texto alt correspondente.
    • Dê nomes a ícones e gráficos SVG e forneça alternativas textuais para mídias
      Dê um nome acessível a botões com ícones e SVG embutido no código, oculte gráficos decorativos e adicione legendas descritivas, transcrições e audiodescrição a áudio e vídeo.
  3. Permita que as pessoas alcancem e usem todos os controles com o teclado em uma ordem lógica, vejam sempre onde está o foco, pulem conteúdo repetido e mantenham sua posição quando a página mudar.
    • Use uma página pelo teclado em uma ordem lógica de foco
      Use as teclas padrão, saiba quais elementos recebem foco, use tabindex corretamente e mantenha a ordem de foco lógica, sem armadilhas nem paradas invisíveis.
    • Mostre o foco com clareza e facilite o acionamento dos controles
      Mantenha um indicador de foco visível e com alto contraste, impeça que o elemento em foco seja encoberto e dê aos alvos do ponteiro tamanho ou espaçamento suficientes.
    • Adicione links para pular blocos de conteúdo e gerencie o foco quando o conteúdo mudar
      Permita que quem usa teclado pule blocos repetidos, mova o foco de maneira adequada quando o conteúdo abrir, fechar ou desaparecer e evite mudanças que a pessoa não pediu.
  4. Escolha combinações de cores com contraste suficiente, nunca deixe que apenas a cor transmita significado e mantenha as páginas utilizáveis quando as pessoas aumentarem o zoom ou o texto.
    • Meça o contraste de cores e atenda aos requisitos
      Calcule e verifique razões de contraste para texto e partes da interface e aplique os limiares AA das WCAG e suas exceções.
    • Use cores em conjunto com outras indicações
      Garanta que links, erros, campos obrigatórios, gráficos e indicadores de status não dependam apenas da cor.
    • Mantenha as páginas utilizáveis com zoom ou ampliação do texto
      Use unidades relativas e layouts flexíveis para que as páginas suportem texto a 200%, zoom de 400% e espaçamento de texto definido pelo usuário sem perda de conteúdo.
  5. Rotule todos os controles, agrupe os relacionados, forneça instruções e informações para preenchimento automático e comunique erros e mensagens de status para que todas as pessoas possam preencher um formulário.
    • Rotule e agrupe todos os controles do formulário
      Associe rótulos visíveis aos campos de entrada, agrupe botões de opção e caixas de seleção, nomeie botões e escolha tipos de entrada adequados aos dados.
    • Forneça instruções, identifique campos obrigatórios e permita o preenchimento automático
      Associe orientações aos campos, mostre quais são obrigatórios, adicione tokens de preenchimento automático e evite etapas que façam as pessoas redigitar ou memorizar informações.
    • Comunique erros e mensagens de status com clareza
      Identifique e explique erros de entrada em texto, associe-os aos respectivos campos e anuncie mensagens que aparecem sem mover o foco.
  6. Adicione ARIA apenas onde o HTML não oferece uma solução nativa, mantenha seus estados sincronizados e verifique páginas com ferramentas automatizadas e manualmente, com teclado, zoom e leitor de tela.
    • Aplique as regras de uso de ARIA
      Explique o que ARIA altera e o que não altera, prefira HTML nativo, evite usos prejudiciais de ARIA e saiba como o nome acessível de um elemento é escolhido.
    • Comunique mudanças de estado com ARIA
      Use aria-expanded, aria-current, aria-pressed e aria-hidden corretamente e mantenha cada estado sincronizado com o que a página mostra.
    • Execute verificações automatizadas de acessibilidade e interprete os resultados
      Use ferramentas de verificação automatizadas para encontrar problemas detectáveis por máquina, entenda o que elas não podem avaliar e transforme seus relatórios em correções priorizadas.
    • Teste manualmente com teclado, zoom e leitor de tela
      Percorra uma página usando apenas o teclado, verifique zoom e refluxo, experimente os fundamentos de um leitor de tela, inspecione a árvore de acessibilidade e registre o que encontrar.

Guia de estudo de Páginas web acessíveis

6 capítulos

1

Estruture páginas com HTML semântico

O HTML de uma página fornece a navegadores e tecnologias assistivas as informações necessárias para apresentá-la e permitir sua operação. Comece entendendo a árvore de acessibilidade e depois crie um esquema de página pelo qual as pessoas possam navegar usando regiões de referência, títulos e listas. Escolha links, botões e elementos de tabela de acordo com sua finalidade e deixe que o CSS cuide de sua aparência. Essas escolhas dão a cada funcionalidade posterior uma estrutura confiável.

1.1 Explique como as tecnologias assistivas leem uma página web

Uma página acessível permite que as pessoas obtenham informações e concluam tarefas com as ferramentas que usam. Essas ferramentas podem incluir teclado, leitor de tela, ampliador ou controle por voz. Uma página pode parecer pronta enquanto seu código ainda impede o uso por essas pessoas.

O que a tecnologia assistiva recebe

O navegador lê o HTML e constrói o DOM, seu modelo do documento. Dele deriva uma árvore de acessibilidade que descreve objetos significativos para tecnologias assistivas. Um controle precisa de uma função, um nome e os estados ou propriedades relevantes. Por exemplo, uma caixa de seleção pode ter a função “caixa de seleção”, o nome “Ofertas por e-mail” e o estado “marcada”.

Um leitor de tela fala o conteúdo ou o envia a uma linha braille. NVDA e JAWS funcionam no Windows; Narrator é integrado ao Windows, VoiceOver ao macOS e iOS e TalkBack ao Android. Leitores de tela podem navegar por títulos, links e controles sem ler cada linha. Alguns também podem informar configurações de fonte ou cor. Ampliadores mostram a página visual ampliada, por isso a clareza visual também importa.

O controle por voz permite que uma pessoa diga o nome de um controle, como “clique em Pesquisar”. Dispositivos acionadores podem enviar comandos semelhantes aos de um teclado. Assim, suporte a teclado e nomes precisos ajudam vários grupos de usuários, não apenas pessoas que ouvem a fala.

Comece pelo elemento correto

Compare estas duas formas de criar um controle para salvar:

<button type="button">Save</button>
<div class="btn" onclick="save()">Save</div>

O botão já disponibiliza sua função e seu nome. Ele recebe foco com Tab e responde a Enter e Espaço. O CSS pode fazer a segunda linha parecer idêntica, mas um div não tem nenhum desses comportamentos de botão. Um leitor de tela pode acionar seu manipulador de clique no modo de leitura, mas não anuncia o elemento como botão. Uma pessoa que navega com Tab não consegue alcançá-lo.

HTML semântico significa escolher um elemento pelo significado do conteúdo ou controle. Use CSS para controlar sua aparência. Isso dá ao navegador um ponto de partida sólido e evita ter que reconstruir o comportamento nativo com script.

Conheça a meta

O W3C publica as Diretrizes de Acessibilidade para Conteúdo Web, ou WCAG. Seus critérios de sucesso são requisitos verificáveis, cada um identificado por número, nome e nível. Por exemplo, 1.4.3 Contraste (Mínimo) é de nível AA. As WCAG 2.2 tornaram-se uma Recomendação em outubro de 2023 e foram atualizadas em dezembro de 2024.

A conformidade com o nível AA exige todos os critérios dos níveis A e AA. Passar em algumas verificações AA não basta. O nível AAA acrescenta outros requisitos. As WCAG 2.2 acrescentam nove critérios à versão 2.1, seis de nível A ou AA, e removem o critério obsoleto 4.1.1 Análise sintática.

A acessibilidade também inclui texto ampliado legível, legendas descritivas para pessoas surdas e ensurdecidas, instruções claras e mensagens de erro úteis. Incorporar esses recursos à página desde o início evita ter que substituir HTML inadequado depois que o layout estiver pronto.

Principais conclusões

  • Escolha elementos HTML pelo significado e depois estilize-os com CSS.
  • A árvore de acessibilidade disponibiliza funções, nomes, estados e propriedades.
  • Botões nativos oferecem comportamento de teclado que um div estilizado não possui.
  • O nível AA das WCAG 2.2 exige todos os critérios de sucesso dos níveis A e AA.

1.2 Dê a cada página uma estrutura clara e fácil de navegar

Uma estrutura de página útil oferece às pessoas várias maneiras de se localizar. Um título descritivo identifica a página, regiões de referência identificam suas áreas e títulos de seção revelam o esquema. Esses recursos precisam de significado real em HTML, mesmo quando o design visual já parece claro.

Identifique a página e seu idioma

Defina o idioma principal no elemento raiz, por exemplo, <html lang="en-US">. Leitores de tela o usam para escolher regras de pronúncia. Marque uma mudança dentro da página no elemento correspondente: <span lang="fr">bon appétit</span>. Isso atende a 3.1.1 Idioma da Página (A) e 3.1.2 Idioma das Partes (AA).

Dê a cada página um <title> único e descritivo. “Pedido de bolo de aniversário – Padaria Folha Verde” é mais útil em abas, favoritos e anúncios de leitores de tela do que “Padaria Folha Verde – Página 4”. Coloque o assunto específico primeiro para que as pessoas distingam rapidamente abas semelhantes.

Divida a página em regiões

Use <main> para o conteúdo principal, <nav> para navegação e <aside> para conteúdo complementar. Um <header> no nível da página fornece a região de referência de banner, e um <footer> no nível da página fornece informações de conteúdo. Elementos de cabeçalho e rodapé aninhados em regiões de seção não se tornam essas regiões de referência no nível da página.

Use um <main> visível. Se houver duas regiões de navegação, diferencie-as com nomes como <nav aria-label="Main"> e <nav aria-label="Breadcrumb">. A função já diz “navegação”, por isso o rótulo pode ser curto. Um <section> ou <form> torna-se uma região de referência apenas quando tem um nome acessível.

Crie um esquema antes de escolher tamanhos de fonte

Para a página de pedidos da padaria, um esquema claro poderia ser:

<h1>Order a birthday cake</h1>
<h2>Choose a size</h2>
<h2>Choose a flavor</h2>
<h3>Chocolate</h3>
<h3>Lemon</h3>
<h2>Pickup or delivery</h2>

Use um h1 para o assunto principal, h2 para seções principais e h3 para suas partes. Evite pular níveis ao descer na hierarquia. Escolha níveis de título pela estrutura; ajuste seu tamanho com CSS. Um parágrafo em negrito não entra na lista de títulos do leitor de tela. Por outro lado, colocar uma introdução comum em h2 acrescenta uma seção que o conteúdo não tem.

Preserve o agrupamento e a ordem de leitura

Use <ul> para itens não ordenados, <ol> para etapas ordenadas e <dl> para pares de termo e descrição. Leitores de tela podem anunciar o tamanho de uma lista, ajudando as pessoas a avaliar quanto conteúdo vem a seguir. Links de navegação podem ficar em um ul dentro de nav. No Safari, remover marcadores com list-style: none pode impedir que o VoiceOver anuncie listas; role="list" nessa lista restaura os anúncios.

Escreva o HTML em uma ordem de leitura significativa. A propriedade flex order, a direção flex invertida, o posicionamento em grade e o posicionamento absoluto alteram o que as pessoas veem sem mudar a ordem do DOM. Uma linha que visualmente começa com “Entrar”, mas só chega a esse item por último com Tab, é mais difícil de acompanhar. Corrija a ordem no código-fonte antes de organizar o layout.

Examine a estrutura básica de uma página

Um site de padaria tem um menu principal e um segundo conjunto de links de trilha de navegação. Dê nomes distintos às regiões, mantendo ambos os conjuntos de links disponíveis:

<nav aria-label="Main">
  <ul><li><a href="/bread">Bread</a></li></ul>
</nav>
<nav aria-label="Breadcrumb">
  <ol><li><a href="/">Home</a></li></ol>
</nav>
<main>
  <h1>Order a loaf</h1>
  <h2>Choose your bread</h2>
</main>

Inspecione a lista de regiões de referência: Main e Breadcrumb identificam finalidades diferentes de navegação, seguidas pelo conteúdo principal. Depois inspecione a lista de títulos: ela deve mostrar o assunto da página e sua primeira seção. Essas duas listas oferecem caminhos diferentes pelo mesmo documento; nenhuma delas depende das cores do menu ou do tamanho da fonte do título.

Principais conclusões

  • Defina o idioma da página e marque trechos em outro idioma.
  • Dê a cada página um título específico e uma região principal visível.
  • Use níveis de título reais para expressar o esquema.
  • Use elementos de lista para grupos de itens e etapas ordenadas.
  • Mantenha alinhadas a ordem visual e uma ordem significativa no código-fonte.

O elemento usado para um controle informa às pessoas o que esperar. Um link indica um destino; um botão indica uma ação. Controles nativos e elementos de tabela também fornecem relações que seriam difíceis de recriar com caixas genéricas estilizadas.

Escolha entre navegação e ação
FinalidadeHTMLAtivação padrão
Ir para outra página, um arquivo ou um ponto da página<a href="/classes">Baking classes</a>Enter
Executar uma ação na página atual<button type="button">Show filters</button>Enter ou Espaço

Uma âncora sem href não é um link comum que recebe foco pelo teclado. Uma âncora com href="#" e um manipulador de clique que abre um menu anuncia navegação, embora execute uma ação. Use um botão para esse menu. Dentro de um formulário, atribua type="button" aos botões que não devem enviá-lo; caso contrário, seu comportamento padrão pode enviar o formulário.

Deixe os destinos claros

Um leitor de tela pode reunir os links da página em uma lista. Links repetidos com “Leia mais” são difíceis de distinguir nessa lista. “Leia sobre as aulas de fermentação natural” nomeia o destino diretamente. O critério 2.4.4 Finalidade do Link (Em Contexto) (A) das WCAG permite que o contexto próximo explique um link, mas um texto de link significativo também funciona quando ouvido isoladamente.

Informe às pessoas sobre um download ou uma nova aba no texto do link: “Lista de preços (PDF, 2 MB)” ou “Formulário de reserva (abre em uma nova aba)”. Uma nova aba muda a forma como o botão Voltar funciona. Use uma descrição em vez de uma URL longa, quando possível.

Todo link e botão precisa de um nome acessível. Um link para o carrinho formado apenas por uma imagem precisa de texto que informe seu destino; uma imagem sem alternativa pode deixar um link sem nome ou identificado pelo nome de um arquivo. Nomear é tão necessário quanto escolher a função correta.

Mantenha o comportamento nativo

Use caixas de seleção, botões de opção e controles select nativos. Eles já oferecem operação por teclado e anunciam seus estados. Um controle simples de expansão e recolhimento pode usar apenas HTML:

<details>
  <summary>Delivery options</summary>
  <p>We deliver within 10 km.</p>
</details>

O resumo recebe foco do teclado, e o controle informa seu estado aberto ou fechado. Uma linha personalizada com um ícone de triângulo precisaria ter esses recursos implementados separadamente.

Associe os dados da tabela aos cabeçalhos

Use tabelas para dados com relações entre linhas e colunas. Um título nomeia o conjunto de dados; th identifica cabeçalhos; scope informa ao navegador quais células um cabeçalho descreve.

<table>
  <caption>Shop opening hours</caption>
  <tr><th scope="col">Day</th><th scope="col">Opens</th></tr>
  <tr><th scope="row">Saturday</th><td>08:00</td></tr>
</table>

Uma pessoa que se move para a célula do horário pode ouvir o dia e o cabeçalho de coluna associados. Uma grade CSS de elementos div perde essas relações nativas. Para o layout da página, use flexbox ou grade; uma tabela de layout pode criar uma navegação por tabela enganosa onde não há uma relação real entre dados.

Principais conclusões

  • Use links para destinos e botões para ações.
  • Nomeie links com clareza e identifique downloads ou novas abas.
  • Prefira controles nativos e controles de expansão e recolhimento pelo comportamento que já oferecem.
  • Use títulos de tabela, células de cabeçalho e escopo em tabelas de dados.
  • Use layout CSS para organizar a página.
2

Forneça alternativas textuais para conteúdo não textual

Imagens, ícones e mídias podem transmitir informações que não estão no texto comum da página. Escolha cada alternativa de acordo com sua finalidade: uma foto de produto precisa de palavras diferentes de um ícone de pesquisa, e um vídeo precisa de mais do que uma descrição de imagem. Aprenda onde colocar alternativas curtas, quando uma explicação mais longa é necessária e como legendas descritivas, transcrições e audiodescrição apoiam diferentes formas de usar mídias.

2.1 Escreva textos alternativos adequados à finalidade de cada imagem

O texto alternativo fornece as informações úteis ou a função de uma imagem a quem não pode vê-la. Decida o que a imagem acrescenta nessa página específica antes de descrever sua aparência. A mesma fotografia pode precisar de textos diferentes em contextos diferentes.

Escolha pela finalidade

Para uma fotografia informativa de produto, alt="Round sourdough loaf with a dark, cracked crust" descreve o que uma pessoa compradora precisa saber. Em uma página sobre falhas no preparo de pães, a característica importante poderia ser uma crosta queimada. Imagine ler a página pelo telefone: inclua as informações que a pessoa ouvindo deixaria de receber.

Para uma imagem que serve apenas de decoração, use alt="". Uma alternativa vazia informa aos leitores de tela que devem ignorar a imagem. Omitir o atributo é diferente: um leitor de tela pode anunciar um nome de arquivo como “IMG underline 4032 ponto jpg”. Um fundo puramente decorativo também pode ser colocado no CSS.

Nomeie uma função, não uma forma

Quando uma imagem é o único conteúdo de um link ou botão, sua alternativa fornece o nome do controle. Um link para a página inicial pode ser:

<a href="/">
  <img src="logo.svg" alt="Green Leaf Bakery home">
</a>

Para um botão de pesquisa, use “Pesquisar”, não “Lupa”. A pessoa precisa saber o que acontecerá ao pressionar o controle. Se um link de produto já contém as palavras visíveis “Pão de centeio”, uma foto nesse mesmo link pode usar alt="" para que o nome do link não seja repetido.

Trate imagens de texto e gráficos complexos

Uma imagem de texto precisa das mesmas palavras em sua alternativa. Um banner de promoção com “Promoção de verão: 20% de desconto em todos os pães” precisa dessas palavras, não de “Banner de promoção”. Prefira texto HTML real estilizado com CSS quando possível. Ele pode ser redimensionado, traduzido e reorganizado; o critério 1.4.5 Imagens de Texto (AA) das WCAG exige texto real quando a tecnologia permite, com exceções como logotipos.

Um gráfico, diagrama ou mapa geralmente contém informação demais para uma alternativa curta. Identifique-o brevemente e forneça uma descrição mais completa nas proximidades. Por exemplo, alt="Bar chart of monthly website visitors, January to June" identifica o gráfico. Um texto próximo pode explicar que o número de visitantes aumentou de 1.200 para 3.000, enquanto uma tabela de dados fornece valores individuais quando necessário. Um <figure> com <figcaption> pode agrupar o gráfico e sua explicação.

Revise para incluir detalhes úteis

Mantenha o texto alternativo comum em uma expressão ou frase concisa. Leitores de tela já identificam uma imagem, por isso começar com “Imagem de” geralmente não acrescenta conteúdo útil. Remova palavras repetidas próximas e palavras-chave de busca que não ajudem a pessoa a compreender a página.

O critério 1.1.1 Conteúdo Não Textual (A) das WCAG exige uma finalidade equivalente, não uma descrição de cada detalhe visível. O atributo title não é uma substituição confiável: ele não é anunciado de forma consistente nem está disponível de forma consistente para uso por teclado e toque. Coloque a alternativa de uma imagem em alt e mantenha qualquer explicação mais longa na própria página.

Principais conclusões

  • Escreva o texto alternativo de acordo com a finalidade da imagem no contexto da página.
  • Use alt="" para decoração; não omita o atributo.
  • Imagens funcionais nomeiam a ação ou o destino.
  • Use texto ou dados próximos para imagens complexas.
  • Prefira texto HTML real a imagens de texto.

2.2 Dê nomes a ícones e gráficos SVG e forneça alternativas textuais para mídias

Um ícone, um diagrama e um vídeo precisam de tipos diferentes de alternativas. Comece identificando a informação ou ação que cada um oferece. Depois coloque o equivalente onde tanto o navegador quanto a pessoa que usa a página possam encontrá-lo.

Nomeie o controle que contém o ícone

Texto visível ao lado de um ícone geralmente é mais claro. Se um botão precisar conter apenas um ícone, forneça texto visualmente oculto ou um rótulo no botão:

<button type="button" aria-label="Close">✕</button>

Quando um ícone estiver ao lado do texto visível do botão, oculte o ícone decorativo com aria-hidden="true". Não oculte o botão inteiro. Um span ou div simples tem uma função genérica para a qual a atribuição de nome é proibida; colocar aria-label ali não é uma forma confiável de nomear um ícone.

O texto visualmente oculto permanece disponível para leitores de tela. Uma classe CSS reutilizável pode usar posicionamento absoluto, largura e altura de 1 px, transbordamento oculto, clip-path: inset(50%) e white-space: nowrap. Diferentemente de display: none ou visibility: hidden, ela mantém o texto na árvore de acessibilidade.

Para um SVG embutido no código que transmite significado, use role="img" e um nome, por exemplo, aria-labelledby="rating-title" referindo-se a <title id="rating-title">Rated 4 out of 5 stars</title> dentro dele. SVG decorativo usa aria-hidden="true". Um SVG carregado por img recebe sua alternativa de alt, como outras imagens. Mantenha avisos significativos no HTML; fundos CSS e conteúdo gerado são locais pouco confiáveis para informações essenciais.

Escolha a alternativa adequada à mídia
ConteúdoAlternativa necessária
Gravação apenas em áudioTranscrição
Vídeo gravado com somLegendas descritivas; audiodescrição para elementos visuais importantes não mencionados no áudio no nível AA
Vídeo ao vivo com somLegendas descritivas ao vivo no nível AA

Legendas descritivas sincronizam falas, sons importantes e identificação de quem fala com o vídeo. Legendas de diálogo transcrevem ou traduzem falas para pessoas que conseguem ouvir, mas precisam de ajuda para entender o idioma. Uma transcrição é um relato textual separado; ela não acompanha o tempo de reprodução.

<video controls src="bread.mp4">
  <track kind="captions" src="bread-en.vtt"
         srclang="en" label="English">
</video>

O arquivo WebVTT contém entradas de texto temporizadas, como 00:00:01.000 --> 00:00:04.000, seguidas pelo texto da legenda. Verifique nomes, termos técnicos e pontuação nas legendas automáticas antes de publicar.

Se uma demonstração mostrar silenciosamente uma configuração do forno, as legendas descritivas das falas não transmitirão essa informação. A audiodescrição narra informações visuais importantes nas pausas ou em uma versão com audiodescrição. Uma alternativa textual completa que inclua os elementos visuais é uma opção no nível A; vídeos gravados precisam de audiodescrição no nível AA conforme 1.2.5.

Mantenha a reprodução utilizável

Use controls nativos em áudio e vídeo e dê aos quadros incorporados um title descritivo, como “Mapa da localização da nossa loja”. Evite som com reprodução automática. Áudio que começa automaticamente e dura mais de 3 segundos precisa de controle para pausar, parar ou ajustar o volume independentemente do volume geral do sistema.

Relacione o nome oculto e o texto temporizado

Para um botão compacto de exclusão, mantenha suas palavras no documento:

<button type="button">
  <img src="trash.svg" alt="">
  <span class="visually-hidden">Delete item</span>
</button>

A imagem é ignorada porque o texto já informa a ação. Aplique a classe de ocultação sem remover esse texto da árvore de acessibilidade:

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

Um arquivo de legendas descritivas, por sua vez, relaciona palavras ao tempo de reprodução. Um pequeno exemplo de WebVTT é:

WEBVTT

00:00:01.000 --> 00:00:03.000
[Mixer whirring]

00:00:03.000 --> 00:00:06.000
Today we bake rye bread.

A primeira entrada transmite um som relevante sem diálogo. A segunda transmite uma fala durante seu próprio intervalo. Assista ao vídeo com a faixa ativada e verifique se cada entrada aparece quando seu som ocorre.

Principais conclusões

  • Nomeie controles com ícones no próprio controle.
  • O texto visualmente oculto permanece disponível para tecnologias assistivas.
  • Dê uma função e um nome a gráficos SVG que transmitem significado.
  • Legendas descritivas incluem falas e sons importantes; transcrições apoiam gravações apenas em áudio.
  • A audiodescrição fornece informações visuais importantes ausentes da trilha sonora de um vídeo.
  • Mantenha disponíveis os controles do reprodutor e nomeie quadros incorporados.
3

Faça todas as funcionalidades funcionarem com o teclado

A operação por teclado depende de um caminho claro pela página e de uma posição atual visível. Use controles nativos, mantenha uma ordem significativa e impeça que o foco chegue a conteúdo invisível. Adicione atalhos para pular a navegação repetida e preserve a posição da pessoa quando uma caixa de diálogo abrir ou um item desaparecer. Verifique o tamanho dos controles e a visibilidade do foco para facilitar a operação da mesma interface de várias maneiras.

3.1 Use uma página pelo teclado em uma ordem lógica de foco

Quem usa teclado precisa de um caminho por toda a tarefa: alcançar um controle, reconhecê-lo, operá-lo e seguir adiante. Controles HTML padrão já oferecem suporte a esse caminho. Problemas costumam aparecer quando a estilização ou controles personalizados interferem no comportamento do navegador.

Use as teclas esperadas

Tab avança pelos elementos interativos; Shift+Tab volta. Enter segue links e ativa botões. Espaço ativa botões e alterna caixas de seleção. Em um grupo de botões de opção, Tab entra ou sai do grupo e as setas movem entre as opções. As setas também funcionam em controles de seleção nativos. Escape fecha caixas de diálogo e muitos menus.

Links com href, botões, campos de entrada, listas de seleção, áreas de texto, elementos summary e mídias com controles recebem foco por padrão. Parágrafos, títulos, imagens, contêineres genéricos e âncoras sem href não são paradas comuns de Tab. Um leitor de tela tem comandos de leitura separados para texto, por isso adicionar cada título à sequência de Tab torna a navegação por teclado mais lenta.

No macOS, ative a navegação por teclado ao testar. A configuração “Pressione Tab para destacar cada item em uma página web” do Safari controla se a navegação comum com Tab alcança links; Option+Tab pode alcançá-los quando essa configuração está desativada.

Mantenha os valores de tabindex simples
ValorEfeito
tabindex="0"Adiciona uma parada de Tab na ordem do código-fonte
tabindex="-1"Permite foco por script ou como alvo de link; Tab o ignora
Um valor positivoMove uma parada para antes dos controles comuns conforme o número

Valores positivos são difíceis de manter porque criam um segundo sistema de ordenação. Escreva o HTML em uma ordem lógica e evite-os. Um título que precise receber foco após uma atualização pode usar -1 sem se tornar uma parada em cada percurso pela página.

Verifique significado e comportamento juntos
<div role="button" tabindex="0">Save</div>

Isso disponibiliza uma função de botão e recebe foco, mas ainda precisa de script para Enter e Espaço, uma ação e um estilo de foco visível. Substituí-lo por <button type="button">Save</button> oferece ativação nativa por teclado sem reconstruí-la. ARIA sozinho não pode criar a interação.

O CSS também pode atrapalhar a navegação. Se a ordem no código-fonte for logotipo, menu, pesquisa, link de entrada, order: -1 no CSS pode mostrar a entrada primeiro enquanto Tab ainda a alcança por último. Mova o conteúdo no HTML quando a ordem de leitura precisar mudar. O critério 2.4.3 Ordem de Foco (A) das WCAG exige uma ordem que preserve o significado e a operação.

Elimine armadilhas e paradas ocultas

Teste se o foco consegue sair de cada componente usando o teclado. Um mapa ou reprodutor que aceita foco, mas não oferece saída pelo teclado, cria uma armadilha de teclado, proibida por 2.1.2 Sem Armadilha de Teclado (A).

Um menu fechado movido para fora da tela ou com opacity: 0 ainda pode conter links que recebem foco. Use hidden, display: none ou inert para conteúdo que deve ficar indisponível enquanto estiver fechado. Mantenha, porém, um link para pular blocos de conteúdo fora da tela capaz de receber foco: ele tem uma regra específica que o torna visível ao receber foco.

Principais conclusões

  • Use o comportamento padrão de teclado para links e controles nativos.
  • Reserve as paradas de Tab para conteúdo interativo.
  • Use zero para paradas na ordem do código-fonte e menos um para gerenciamento deliberado do foco.
  • Evite valores positivos de tabindex e reordenação visual que confunda a navegação.
  • Teste se há armadilhas de teclado e se o foco chega a conteúdo oculto.

3.2 Mostre o foco com clareza e facilite o acionamento dos controles

O foco é a posição atual de quem usa teclado. Um contorno visível informa qual controle será operado por Enter ou Espaço. O contorno precisa permanecer visível em relação à página, e o controle em foco precisa permanecer à vista.

Mantenha um indicador claro

Navegadores fornecem um contorno de foco padrão. Removê-lo com outline: none elimina uma indicação essencial, a menos que seja fornecida uma substituição adequada. Use :focus-visible para mostrar um contorno quando o navegador considerar útil, inclusive na navegação por teclado e em campos de texto:

:focus-visible {
  outline: 3px solid #1A73E8;
  outline-offset: 2px;
}

O azul tem contraste de 4,51:1 em relação ao branco. Verifique as cores adjacentes reais no design; um contorno que funciona sobre branco pode se confundir com um painel azul. O critério 2.4.7 Foco Visível (AA) das WCAG exige foco de teclado visível, enquanto 1.4.11 Contraste Não Textual (AA) se aplica às informações visuais que identificam um estado personalizado, incluindo um indicador de foco personalizado, com razão de 3:1.

Um contorno é uma escolha útil para temas de contraste do Windows. As cores forçadas podem substituir fundos e remover sombras de caixa, enquanto os contornos permanecem disponíveis. Uma sombra sozinha pode, portanto, desaparecer em um modo do qual uma pessoa depende.

Mantenha o controle em foco visível

Cabeçalhos aderentes, banners e controles de chat podem encobrir o foco. Pelo critério 2.4.11 Foco Não Encoberto (Mínimo) (AA), conteúdo criado pelo autor não deve ocultar completamente o componente em foco. Manter o componente inteiro visível facilita o uso; o requisito de que nenhuma parte fique oculta pertence ao nível AAA.

Para um cabeçalho aderente de 5 rem de altura, reserve espaço de rolagem:

html { scroll-padding-top: 5rem; }

Depois percorra a página real com Tab. Verifique as duas direções e teste quando um aviso de cookies estiver presente. A regra CSS é um ponto de partida; ela ainda precisa funcionar com os tamanhos reais do cabeçalho e da área de visualização da página.

Dê espaço também a quem usa ponteiro

Tamanho do Alvo (Mínimo), 2.5.8 (AA), exige alvos do ponteiro de pelo menos 24 por 24 px CSS, com exceções. Um alvo menor pode atender ao critério se um círculo de 24 px de diâmetro centrado nele não intersectar outro alvo nem o círculo de outro alvo pequeno. Links em frases, controles com tamanho definido pelo navegador e sem modificações e alvos com um controle equivalente que atenda ao critério na página também são exceções. Uma apresentação essencial ou exigida por lei também pode ser uma exceção.

Para três botões com ícones de 16 por 16 px separados por espaços de 4 px, os círculos se sobreporiam. Adicionar preenchimento interno de 4 px em todos os lados faz cada alvo ter 24 por 24 px. Meça a área clicável, não apenas o ícone desenhado dentro dela.

O alvo de 44 por 44 px CSS em 2.5.5 e o requisito de tamanho da área de foco em 2.4.13 são requisitos AAA. São melhorias úteis, mas mantenha seu nível separado do mínimo AA ao relatar um problema.

Principais conclusões

  • Mantenha um indicador de foco visível em cada elemento operável por teclado.
  • Verifique o contraste de indicadores personalizados em relação às cores adjacentes.
  • Impeça que conteúdo aderente oculte completamente o componente em foco.
  • Meça todo o alvo do ponteiro; o nível AA normalmente exige 24 por 24 px CSS ou uma exceção aplicável.

Menus repetidos não devem obrigar as pessoas a repetir o mesmo percurso em cada página. Um link para pular blocos de conteúdo oferece um caminho curto até o conteúdo principal. Quando uma interação altera a página, o tratamento deliberado do foco também ajuda as pessoas a manter sua posição.

Crie e teste um link para pular blocos de conteúdo

Coloque o link antes dos controles repetidos do cabeçalho:

<a class="skip-link" href="#main">Skip to main content</a>
<main id="main" tabindex="-1">
  <h1>Order a birthday cake</h1>
</main>

O link aponta para a região principal, e tabindex="-1" ajuda essa região a receber foco sem adicionar uma parada comum de Tab. A navegação por regiões de referência de um leitor de tela ajuda seus usuários; o link também ajuda pessoas que enxergam e usam teclado a pular blocos repetidos, conforme 2.4.1 Ignorar Blocos (A).

Mantenha o link disponível para o teclado quando estiver visualmente oculto:

.skip-link { position: absolute; left: -9999px; }
.skip-link:focus { left: 1rem; top: 1rem; }

Não use display: none ou visibility: hidden, que impedem o foco. Recarregue a página, pressione Tab uma vez e verifique se o link aparece. Pressione Enter e depois Tab novamente: a navegação deve continuar no primeiro link ou controle do conteúdo principal, não no menu do cabeçalho.

Dê uma próxima posição adequada ao conteúdo alterado

Se uma linha do carrinho e seu botão Remover em foco desaparecerem juntos, o foco pode retornar ao início da página. Mova-o deliberadamente para o botão Remover do próximo item ou para um título do carrinho com tabindex="-1". Escolha um lugar que permita continuar a tarefa. Apenas rolar até uma região não garante que o foco do teclado tenha sido movido para lá.

Use uma caixa de diálogo modal nativa

Uma caixa de diálogo aberta com showModal() move o foco para dentro dela e torna o restante da página inerte. Tab permanece dentro dela enquanto estiver aberta; Escape a fecha. Ao fechar normalmente, o foco retorna ao elemento que a abriu, caso ele ainda exista.

<button type="button"
  onclick="document.getElementById('hours').showModal()">Opening hours</button>
<dialog id="hours" aria-labelledby="hours-title">
  <h2 id="hours-title">Opening hours</h2>
  <p>Tuesday to Saturday, 08:00–17:00.</p>
  <form method="dialog"><button>Close</button></form>
</dialog>

O script de uma linha encontra a caixa de diálogo pelo ID e a abre como modal. O formulário da caixa de diálogo a fecha sem outro script. Seu título fornece seu nome. Uma sobreposição feita à mão precisa que todas essas regras de interação sejam recriadas; deixar o fundo com aparência escura não impede que o foco do teclado o alcance.

Aguarde uma ação intencional

Receber foco não deve abrir uma nova página nem mudar o contexto de outra forma. Mudar uma seleção também não deve fazer isso inesperadamente; as pessoas devem ser avisadas com antecedência se esse comportamento ocorrer. Um botão “Ir” depois de um seletor de destino dá tempo para que as pessoas examinem e alterem sua seleção antes de navegar. Esses comportamentos atendem a 3.2.1 Ao Receber Foco (A) e 3.2.2 Na Entrada de Dados (A).

Principais conclusões

  • Faça do link para pular blocos de conteúdo o primeiro item que recebe foco e mostre-o ao receber foco.
  • Teste para onde o próximo Tab vai após usar o link para pular blocos de conteúdo.
  • Mova o foco deliberadamente quando um item em foco for removido.
  • Use dialog com showModal() para obter o comportamento modal nativo.
  • Evite mudanças inesperadas de contexto ao receber foco ou alterar uma seleção.
4

Mantenha textos e elementos visuais legíveis

As pessoas precisam ler e operar uma página em diferentes condições de visualização. Meça as cores de primeiro plano e de fundo, combine a cor com outra indicação e crie layouts que se expandam quando o texto aumentar. Uma visualização legível em computador é apenas o começo: texto ampliado, refluxo em largura pequena e espaçamento definido pelo usuário podem revelar problemas ocultos. As verificações aqui relacionam requisitos visuais específicos a mudanças práticas de CSS.

4.1 Meça o contraste de cores e atenda aos requisitos

O contraste mede a clareza com que informações em primeiro plano se destacam do fundo. Uma cor que parece legível em uma tela pode ser difícil de ler para alguém com baixa visão ou sob luz intensa. Meça o par em vez de avaliá-lo a olho.

Aplique o mínimo correto
O que você está verificandoMínimo AA das WCAG
Texto normal4,5:1
Texto em tamanho grande3:1
Informação visual que identifica um controle, seu estado ou um gráfico significativo3:1 em relação às cores adjacentes

Texto em tamanho grande significa pelo menos 18 pontos, equivalentes a 24 px CSS, ou pelo menos 14 pontos em negrito, cerca de 18,7 px CSS em negrito. Um título de 20 px com peso normal ainda precisa de 4,5:1. Textos de exemplo de campo, de rodapé e nos estados de passagem do ponteiro e de foco não são exceções ao contraste de texto. Há exceções para logotipos, controles inativos e texto incidental ou puramente decorativo.

Entenda a razão

A luminância relativa expressa o brilho em uma escala de 0 para preto a 1 para branco. Com a luminância mais clara como L1 e a mais escura como L2, a razão é:

L1+0,05L2+0,05

Os extremos são 1:1 para cores idênticas e 21:1 para preto em relação ao branco. Uma ferramenta de contraste calcula a luminância a partir dos canais de cor e compara a razão com o limiar relevante.

Para o cinza #767676, cada canal é 76 em hexadecimal, ou 118. Divida por 255 para obter aproximadamente 0,4627. Como esse valor é maior que 0,04045, converta-o para luz linear:

(0,4627+0,0551,055)2,4≈0,1812

Os três canais são iguais, portanto sua luminância ponderada também é aproximadamente 0,1812. O branco tem luminância 1. Manter a precisão completa durante o cálculo resulta em 4,54:1, que atende ao requisito para texto normal. Use uma ferramenta de verificação para pares de cores reais, para que valores intermediários arredondados não afetem um resultado próximo do limiar.

Nunca arredonde um resultado insuficiente para que passe

O cinza #777777 sobre branco resulta em 4,48:1. Exibi-lo com uma casa decimal como 4,5 não faz com que atenda ao requisito. Da mesma forma, #949494 sobre branco resulta em 3,03:1 e atende para texto em tamanho grande; #959595 resulta em 2,99:1 e não atende para texto em tamanho grande.

Branco sobre #0066CC resulta em 5,57:1. Sobre o âmbar #FFC107, texto branco resulta em apenas 1,63:1, enquanto o preto resulta em 12,88:1. Escolher um fundo de botão brilhante não informa se seu texto deve ser claro ou escuro.

Verifique limites e todos os fundos

Uma borda de campo necessária para identificar o campo deve atender ao contraste não textual. #CCCCCC em relação ao branco resulta em 1,61:1 e não atende; #949494 resulta em 3,03:1 e atende. A mesma regra de 3:1 se aplica a ícones significativos, linhas de gráficos e indicadores de foco personalizados. Controles inativos e controles padrão do navegador sem modificações têm exceções.

Texto sobre uma fotografia ou gradiente deve atender ao requisito no ponto de menor contraste atrás dele. Adicione um painel sólido ou suficientemente opaco, ou mova o texto. Verifique as cores resultantes com as ferramentas do desenvolvedor ou uma ferramenta de contraste. O critério 1.4.3 das WCAG abrange texto e 1.4.11 abrange informações não textuais; os limiares AAA para texto são maiores, 7:1 para texto normal e 4,5:1 para texto em tamanho grande.

Verifique as partes de um botão separadamente

Suponha que um botão tenha texto branco em tamanho normal sobre #0066CC, esteja em uma página branca e use um contorno de foco personalizado #CCCCCC. Verifique cada relação:

  1. O rótulo em relação ao botão azul tem 5,57:1, acima do mínimo de 4,5:1 para texto.
  2. O botão azul em relação à página branca também tem 5,57:1, portanto seu limite é distinguível.
  3. O contorno de foco cinza-claro em relação à página branca tem apenas 1,61:1. Esse indicador de estado não atende ao requisito, embora o rótulo atenda.

Substitua o contorno por uma cor que atinja 3:1 em relação ao fundo adjacente e meça novamente. A leitura de uma ferramenta para o rótulo do botão não mede também cada limite ou estado de interação. Trate o texto, o componente e o estado personalizado como verificações separadas de pares de cores.

Principais conclusões

  • Texto normal precisa de 4,5:1; texto em tamanho grande precisa de 3:1 no nível AA.
  • Texto em tamanho grande é definido pelo tamanho e peso, não por sua função de título.
  • Nunca arredonde um resultado para cima até atingir um limiar de aprovação.
  • Limites de controles, estados e gráficos importantes precisam de 3:1 em relação às cores adjacentes.
  • Verifique o texto sobre imagens no ponto de menor contraste do fundo.
  • Use uma ferramenta de contraste para medir o par real de cores.

4.2 Use cores em conjunto com outras indicações

A cor pode chamar a atenção, mas não pode ser a única indicação visual de significado. Pessoas podem ter deficiência na visão de cores, usar escala de cinza ou configurações de contraste, ou ouvir conteúdo por um leitor de tela sem anúncios de cores. Combine a cor com texto, formas, padrões ou outra indicação clara.

Separe duas verificações

O contraste verifica se um elemento em primeiro plano pode ser distinguido do fundo. O uso de cor, WCAG 1.4.1 (A), verifica se a informação continua compreensível sem reconhecer a cor. Um rótulo vermelho-escuro sobre branco pode atender ao contraste e ainda não explicar qual campo tem erro.

Comece pela mensagem. Se a página disser “Escolha uma opção verde”, dê também um nome útil a cada opção. Se um ponto vermelho significar que uma loja está fechada, adicione “Fechada agora” ao lado dele. O texto transmite o status, enquanto a cor ajuda as pessoas a percebê-lo.

Mantenha links reconhecíveis

A maneira mais simples de identificar um link em um parágrafo é um sublinhado. Ele fornece uma indicação mesmo quando o link e o texto ao redor são vistos em escala de cinza.

Uma diferença apenas de cor em relação ao texto ao redor precisa de contraste de pelo menos 3:1 entre as duas cores de texto e de uma indicação adicional, como sublinhado, ao passar o ponteiro e ao receber foco. O texto do link também deve atender ao contraste de texto em relação ao fundo. São comparações separadas; um azul que atende em relação ao branco pode ser parecido demais com o texto escuro do parágrafo ao lado.

Explique erros e campos obrigatórios

Para um erro de e-mail, mostre “Erro: digite um endereço de e-mail no formato nome@example.com” ao lado do campo. Um contorno vermelho pode permanecer como indicação adicional. O texto identifica o problema e informa como corrigi-lo, enquanto o código o associa ao campo.

Para campos obrigatórios, use um rótulo como “Endereço de e-mail (obrigatório)”. Um asterisco também funciona quando o início do formulário explica “* significa obrigatório”. Adicione o atributo nativo required para que o requisito esteja disponível à tecnologia assistiva e à validação do navegador. O texto vermelho do rótulo, sozinho, não fornece uma explicação visual adequada nem um requisito identificável pelo código.

Dê aos gráficos uma segunda forma de comunicar

Um gráfico de vendas com duas séries precisa de mais do que uma linha vermelha e uma linha verde. Rótulos diretos, estilos de linha diferentes ou padrões permitem que as pessoas acompanhem cada série sem identificar sua cor. Use essas indicações no gráfico e em sua legenda para que correspondam entre si.

Verifique a página com emulação de escala de cinza ou de deficiência na visão de cores nas ferramentas do desenvolvedor. Inspecione links em texto corrido, erros, campos obrigatórios, gráficos e indicadores de disponibilidade. Pergunte qual indicação visual permanece para cada distinção. Se uma distinção desaparecer, adicione uma indicação que informe ou represente seu significado; aumentar apenas a saturação não fornecerá a informação ausente.

Principais conclusões

  • Combine diferenças de cor significativas com outra indicação visual.
  • Verifique contraste e uso de cor separadamente.
  • Sublinhe links ou atenda às condições de diferença de cor e de indicação na interação.
  • Use texto para erros, campos obrigatórios e indicadores de status.

4.3 Mantenha as páginas utilizáveis com zoom ou ampliação do texto

Ampliar uma página deve facilitar seu uso sem ocultar controles ou cortar frases. As pessoas podem ampliar a página inteira, ampliar apenas o texto ou aplicar seu próprio espaçamento. Layouts flexíveis permitem que essas escolhas funcionem em conjunto.

Teste o tamanho do texto e o refluxo

O critério 1.4.4 Redimensionar Texto (AA) das WCAG exige que o texto seja ampliado até 200% sem perda de conteúdo ou funcionalidade. O zoom do navegador usa Ctrl e sinal de mais no Windows ou Cmd e sinal de mais no macOS. Teste também um tamanho de fonte padrão maior, que altera o texto sem ampliar todo o resto da mesma forma.

O critério 1.4.10 Refluxo (AA) das WCAG exige que o conteúdo comum funcione em uma largura de 320 px CSS sem rolagem em duas direções. Uma janela de 1280 px CSS de largura com zoom de 400% fornece essa largura efetiva. Os parágrafos devem se ajustar em uma coluna estreita, com todas as funcionalidades ainda disponíveis. Tabelas de dados, mapas e outros conteúdos cujo significado depende de duas dimensões têm exceções.

Deixe o layout crescer com o texto

Use unidades relativas de fonte como rem e em para que o texto siga a configuração de fonte padrão do usuário. Texto em pixels CSS ainda responde ao zoom do navegador, mas não segue essa configuração padrão da mesma forma. Contêineres flexíveis e max-width permitem que as linhas se ajustem; pontos de quebra em em podem se adaptar conforme o texto cresce.

Uma altura fixa pode cortar conteúdo sem aviso:

/* Problem when larger text needs more space */
.card { height: 200px; overflow: hidden; }

/* Content can grow beyond the minimum */
.card { min-height: 200px; }

Permita que o conteúdo determine sua altura. Em larguras pequenas, empilhe a navegação ou ofereça um controle acessível de expansão e recolhimento em vez de excluir links. Deixe um cabeçalho aderente grande demais rolar para fora da tela se ele ocupar espaço excessivo da área de visualização utilizável.

Mantenha o zoom em dispositivos móveis disponível

Use uma declaração da área de visualização que siga a largura do dispositivo:

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

Não adicione maximum-scale=1 ou user-scalable=no. Eles tentam bloquear o zoom por pinça, do qual pessoas com baixa visão podem precisar. Alguns navegadores ignoram essas restrições, mas as pessoas não deveriam ter que depender desse comportamento.

Aplique o espaçamento definido pelo usuário

O critério 1.4.12 Espaçamento do Texto (AA) das WCAG exige que não haja perda ou sobreposição de conteúdo quando as pessoas definem a altura da linha como 1,5 vez o tamanho da fonte, o espaçamento entre parágrafos como 2 vezes, o espaçamento entre letras como 0,12 vez e o espaçamento entre palavras como 0,16 vez. Essas são configurações de teste, não valores padrão obrigatórios de design. Use uma ferramenta de espaçamento de texto e verifique rótulos, cartões, menus e botões, além dos parágrafos.

Uma verificação prática combina um teste de texto a 200%, um teste de refluxo a 320 px CSS e a substituição do espaçamento. Procure linhas cortadas, rótulos sobrepostos, rolagem horizontal de parágrafos e funcionalidades que desapareceram. Corrija o contêiner ou layout que causa o problema; reduzir o texto ampliado pelo usuário elimina o benefício que ele pediu.

Principais conclusões

  • Mantenha texto e funcionalidades disponíveis com ampliação de 200%.
  • Verifique o refluxo do conteúdo comum em uma largura de 320 px CSS.
  • Use tamanhos de fonte relativos e contêineres que possam crescer.
  • Permita zoom por pinça e mantenha as funcionalidades em layouts estreitos.
  • Teste se a substituição do espaçamento do texto pelo usuário causa cortes e sobreposições.
5

Crie formulários acessíveis

Um formulário acessível explica o que inserir, facilita a identificação de cada controle e ajuda as pessoas a se recuperar de erros. Associe rótulos e instruções visíveis no HTML, use os recursos de entrada e preenchimento automático do navegador e preserve as respostas durante um processo. Quando uma mensagem aparecer, decida se o foco deve se mover até ela ou se um anúncio pode permitir que a pessoa continue trabalhando onde está.

5.1 Rotule e agrupe todos os controles do formulário

Um rótulo visível informa o que inserir e dá a um campo um nome acessível. Rótulos de grupo acrescentam a pergunta à qual várias opções respondem. As associações precisam existir no HTML, mesmo quando rótulos e campos já aparecem próximos.

Associe um rótulo a um controle

Um rótulo explícito usa for para fazer referência ao id único do controle:

<label for="email">Email address</label>
<input id="email" name="email" type="email">

O navegador pode anunciar “Email address” quando o campo recebe foco. Clicar no texto também coloca o foco no campo, oferecendo um alvo maior. O atributo name identifica os dados enviados; ele não substitui o id usado pelo rótulo.

Um rótulo implícito envolve seu campo de entrada: <label>Email address <input type="email" name="email"></label>. Isso funciona quando ambos cabem dentro do mesmo elemento de rótulo. Com contêineres de layout separados, a associação explícita é mais fácil de manter.

Um texto de exemplo do campo desaparece durante a digitação e costuma ter baixo contraste. Mantenha o rótulo visível e coloque exemplos ou orientações de formato por perto. “Campo 1” é tecnicamente um nome, mas não descreve a finalidade. O critério 2.4.6 Títulos e Rótulos (AA) das WCAG exige uma redação descritiva.

Mantenha as palavras visíveis no nome

Uma pessoa que usa controle por voz pode dizer “clique em Enviar” ao ver um botão Enviar. Se aria-label="Submit form" substituir o texto desse botão, seu nome acessível não conterá mais as palavras visíveis. O critério 2.5.3 Rótulo no Nome (A) das WCAG exige que essas palavras sejam incluídas, de preferência no início. Use o próprio texto visível quando possível: <button type="submit">Send message</button>.

Um campo de pesquisa isolado pode ter um rótulo visualmente oculto se um botão Pesquisar próximo tornar sua finalidade visualmente clara. Rótulos ocultos não substituem, de modo geral, as instruções visíveis em todo o formulário.

Agrupe opções sob sua pergunta
<fieldset>
  <legend>Delivery method</legend>
  <input type="radio" id="pickup" name="delivery" value="pickup">
  <label for="pickup">Pick up in store</label>
  <input type="radio" id="courier" name="delivery" value="courier">
  <label for="courier">Courier delivery</label>
</fieldset>

A legenda fornece a pergunta do grupo; cada botão de opção ainda precisa de seu próprio rótulo. Leitores de tela podem anunciar o contexto do grupo junto com uma opção. Use o mesmo name para opções mutuamente exclusivas e legendas curtas que continuem úteis quando repetidas. Caixas de seleção relacionadas também podem usar um fieldset e uma legenda.

Escolha tipos e verifique associações

Use email, tel, url e date para os dados correspondentes. Os tipos de e-mail e URL oferecem uma verificação de formato; campos de telefone podem oferecer um teclado móvel adequado, mas não validam formatos de número de telefone. Use number para quantidades, como o número de convidados, não para identificadores de telefone ou cartão.

Clique em cada rótulo para testar sua associação. Se o campo errado receber foco, procure IDs duplicados ou um for que não corresponda ao campo. Inspecione também o nome computado nas ferramentas do desenvolvedor; a proximidade visual por si só não associa um rótulo.

Principais conclusões

  • Associe cada rótulo ao ID único de um campo ou envolva seu único controle com ele.
  • Mantenha rótulos visíveis; use textos de exemplo apenas como conteúdo suplementar.
  • Mantenha o texto visível do rótulo dentro do nome acessível.
  • Use fieldset e legend para um grupo de opções relacionadas.
  • Escolha tipos de entrada de acordo com os dados e verifique as associações dos rótulos.

5.2 Forneça instruções, identifique campos obrigatórios e permita o preenchimento automático

As instruções ajudam mais quando chegam antes de um erro. Um bom formulário explica a entrada esperada, mostra o que é obrigatório e oferece suporte às ferramentas do navegador para inserir informações pessoais. Ele também evita que as pessoas repitam trabalho desnecessariamente.

Associe uma orientação sem substituir o rótulo
<label for="pw">Password (required)</label>
<input id="pw" type="password" required
       autocomplete="new-password" aria-describedby="pw-hint">
<p id="pw-hint">At least 12 characters.</p>

O rótulo nomeia o campo. O parágrafo visível explica seu requisito, e aria-describedby acrescenta esse texto como descrição. Leitores de tela podem anunciá-lo depois do nome. Para várias descrições, liste seus IDs separados por espaços, como em aria-describedby="pw-hint pw-error".

Identifique campos obrigatórios visualmente e com required. Você pode escrever “(obrigatório)” ou explicar um asterisco no início do formulário. O required nativo oferece suporte à validação do navegador e à tecnologia assistiva; ele não precisa de um aria-required="true" adicional.

Identifique a finalidade dos dados pessoais

Conforme 1.3.5 Identificar a Finalidade da Entrada (AA), campos que coletam informações do usuário precisam de tokens autocomplete adequados. Exemplos incluem name, given-name, family-name, email, tel, street-address, postal-code, country-name e bday. Campos de entrada na conta podem usar username e current-password; uma nova senha usa new-password, e um código de verificação pode usar one-time-code.

Esses tokens permitem que navegadores, gerenciadores de senhas e ferramentas assistivas reconheçam a finalidade de um campo. Use o token correspondente à pessoa cujas informações estão sendo inseridas. Marcar o endereço de contato de um amigo como o e-mail do próprio usuário para preenchimento automático pode inserir os dados errados.

Reduza as exigências de memória e de redigitação

Permita colar em campos de senha e código de verificação e ofereça suporte a gerenciadores de senhas. O critério 3.3.8 Autenticação Acessível (Mínimo) (AA) das WCAG permite testes cognitivos durante a entrada na conta apenas com uma alternativa ou ajuda que atenda ao critério, ou nas exceções especificadas para reconhecimento de objetos ou conteúdo pessoal. Bloquear a colagem cria uma barreira quando obriga a pessoa a lembrar ou transcrever informações e não existe outra forma de entrar que atenda ao critério.

Em um pedido com várias etapas, reaproveite as informações já inseridas. Uma opção “O endereço de cobrança é o mesmo da entrega” evita a redigitação. O critério 3.3.7 Entrada Redundante (A) das WCAG permite exceções quando a repetição é essencial, necessária para segurança ou quando a informação anterior não é mais válida.

Forneça uma proteção para envios com consequências

Um pedido pode criar um compromisso financeiro. Antes de concluí-lo, ofereça uma etapa de revisão que permita corrigir os dados. Conforme 3.3.4 Prevenção de Erros (Legal, Financeiro, Dados) (AA), os envios abrangidos devem ser reversíveis, verificados com oportunidade de correção ou revisados e confirmados com possibilidade de correção. O escopo também inclui alterar ou excluir dados armazenados controlados pelo usuário e enviar respostas de testes.

Mantenha o layout do formulário fácil de acompanhar quando ampliado: rótulos diretamente acima dos campos e uma coluna principal reduzem a distância entre uma instrução e o lugar ao qual ela se aplica.

Diferencie formato de finalidade pessoal

O tipo de entrada e o token de preenchimento automático respondem a perguntas diferentes. O tipo identifica o tipo de valor e pode fornecer uma verificação de formato. O token identifica a informação pessoal do usuário para preenchimento automático:

<label for="your-email">Your email address (required)</label>
<input id="your-email" name="email" type="email"
       required autocomplete="email">
<label for="guest-email">Guest's email address</label>
<input id="guest-email" name="guest-email" type="email">

Ambos os campos aceitam endereços de e-mail, mas apenas o primeiro pede o e-mail do usuário atual. O segundo não deve ser marcado como o e-mail desse usuário para preenchimento automático. Os rótulos visíveis preservam a distinção para quem insere os valores por conta própria. Alterar um token não muda o que o tipo de e-mail verifica.

Principais conclusões

  • Forneça instruções visíveis antes da entrada de dados e associe orientações com aria-describedby.
  • Identifique campos obrigatórios visualmente e com o required nativo.
  • Use tokens de preenchimento automático adequados para as informações do usuário.
  • Ofereça suporte a gerenciadores de senhas e à colagem para reduzir barreiras de entrada na conta.
  • Reaproveite respostas anteriores em processos de várias etapas, salvo quando houver uma exceção.
  • Forneça uma proteção adequada para prevenir erros em envios com consequências.

5.3 Comunique erros e mensagens de status com clareza

Uma mensagem de erro deve ajudar a pessoa a se recuperar sem perder o trabalho já feito. Uma mensagem de status deve informar uma mudança sem tirar a pessoa de sua posição. Ambas precisam de texto visível e da associação correta no código.

Informe o problema e uma correção útil

“Entrada inválida” oferece pouca ajuda. “Erro: digite um endereço de e-mail no formato nome@example.com” identifica o que precisa de atenção e sugere uma correção. O critério 3.3.1 Identificação de Erros (A) das WCAG exige que erros detectados sejam descritos em texto; 3.3.3 Sugestão de Correção de Erro (AA) exige correções conhecidas quando elas não comprometem a segurança ou a finalidade do formulário.

<label for="email">Email address</label>
<input id="email" type="email" aria-invalid="true"
       aria-describedby="email-error">
<p id="email-error">Error: Enter an email address in the format name@example.com</p>

Defina aria-invalid="true" apenas depois de verificar o campo e encontrar um erro. O atributo informa o estado inválido; a descrição explica o motivo. Uma borda vermelha sozinha não fornece a explicação em texto nem a associação.

Ajude as pessoas a encontrar vários erros

Após o envio, um formulário longo pode mostrar um resumo de erros no topo. Dê a ele um título como “Há 2 problemas com seu pedido” e depois links para os campos afetados. Permita que o resumo receba foco com tabindex="-1" e faça o script colocar o foco nele. Acrescentar “Erro: ” ao início do título da página também ajuda a identificar a mudança de estado da página.

Mantenha também as mensagens de cada campo ao lado dos respectivos campos de entrada e preserve tudo o que já foi inserido. Um link do resumo leva a pessoa a um campo; a explicação local ajuda durante a correção. Limpar todos os campos obriga a repetir o trabalho já concluído corretamente.

Atributos de validação nativos como required, type="email" e minlength podem fornecer mensagens do navegador. Um sistema personalizado pode usar novalidate e mostrar suas próprias mensagens. Em ambos os casos, os erros precisam de texto que as pessoas possam localizar e associar ao campo correspondente.

Anuncie uma mudança sem mover o foco

Uma atualização do carrinho costuma ocorrer enquanto o foco deve permanecer no botão Adicionar. Use uma região viva que já esteja presente no documento:

<p role="status" id="cart-status"></p>

Quando um item é adicionado, um script muda seu texto para “Adicionado 1 pão de fermentação natural ao seu carrinho”. role="status" é polido: permite que o leitor de tela termine a fala atual antes de anunciar a atualização. Isso atende a 4.1.3 Mensagens de Status (AA).

Reserve role="alert", um anúncio assertivo, para mensagens urgentes. Interrupções constantes dificultam compras comuns. Insira a região vazia antes de atualizar seu conteúdo; criar a região e sua mensagem juntas não é anunciado de forma confiável em muitas combinações. Mantenha o foco na tarefa para atualizações rotineiras e mova-o deliberadamente em situações como um resumo de erros que a pessoa precisa examinar.

Principais conclusões

  • Identifique erros em texto e sugira uma correção quando ela for conhecida.
  • Use aria-invalid para uma falha verificada e associe sua descrição de erro.
  • Mantenha os dados inseridos e forneça um resumo de erros em formulários mais longos.
  • Atualize uma região de status existente para anunciar mudanças rotineiras sem mover o foco.
  • Reserve alertas para mensagens urgentes.
6

Use ARIA com moderação e teste suas páginas

ARIA pode descrever informações que o HTML nativo não expressa por si só, mas suas indicações devem corresponder ao comportamento da interface. Aprenda a escolher nomes e estados com cuidado e depois inspecione o que o navegador informa. Combine análises automatizadas com testes de teclado, zoom e leitor de tela para encontrar tanto erros de código quanto barreiras que exigem julgamento humano. Um registro útil inclui uma forma clara de reproduzir e testar novamente o problema.

6.1 Aplique as regras de uso de ARIA

ARIA acrescenta informações à árvore de acessibilidade quando o HTML precisa de ajuda para expressar um nome, uma relação ou um estado. Ela não constrói a interação em si. Antes de adicionar um atributo, verifique o que o elemento nativo já fornece e o que realmente está faltando.

Trate uma função como uma promessa

WAI-ARIA significa Aplicações de Internet Ricas e Acessíveis. A versão 1.2 tornou-se uma Recomendação do W3C em junho de 2023. Suas funções, estados e propriedades influenciam o que é informado às tecnologias assistivas. Uma função como button promete comportamento de botão, mas não cria capacidade de receber foco, ativação por teclado nem estilização.

Um div com role="button" ainda precisa de tratamento de teclado e suporte a foco. Um button real já os fornece. O princípio “nenhum ARIA é melhor que ARIA mal usado”, do Guia de Práticas de Autoria ARIA, alerta que informações incorretas podem induzir as pessoas ao erro sobre o que um controle faz.

Preserve o significado nativo

Use primeiro elementos e atributos nativos: nav, button, um campo de caixa de seleção e o required nativo. Evite repetir funções implícitas, como role="main" em main ou role="button" em button. Uma exceção útil é role="list" em uma lista cuja remoção de marcadores afeta os anúncios do VoiceOver.

Não substitua o significado de um título por uma função de botão. Aninhe um botão dentro dele:

<h2>
  <button type="button" aria-expanded="false">Shipping</button>
</h2>

O título continua aparecendo na navegação por títulos, e seu botão disponibiliza a ação. O script deve manter o conteúdo exibido e o estado expandido em concordância.

Nunca coloque aria-hidden="true" em um controle que pode receber foco ou em um ancestral que contenha um. O foco poderia chegar a algo removido da árvore de acessibilidade. role="presentation" e role="none" funcionam de outra forma: removem a semântica, não o conteúdo. Navegadores ignoram essas funções em elementos que podem receber foco, por isso elas não podem transformar um link ativo em texto simples.

Encontre a origem de um nome

Para os controles comuns apresentados aqui, verifique as origens do nome nesta ordem de prioridade:

  1. aria-labelledby, que faz referência a texto por ID.
  2. aria-label, que fornece uma string.
  3. A fonte nativa, como um rótulo, texto de botão ou texto alternativo de imagem.
  4. title, como último recurso, quando aplicável.

aria-describedby acrescenta uma descrição depois do nome; não define o nome. Uma substituição pode ocultar acidentalmente palavras visíveis úteis. <button aria-label="Close dialog">Cancel</button> é anunciado como “Close dialog”, embora a pessoa veja “Cancel”. Prefira texto visível ou inclua-o no início de um nome mais extenso quando necessário.

Sites básicos costumam precisar de ARIA para nomes de regiões de referência repetidas, botões com ícones, orientações e erros de campos, controles de expansão e recolhimento, links da página atual e atualizações em tempo real. Uma grande quantidade de atributos ARIA não é uma medida de qualidade. Inspecione a função e o nome computados e use o teclado para verificar o comportamento prometido pela função.

Acompanhe fontes de nome concorrentes

Considere um botão com vários atributos de nomeação:

<h2 id="options-title">Delivery options</h2>
<button type="button" aria-labelledby="options-title"
        aria-label="Choose delivery">Show pickup options</button>

Primeiro siga aria-labelledby: seu texto referenciado fornece “Delivery options”. O aria-label de menor prioridade e o texto visível do botão não prevalecem. Portanto, remover apenas aria-label mantém o mesmo nome computado.

Para que “Show pickup options” nomeie esse botão, remova ambas as substituições desnecessárias. A função de botão permanece a mesma durante todo o processo; apenas a fonte de seu nome muda. Inspecione o nome computado após cada edição para identificar qual atributo causou a divergência. Adicionar uma descrição não corrigiria o nome errado, pois uma descrição é uma informação separada.

Principais conclusões

  • Prefira o significado e o comportamento do HTML nativo antes de adicionar ARIA.
  • ARIA altera a árvore de acessibilidade, não o tratamento de teclado nem a estilização.
  • Preserve a semântica nativa ao adicionar conteúdo interativo.
  • Nunca oculte com aria-hidden um elemento que pode receber foco ou seu ancestral.
  • Verifique substituições de nome; descrições não substituem nomes.

6.2 Comunique mudanças de estado com ARIA

Uma interface que muda precisa transmitir a mesma informação visualmente e pelo código. Se um painel estiver aberto, mas seu botão ainda informar “recolhido”, uma pessoa que usa leitor de tela receberá informação falsa. Atualize o estado sempre que a interface mudar.

Mantenha um controle de expansão e recolhimento sincronizado
<button type="button" aria-expanded="false"
        aria-controls="main-menu">Menu</button>
<ul id="main-menu" hidden>
  <li><a href="/bread">Bread</a></li>
</ul>

Quando o menu abre, o script remove hidden e define o aria-expanded do botão como true. Quando fecha, o script restaura hidden e define o estado como false. O estado pertence ao botão que alterna a exibição. aria-controls identifica o elemento afetado; seu suporte varia, por isso ele não pode substituir o estado expandido nem o comportamento real de ocultação.

Escolha o estado adequado ao controle
SituaçãoAtributo
Um controle abre ou fecha conteúdoaria-expanded
Um link de navegação identifica a página atualaria-current="page"
Um botão permanece ligado ou desligadoaria-pressed

Para o link da página atual, estilize o mesmo atributo no CSS, por exemplo, com fonte em negrito e borda inferior em a[aria-current="page"]. Isso mantém o destaque visível ligado ao estado anunciado. aria-selected pertence a componentes como abas e opções de caixas de lista, não a links comuns de navegação entre páginas.

Um botão de alternância pode manter o rótulo “Silenciar” e mudar aria-pressed entre false e true. Outro design válido altera o rótulo de um botão de ação comum entre “Silenciar” e “Ativar som” sem um estado pressionado. Não combine um rótulo de ação variável com o padrão de estado de alternância, pois isso pode produzir anúncios confusos como “Ativar som, pressionado”.

Diferencie ocultar de desabilitar

aria-hidden="true" remove um elemento e seus descendentes da árvore de acessibilidade, mas os mantém visíveis. Use-o para ícones decorativos ou conteúdo visual redundante. Ele não impede o acesso por teclado. Use hidden ou display: none quando uma região deve ficar indisponível para todas as pessoas.

O disabled nativo impede a interação comum com um controle nativo. aria-disabled="true" informa um estado indisponível, mas não bloqueia cliques nem ativação por teclado. Se esse atributo for usado para manter um controle desabilitado capaz de receber foco para fins de explicação, o script deverá impedir sua ação. Prefira também checked e required nativos em campos de entrada nativos.

Teste nos dois sentidos

Abra e feche o controle de expansão e recolhimento com o teclado enquanto observa os atributos nas ferramentas do desenvolvedor. Inspecione o estado computado e ouça seu anúncio. Uma mudança visual bem-sucedida, por si só, não mostra que o estado foi atualizado, e um atributo alterado, por si só, não mostra que o painel se tornou visível ou utilizável.

Principais conclusões

  • Atualize estados ARIA sempre que o estado correspondente da interface mudar.
  • Coloque aria-expanded no controle de expansão e recolhimento.
  • Use aria-current="page" para links da página atual.
  • Mantenha estável o rótulo de um botão de alternância com estado pressionado.
  • Ocultar e desabilitar com ARIA não fornece comportamento de teclado ou clique.

6.3 Execute verificações automatizadas de acessibilidade e interprete os resultados

Verificações automatizadas encontram rapidamente muitos problemas de código em uma página renderizada. Use os resultados para localizar barreiras e verificar correções. Suas regras podem inspecionar algumas relações e valores, mas decidir se o conteúdo faz sentido ainda exige uma pessoa.

Escolha uma ferramenta e examine os resultados

Axe DevTools usa o motor axe-core. O WAVE coloca marcadores na página para que os problemas sejam vistos em contexto. O Lighthouse nas ferramentas do desenvolvedor do Chrome fornece uma pontuação de acessibilidade usando uma seleção de verificações do axe-core. O Accessibility Insights oferece outro fluxo de teste. O Serviço de Validação de Marcação do W3C verifica problemas de HTML, como IDs duplicados e elementos não fechados.

Dependendo de suas regras e do contexto, as ferramentas podem detectar atributos alt ausentes, controles sem nome, campos sem rótulo, baixo contraste de texto em fundos lisos, ausência de idioma da página e ARIA inválido. Alguns problemas de nível de título aparecem como avisos. Leia a explicação do resultado e inspecione o elemento identificado.

Um alerta ou resultado “precisa de revisão” pede julgamento. Um texto em negrito sinalizado como possível título pode ser um título de seção real escrito como parágrafo ou apenas enfatizar uma frase. Examine sua finalidade antes de alterar sua marcação.

Entenda o que a análise não pode decidir

Uma ferramenta pode ver alt="photo" sem saber que a alternativa é inútil. Ela não consegue avaliar de forma confiável a clareza do texto de um link, a precisão das legendas descritivas, se a ordem de foco é lógica ou se uma mensagem de erro ajuda alguém a se recuperar. Uma sobreposição visual pode prender o teclado de uma forma que a análise atual não detecta. Texto sobre uma fotografia também precisa de verificação manual de contraste.

Uma pontuação de 100 significa que as regras testadas não encontraram falhas. Não é um veredito de conformidade com as WCAG. Continue testando tarefas e significados que essas regras não conseguem avaliar.

Teste os estados que as pessoas usam

Uma análise examina o estado renderizado naquele momento. Execute verificações em cada modelo de página e novamente com menus e caixas de diálogo abertos, após erros de formulário e em larguras pequenas. Um componente fechado pode ocultar problemas que só aparecem durante o uso.

Suponha que um relatório de uma padaria encontre uma imagem principal de destaque sem alt, um campo de entrada do boletim informativo sem rótulo e texto de rodapé #999999 sobre branco. Primeiro decida se a imagem informa ou decora. Adicione uma alternativa útil ou alt="" de acordo com a finalidade. Associe o campo de e-mail a um rótulo visível. O par do rodapé tem contraste de 2,85:1; substituir a cor do texto por #595959 resulta em 7,00:1 sobre branco.

Corrija causas e verifique resultados

Priorize barreiras pelo efeito sobre a tarefa. Uma armadilha de teclado ou um controle obrigatório sem nome pode impedir completamente um pedido. Corrija um componente compartilhado de campo ou rodapé em sua origem para melhorar todas as páginas que o usam. Depois execute a análise novamente no mesmo estado e repita o teste manual relevante. Uma contagem menor de erros é uma evidência útil, mas a correção também deve permitir que a pessoa conclua a tarefa.

Principais conclusões

  • Use ferramentas automatizadas para localizar problemas detectáveis por máquina.
  • Inspecione alertas e itens de revisão antes de decidir por uma correção.
  • Um relatório sem problemas abrange apenas as verificações que a ferramenta consegue executar.
  • Analise modelos de página e estados interativos, não apenas as páginas iniciais.
  • Priorize barreiras que impedem tarefas, corrija causas compartilhadas e teste novamente.

6.4 Teste manualmente com teclado, zoom e leitor de tela

Testes manuais mostram como uma página se comporta durante uma tarefa real. Combine uso de teclado, visualizações ampliadas, verificações com leitor de tela e inspeção direta da árvore. Registre detalhes suficientes para que outra pessoa possa reproduzir um problema e confirmar sua correção.

Acompanhe uma tarefa de teclado do início ao fim

Deixe o mouse de lado. Comece pela barra de endereços e percorra a página com Tab. Alcance cada link e controle, use Enter e Espaço quando adequado e inverta a direção com Shift+Tab. Verifique se o foco permanece visível e não é encoberto por uma região aderente.

Use o link para pular blocos de conteúdo, abra e feche menus, feche uma caixa de diálogo com Escape e verifique para onde o foco retorna. Procure paradas invisíveis em componentes fechados e armadilhas em reprodutores ou mapas incorporados. Em um Mac, ative a navegação por teclado e a navegação completa com Tab no Safari antes de considerar controles pulados um defeito da página.

Amplie e reorganize a página

Teste com ampliação de 200% sem perder texto ou funcionalidade. Depois use uma janela de 1280 px CSS de largura com zoom de 400%, equivalente a 320 px CSS de largura disponível. Verifique se há rolagem horizontal, sobreposições e cortes nos parágrafos. Mantenha todas as funcionalidades disponíveis no layout estreito. Aplique os valores de espaçamento de texto com uma ferramenta e inspecione controles e texto corrido.

Ouça a estrutura e os nomes

O NVDA no Windows usa Insert como tecla NVDA padrão; Caps Lock é uma alternativa opcional. No modo de leitura, H percorre títulos, D regiões de referência, K links, F campos, T tabelas e B botões. NVDA+F7 abre a lista de elementos. Tab continua percorrendo controles interativos.

No macOS, Cmd+F5 ativa e desativa o VoiceOver. Seu modificador VO é Control+Option; VO+Seta para a direita lê o próximo item e VO+U abre o rotor. No iPhone, deslizar para a direita move para o próximo item do VoiceOver. O TalkBack oferece leitura por toque semelhante no Android.

Ouça se há um título de página e um esquema úteis, nomes claros de controles, funções corretas, alternativas úteis para imagens e rótulos de campo compreensíveis. Estados obrigatórios, orientações e erros devem estar disponíveis nos campos correspondentes. Abra um controle de expansão e recolhimento e ouça a mudança de estado. Adicione um item e ouça se há uma atualização de status sem salto de foco.

Inspecione, registre e teste novamente

O painel Acessibilidade no Chrome e o Inspetor de Acessibilidade no Firefox mostram funções, nomes e estados computados. Eles ajudam a descobrir por que um rótulo está errado antes mesmo de executar um leitor de tela.

Um relatório útil informa o local, as etapas, o comportamento observado, as pessoas afetadas, o critério relacionado e a correção sugerida. Por exemplo: “Campo do boletim informativo no rodapé: use Tab até o campo de entrada; ele é anunciado sem rótulo. Usuários de leitores de tela e controle por voz não conseguem identificar sua finalidade. Adicione um rótulo de endereço de e-mail associado; verifique 1.3.1, 3.3.2 e 4.1.2.”

Teste novamente com o método que encontrou o problema. Combinações comuns incluem NVDA com Firefox ou Chrome, JAWS com Chrome e VoiceOver com Safari. Testes com pessoas que usam tecnologia assistiva diariamente podem revelar barreiras que o uso ocasional por desenvolvedores deixa passar.

Torne reproduzível uma falha de estado

Um relatório para um controle de expansão e recolhimento pode registrar um teste curto e completo:

  1. Na página de pães, use NVDA com Firefox e pressione Tab até “Opções de entrega”.
  2. Pressione Enter uma vez. O painel fica visível, mas o botão ainda é anunciado como recolhido.
  3. Inspecione o botão: aria-expanded ainda está como false.

A pessoa afetada recebe a informação de que o painel visível continua fechado. Registre 4.1.2 Nome, Função, Valor (A) e sugira atualizar o estado do botão quando o painel mudar. Após a correção, repita a abertura e o fechamento com as mesmas teclas e combinação. Verifique se a visibilidade do painel e o estado expandido anunciado concordam nos dois sentidos; inspecionar apenas o estado inicial recolhido deixaria essa falha passar.

Principais conclusões

  • Teste uma tarefa completa com operação por teclado nos dois sentidos.
  • Verifique ampliação, refluxo e espaçamento definido pelo usuário.
  • Ouça a estrutura, os nomes, os estados, os erros e as atualizações em tempo real.
  • Use a árvore de acessibilidade para investigar informações computadas.
  • Registre problemas reproduzíveis e teste a correção novamente com o mesmo método.
  • Inclua pessoas que usam tecnologia assistiva diariamente quando for possível testar com elas.

Exercícios resolvidos de Páginas web acessíveis

6 Lições Interativas

1

Crie uma página que se explique por si só

12 passos
Transforme uma página de padaria em um esquema significativo com controles utilizáveis e uma tabela de dados.
  1. 1
    IntroduçãoLeia a página por meio de seu código

    Uma página de padaria parece clara: um título grande, um menu, alguns nomes de seção em negrito e um controle Salvar. Agora verifique se o código expressa esses mesmos significados, porque os leitores de tela usam a árvore de acessibilidade que o navegador cria a partir dele, não a aparência. Você acompanhará a interpretação do navegador, criará um esquema de títulos e escolherá controles nativos que funcionem sem mouse.

  2. 2
    ExplicaçãoEncontre a função, o nome e o estado

    O navegador deriva uma árvore de acessibilidade do documento HTML. A função de um controle diz o que ele é, seu nome o identifica e seu estado informa em que condição ele está.

    Uma caixa de seleção “Ofertas por e-mail” marcada precisa dos três. Leitores de tela usam essas informações para fala ou braille; a estilização visual sozinha não consegue fornecê-las de forma confiável.

  3. 3
    ExemploCorrija um controle Salvar

    A página usa um div clicável. Ele parece um botão, mas não tem função nativa de botão, parada de Tab nem ativação com Enter/Espaço.

    Substitua-o por:

    <button type="button">Save</button>
    

    O texto fornece o nome, e o elemento fornece o comportamento de botão. Use Tab para alcançá-lo e depois Enter e Espaço para verificar a ativação. Estilize o botão com CSS para manter a aparência pretendida; não é necessário reconstruí-lo como um contêiner genérico.

  4. 4
    DesafioEscolha a próxima verificação

    O botão Salvar funciona com mouse. Uma pessoa desenvolvedora diz que isso também comprova o acesso por teclado. O que você deve fazer?

    ---reveal---

    Alcance-o com Tab e ative-o com Enter e Espaço. A ativação com mouse testa apenas um caminho. Um botão nativo fornece esses comportamentos de teclado, enquanto um elemento genérico clicável ainda pode bloqueá-los.

  5. 5
    ExemploDê uma identidade à página

    Comece identificando o idioma e o assunto da página:

    <html lang="en-US">
    <head>
      <title>Choose a cake – Green Leaf Bakery</title>
    </head>
    

    O idioma favorece a pronúncia. O título distingue essa página das outras abas da padaria e está disponível nos anúncios de leitores de tela.

    Coloque o conteúdo principal em uma região main visível. Idioma, título e região principal respondem a perguntas diferentes: como ler, qual é a página e onde começa seu conteúdo.

  6. 6
    ExemploTransforme nomes de seção em títulos

    A página contém um assunto, duas seções e um sabor dentro de uma seção. Represente essas relações no código:

    <h1>Choose a cake</h1>
    <h2>Sizes</h2>
    <h2>Flavors</h2>
    <h3>Lemon</h3>
    

    Agora quem ouve pode usar a navegação por títulos para alcançar o nível correto. Leia apenas esses nomes de título em ordem: eles ainda devem descrever o esquema da página. Defina os tamanhos visuais de fonte com CSS depois de escolher os níveis, para que uma seção principal com aparência menor ainda possa ser um h2.

  7. 7
    DesafioMantenha o esquema significativo

    “Detalhes de retirada” é uma seção principal, mas h4 tem o tamanho de fonte desejado. Qual marcação você deve usar?

    ---reveal---

    Use h2 para essa seção principal e estilize seu tamanho de fonte. Os níveis de título expressam relações entre seções. Escolher h4 pela aparência faria o esquema sugerir que faltam seções intermediárias.

  8. 8
    DicaVerifique o percurso no código-fonte

    Leia os títulos como uma lista e inspecione a ordem do HTML. A ordenação flex pode mover visualmente um link de entrada para o início, enquanto o deixa por último no DOM.

    Mova-o no HTML se essa for sua posição significativa. Use elementos de lista reais para links agrupados, para que o navegador possa disponibilizar tanto o agrupamento quanto seu tamanho.

  9. 9
    ExplicaçãoEscolha o que o controle promete

    “Ver aulas” leva a outra página, então use uma âncora com href. “Mostrar filtros” altera a página atual, então use um botão.

    Um link é ativado com Enter; um botão é ativado com Enter ou Espaço. Dentro de um formulário, defina type="button" em Mostrar filtros para que ele não envie o formulário acidentalmente.

  10. 10
    ExemploAssocie horários de funcionamento aos cabeçalhos

    Horários de funcionamento têm relações entre linhas e colunas. Represente uma pequena tabela no código:

    <table>
      <caption>Opening hours</caption>
      <tr><th scope="col">Day</th><th scope="col">Opens</th></tr>
      <tr><th scope="row">Friday</th><td>08:00</td></tr>
    </table>
    

    O título nomeia a tabela. Uma pessoa que se move até 08:00 pode ouvir a linha Friday e a coluna Opens. As células de cabeçalho e os escopos fornecem esse contexto; organizar caixas comuns em linhas não o representaria no código.

  11. 11
    DesafioRevise uma pequena mudança na página

    Um novo link “Peça agora” leva a /order. A tabela de horários de funcionamento é reconstruída usando caixas div, e seu título continua sendo um parágrafo em negrito. O que deve permanecer em HTML nativo?

    ---reveal---

    Mantenha o destino como uma âncora com href e os horários de funcionamento como uma tabela real com título e cabeçalhos com escopo. A estilização em negrito não pode fornecer um título de tabela nem relações entre cabeçalhos e células.

  12. 12
    RecapitulaçãoInspecione o significado antes da aparência

    Verifique as informações de função e nome da página, idioma, título, regiões de referência, títulos de seção e ordem no código-fonte. Depois verifique links, botões, controles nativos e relações de tabela. Um esquema de títulos no leitor de tela e um breve percurso por teclado oferecem duas perspectivas práticas sobre o funcionamento da estrutura.

2

Escolha a alternativa adequada

10 passos
Forneça equivalentes para fotos, ícones e mídias de uma padaria que preservem sua finalidade.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoPergunte o que estaria faltando
  2. 2
    ExplicaçãoDecida se a foto informa
  3. 3
    ExemploNomeie um link de imagem pelo destino
  4. 4
    ExemploDisponibilize um gráfico em texto
  5. 5
    DesafioDescreva a função de um botão
  6. 6
    ExemploMantenha um único nome útil para o botão
  7. 7
    ExplicaçãoSincronize fala e som com a reprodução
  8. 8
    ExplicaçãoForneça a informação visual ausente
  9. 9
    DesafioComplete as alternativas de mídia
  10. 10
    RecapitulaçãoEscolha pela finalidade e pelo meio
3

Acompanhe o foco durante uma compra

13 passos
Teste a ordem do teclado, o foco visível, links para pular blocos de conteúdo e uma caixa de diálogo nativa.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoAcompanhe a posição do usuário
  2. 2
    ExplicaçãoUse o percurso nativo do teclado
  3. 3
    ExemploRemova paradas invisíveis
  4. 4
    DesafioCorrija o percurso
  5. 5
    ExemploRestaure um contorno claro
  6. 6
    ExemploOlhe abaixo do cabeçalho aderente
  7. 7
    DesafioMeça um alvo pequeno
  8. 8
    ExemploAdicione o caminho para pular blocos
  9. 9
    DesafioTeste o próprio link para pular blocos de conteúdo
  10. 10
    ExemploAbra a caixa de diálogo nativa
  11. 11
    DicaPreserve uma posição útil após a remoção
  12. 12
    DesafioRelacione foco e visibilidade
  13. 13
    RecapitulaçãoRepita a interação completa
4

Verifique uma página legível de padaria

12 passos
Meça o contraste, adicione indicações independentes de cor e teste layouts ampliados.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoTeste três tipos de legibilidade
  2. 2
    ExplicaçãoEscolha o limiar antes de medir
  3. 3
    ExemploCompare uma cor próxima do limiar
  4. 4
    DesafioVerifique dois usos de uma cor
  5. 5
    ExplicaçãoAcrescente significado além da cor
  6. 6
    DesafioVerifique as séries de um gráfico
  7. 7
    ExemploEncontre o contêiner que corta o conteúdo
  8. 8
    ExemploReduza a largura efetiva de visualização
  9. 9
    DicaAplique o espaçamento como um usuário faria
  10. 10
    DesafioCorrija o layout estreito
  11. 11
    ConexãoCombine as verificações
  12. 12
    RecapitulaçãoMantenha as mesmas informações disponíveis
5

Ajude um cliente a concluir um pedido

13 passos
Crie orientações de formulário associadas, permita a recuperação de erros e anuncie atualizações do carrinho.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoAcompanhe toda a tarefa do formulário
  2. 2
    ExemploAssocie o rótulo de e-mail
  3. 3
    ExemploForneça a pergunta compartilhada
  4. 4
    DesafioCorrija uma divergência entre nome e texto visível
  5. 5
    ExplicaçãoAdicione a orientação antes do erro
  6. 6
    ExemploOfereça suporte a ferramentas de entrada
  7. 7
    DesafioReaproveite uma resposta
  8. 8
    ExemploIdentifique um campo com erro
  9. 9
    ExemploDê um ponto de entrada para vários erros
  10. 10
    DesafioAnuncie o resultado no carrinho
  11. 11
    ConexãoVerifique antes de concluir
  12. 12
    DesafioRelacione a recuperação ao esforço de entrada
  13. 13
    RecapitulaçãoVerifique rótulos, orientações e mensagens
6

Verifique a interface visual e a falada

16 passos
Corrija nomes e estados ARIA, interprete uma análise e escreva um registro reproduzível de um problema encontrado manualmente.

Salve esta aula para seguir cada Lição Interativa passo a passo.

  1. 1
    IntroduçãoCompare o que a página informa
  2. 2
    ExplicaçãoVerifique o que ARIA pode alterar
  3. 3
    ExemploInvestigue um nome inesperado
  4. 4
    DesafioPreserve dois significados
  5. 5
    ExemploFaça um estado concordar com seu painel
  6. 6
    Ideia-chaveMantenha estável o rótulo de alternância
  7. 7
    DesafioEscolha o estado da página
  8. 8
    ExplicaçãoLeia a análise como evidência
  9. 9
    ExemploCorrija a origem compartilhada
  10. 10
    DesafioInterprete um resultado sem falhas
  11. 11
    ExemploPercorra o caminho manualmente
  12. 12
    ExemploOuça nomes e estrutura
  13. 13
    ExemploEscreva um registro reproduzível
  14. 14
    DesafioEscolha o novo teste
  15. 15
    DesafioConclua a revisão combinada
  16. 16
    RecapitulaçãoVerifique cada tipo de promessa

Questões de Páginas web acessíveis

50 Questões de Prática em 5 conjuntos

Conjunto 1: Escolha uma estrutura clara e controles nativos10 Questões de Prática

Questão 1 de 10

O controle “Salvar receita” de uma padaria é um botão nativo. Quais duas teclas devem ativá-lo?
  1. Tab e Shift+Tab.
  2. Enter e Espaço.
  3. Enter e Shift+Tab.
  4. Espaço e Escape.
Mostrar respostaOcultar resposta
Resposta: B
Enter e Espaço ativam um botão nativo. Tab e Shift+Tab movem o foco entre controles; não executam a ação do botão. Esse comportamento esperado é um dos motivos para escolher um botão nativo em vez de criar um elemento genérico clicável.

Questão 2 de 10

Uma página tem um h1 chamado “Cursos de panificação” e um h2 chamado “Cursos de fim de semana”. Qual nível de título é adequado para “Iniciantes de domingo”, uma parte de Cursos de fim de semana?
  1. h2, com o tamanho da fonte definido em CSS.
  2. h4, para mostrar que é um título menor.
  3. h3, com o tamanho da fonte definido em CSS.
  4. p, em negrito para preservar o esquema.
Mostrar respostaOcultar resposta
Resposta: C
Uma parte de uma seção h2 pertence ao nível h3. O nível do título expressa sua posição no esquema, enquanto o CSS controla seu tamanho. Escolher h4 apenas porque parece menor introduz um nível pulado em vez de descrever a estrutura da página.

Questão 3 de 10

Qual elemento HTML é adequado para um controle que leva a pessoa à página /delivery da padaria?
  1. Uma âncora com href="/delivery".
  2. Um botão com type="button".
  3. Uma âncora sem href.
  4. Um summary dentro de um elemento details.
Mostrar respostaOcultar resposta
Resposta: A
Uma âncora com href representa a navegação para um destino e oferece a ativação normal de um link. Um botão representa uma ação, por isso usá-lo aqui forneceria uma função diferente do comportamento de ir ao destino. Uma âncora sem href não fornece um link comum que receba foco pelo teclado.

Questão 4 de 10

Uma foto de pão e as palavras visíveis “Olive loaf” estão dentro do mesmo link de produto. A foto não acrescenta informação além de identificar esse produto. Qual texto alternativo é adequado para a foto?
  1. alt="Olive loaf".
  2. alt="Product image".
  3. Nenhum atributo alt.
  4. alt="".
Mostrar respostaOcultar resposta
Resposta: D
O alt vazio permite que as palavras visíveis nomeiem o link uma vez, sem repetir o nome do produto. Omitir alt é diferente: um leitor de tela pode anunciar o nome do arquivo. A decisão segue a finalidade dessa foto dentro do link, onde o produto já é identificado por texto.

Questão 5 de 10

Uma entrevista gravada em uma padaria é oferecida apenas em áudio. De qual alternativa textual ela precisa?
  1. Uma faixa sincronizada de legendas de vídeo.
  2. Uma descrição da foto de capa.
  3. Um título com o assunto da entrevista.
  4. Uma transcrição da gravação.
Mostrar respostaOcultar resposta
Resposta: D
Conteúdo apenas em áudio precisa de uma transcrição para que suas informações estejam disponíveis em texto. Legendas descritivas são sincronizadas com a reprodução de vídeo e não representam a alternativa textual separada necessária aqui. Nomear o assunto identifica a gravação, mas não comunica seu conteúdo.

Questão 6 de 10

Tab alcança links em um menu móvel que parece fechado porque tem opacity: 0. O que deve mudar enquanto o menu estiver fechado?
  1. Adicionar aria-hidden="true" à região.
  2. Atribuir tabindex="0" a cada link.
  3. Ocultar a região com hidden.
  4. Mover a região mais para fora da tela.
Mostrar respostaOcultar resposta
Resposta: C
O atributo hidden remove a região fechada tanto da visualização quanto do percurso do teclado. A opacidade ou o posicionamento fora da tela altera sua aparência sem remover suas paradas. A ocultação apenas com ARIA remove a região da árvore de acessibilidade, mas pode deixar quem usa teclado colocando foco em seus links.

Questão 7 de 10

Uma ferramenta informa uma razão de 4,49:1 para um par de cores. Ele atende ao nível AA para texto corrido normal de 16 px CSS?
  1. Não; texto normal precisa de pelo menos 4,5:1.
  2. Sim; arredondar para uma casa decimal resulta em 4,5.
  3. Sim; texto corrido normal precisa de apenas 3:1.
  4. Não; todo texto corrido deve alcançar 7:1 no nível AA.
Mostrar respostaOcultar resposta
Resposta: A
Texto normal precisa de pelo menos 4,5:1, e 4,49 está abaixo desse mínimo exato. Arredondar a razão exibida para 4,5 não faz o par atender ao requisito. O limiar de 3:1 se aplica a texto em tamanho grande, enquanto 7:1 é o mínimo AAA para texto normal.

Questão 8 de 10

A marcação é <label for="buyer-email">Email address</label><input id="email" name="buyer-email" type="email">. O que corrige diretamente a associação do rótulo?
  1. Alterar o tipo do campo para texto simples.
  2. Alterar o ID do campo para buyer-email.
  3. Alterar o texto do rótulo para buyer-email.
  4. Alterar o name do campo para email.
Mostrar respostaOcultar resposta
Resposta: B
O valor de for do rótulo deve corresponder ao ID único do campo de entrada, portanto alterar esse ID associa o par. O atributo name identifica os dados enviados e não pode substituir a relação com o ID. As palavras visíveis podem permanecer “Email address”, que descrevem claramente a finalidade do campo.

Questão 9 de 10

Um título “Ingredients” tem role="button", tabindex="0" e aria-label="Expand". Cliques do mouse expandem o conteúdo, mas Espaço não faz nada e a navegação por títulos o ignora. Qual estrutura corrige a navegação por títulos, as teclas do botão e a divergência com o nome visível?
  1. Um botão nativo Ingredients dentro do h2, mantendo aria-label="Expand".
  2. A função de botão no h2 existente, com aria-label alterado para “Ingredients”.
  3. Uma âncora nomeada Ingredients dentro do h2, com href="#" e o manipulador de clique.
  4. Um botão nativo Ingredients dentro do h2, sem a substituição de nome Expand.
Mostrar respostaOcultar resposta
Resposta: D
Manter o h2 e aninhar um botão nativo preserva a navegação por títulos e fornece ativação com Enter/Espaço. Deixar que o texto visível Ingredients nomeie o botão também restaura a relação com o nome visível. Um botão aninhado que mantém aria-label="Expand" corrige a estrutura e as teclas, mas ainda informa a quem usa voz um nome que não contém as palavras visíveis.

Questão 10 de 10

Uma ferramenta informa um rótulo ausente em um rodapé reutilizado em 12 páginas de uma padaria. Ela também sinaliza texto em negrito para revisão como título. Como a pessoa desenvolvedora deve tratar os dois resultados?
  1. Corrigir o rótulo compartilhado e inspecionar a finalidade do texto em negrito.
  2. Corrigir cada rodapé separadamente e transformar todo texto em negrito em h2.
  3. Rotular o campo com texto de exemplo e ignorar o alerta de revisão.
  4. Suprimir os dois resultados até um leitor de tela informar um erro.
Mostrar respostaOcultar resposta
Resposta: A
Corrigir o rodapé compartilhado resolve a causa em todas as páginas que o usam. O alerta de possível título precisa de inspeção porque o texto em negrito pode ser um título de seção ou uma ênfase comum. Transformar automaticamente todo texto em negrito em títulos criaria seções falsas em vez de resolver o resultado com julgamento.
Conjunto 2: Mantenha claros o foco, as orientações e o estado10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um campo de senha tem um rótulo visível e a orientação próxima “Pelo menos 12 caracteres” com id="pw-help". Qual atributo associa essa orientação como descrição?
  1. aria-labelledby="pw-help".
  2. aria-describedby="pw-help".
  3. autocomplete="pw-help".
  4. aria-label="pw-help".
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Onde o idioma principal da página deve ser declarado?
  1. Em name no elemento body.
  2. Em aria-label no título principal.
  3. Em title no elemento de navegação.
  4. Em lang no elemento html.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Uma página de receita usa uma fotografia apenas como borda decorativa. Qual alternativa de imagem é adequada à sua finalidade?
  1. Um atributo alt vazio.
  2. Uma frase descrevendo cada decoração.
  3. O título da receita repetido como texto alternativo.
  4. O nome original do arquivo da fotografia.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um botão de finalização da compra em foco tem um contorno claro, mas um banner aderente de cookies o encobre completamente. Qual requisito AA ainda não foi atendido?
  1. Foco Visível.
  2. Tamanho do Alvo (Mínimo).
  3. Foco Não Encoberto (Mínimo).
  4. Aparência do Foco.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um link para pular blocos de conteúdo é o primeiro no código-fonte, mas usa display: none. Seu destino é uma região principal sem ID. Qual correção fornece um percurso utilizável sem adicionar main a toda sequência de Tab?
  1. Manter o link capaz de receber foco; apontar para main por ID com tabindex zero.
  2. Manter display none; apontar para main por ID com tabindex menos um.
  3. Manter o link capaz de receber foco; apontar para main por ID com tabindex menos um.
  4. Manter o link capaz de receber foco; identificar o alvo apenas com um nome de classe.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Uma padaria mostra um ponto vermelho para “Fechado” e um ponto verde para “Aberto”, sem outra indicação de status. Qual mudança direta disponibiliza o significado sem distinguir cores?
  1. Aumentar a saturação das cores dos dois pontos.
  2. Aumentar os dois pontos com preenchimento igual.
  3. Adicionar “Fechado” ou “Aberto” ao lado de cada ponto.
  4. Usar duas cores com contraste maior em relação ao fundo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Com o texto a 200%, um cartão de receita com altura fixa corta suas últimas linhas. Qual mudança no CSS resolve a causa?
  1. Manter a altura e reduzir a fonte.
  2. Manter a altura e ocultar o transbordamento.
  3. Manter a altura e mover linhas para fora da tela.
  4. Permitir que a altura cresça com o conteúdo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Após a validação do pedido falhar, o formulário limpa todos os valores. O campo de e-mail permanece com aria-invalid="false" e seu aria-describedby aponta apenas para uma orientação antiga, embora exista um novo parágrafo de erro. Qual correção oferece um caminho completo para corrigir o problema?
  1. Manter os valores, marcar o e-mail como inválido e referenciar os IDs da orientação e do erro.
  2. Manter os valores e referenciar os dois IDs, mas manter falso o estado inválido do campo.
  3. Limpar os valores, marcar o e-mail como inválido e substituir seu rótulo pelo texto de erro.
  4. Manter os valores e marcar o e-mail como inválido, mas deixar o erro sem associação.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Qual atributo identifica o link para a página atualmente aberta em uma lista de navegação?
  1. aria-selected="true".
  2. aria-current="page".
  3. aria-pressed="true".
  4. aria-expanded="true".
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um menu é anunciado corretamente ao carregar a página. Depois de aberto, seus links não podem ser alcançados com Tab, embora o painel esteja visível e expanded seja true. Qual plano de verificação localiza melhor a barreira restante?
  1. Executar novamente apenas a análise inicial e aceitar o nome correto do botão.
  2. Alterar o estado anunciado para false e manter o painel visível.
  3. Adicionar rótulos aos links e considerar o painel aberto verificado.
  4. Testar o percurso por teclado com o menu aberto e inspecionar o estado renderizado dos links.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 3: Aplique as regras aos estados reais da página10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um formulário contém um botão “Adicionar uma observação” que abre um painel opcional, mas clicar nele envia o pedido. Qual atributo nativo impede diretamente esse envio?
  1. type="button" no botão.
  2. aria-expanded="false" no botão.
  3. role="button" no botão.
  4. tabindex="-1" no botão.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um vídeo gravado sobre como sovar massa tem legendas descritivas precisas para a fala. Ele mostra silenciosamente a textura da massa que indica a conclusão. O reprodutor tem controles nativos. Qual adição resolve a questão restante de acessibilidade da mídia no nível AA?
  1. Uma transcrição do diálogo que repita as legendas.
  2. Um rótulo acessível que nomeie novamente o botão de reprodução.
  3. Uma audiodescrição da indicação importante na textura.
  4. Legendas de diálogo no mesmo idioma da fala existente.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um grupo de escolha de entrega usa botões de opção nativos. Como quem usa teclado normalmente deve mudar a opção selecionada depois de entrar no grupo?
  1. Pressionar Tab separadamente para cada opção.
  2. Pressionar Escape para selecionar a próxima opção.
  3. Pressionar Espaço para ir ao próximo grupo do formulário.
  4. Usar as setas para percorrer as opções.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Uma barra de ferramentas tem dois botões quadrados com ícones em uma linha horizontal. Nenhuma exceção para alvo em texto corrido, controle equivalente ou outra se aplica, exceto um possível espaçamento entre alvos. Qual design atende a Tamanho do Alvo (Mínimo) no nível AA?
  1. Ambos os alvos são quadrados de 16 px, com espaço de 6 px entre as bordas.
  2. Ambos os alvos são quadrados de 16 px, com espaço de 10 px entre as bordas.
  3. Ambos os alvos são quadrados de 22 px, com espaço de 1 px entre as bordas.
  4. Um alvo é quadrado de 24 px e o outro de 16 px, com espaço de 2 px entre eles.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um painel usa o mesmo par de cores com razão de 3,60:1 para texto de 22 px com peso normal e para um limite necessário à identificação de seu campo de entrada. Como os dois usos devem ser avaliados no nível AA?
  1. O texto atende ao requisito; o limite do campo não atende.
  2. O texto não atende ao requisito; o limite do campo atende.
  3. Ambos atendem porque a razão está acima de 3:1.
  4. Ambos falham porque cada parte exige 4,5:1.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Qual unidade de fonte segue diretamente o tamanho da fonte raiz e é útil para respeitar a configuração de texto padrão do usuário?
  1. rem.
  2. px.
  3. vh.
  4. vw.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Várias caixas de seleção respondem à pergunta “Quais tipos de pão interessam a você?”. Cada caixa já tem seu próprio rótulo. Qual marcação acrescenta a pergunta compartilhada de forma identificável pelo código?
  1. Um parágrafo acima de um contêiner genérico.
  2. Um texto de exemplo repetido dentro de cada caixa de seleção.
  3. Um ID compartilhado atribuído a todas as caixas de seleção.
  4. Um fieldset com essa pergunta em sua legend.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Um campo obrigatório já tem um rótulo correto e uma orientação visível com ID “hint”. O valor inserido falha em uma verificação, e um erro específico tem ID “err”. O valor deve permanecer disponível e ambas as descrições devem ser ouvidas. Qual atualização atende às três necessidades?
  1. Manter o valor; definir aria-invalid como false e aria-describedby="hint err".
  2. Limpar o valor; definir aria-invalid como true e aria-describedby="hint err".
  3. Manter o valor; definir aria-invalid como true e aria-describedby="hint err".
  4. Manter o valor; definir aria-invalid como true e aria-labelledby="hint err".
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um botão tem o texto “Back”, aria-label="Return" e aria-labelledby="previous-title". O título referenciado diz “Previous step”. Qual nome a pessoa desenvolvedora deve esperar encontrar na inspeção?
  1. “Return”.
  2. “Back”.
  3. “Back Return”.
  4. “Previous step”.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Uma análise aponta que uma imagem decorativa divisória está sem alt. Qual correção é adequada à finalidade real da imagem?
  1. Adicionar alt="Divider image" para descrevê-la.
  2. Usar o nome do arquivo da imagem como seu alt.
  3. Adicionar alt="" para ignorar a divisória.
  4. Mover a descrição para seu atributo title.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 4: Diagnostique barreiras durante uma interação10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

A navegação principal aparece visualmente em primeiro lugar, mas o CSS a move do fim do DOM. Há também uma navegação de trilha, e ambas as regiões têm o nome “Links”. Qual correção torna mais claras tanto o percurso quanto as opções de região?
  1. Manter a ordem no código-fonte e atribuir tabindex positivo a cada link de navegação.
  2. Manter os dois nomes e usar aria-hidden para retirar a região da trilha da fala.
  3. Colocar a navegação principal em uma ordem significativa no código-fonte e dar nomes distintos às regiões.
  4. Colocar a função navigation em cada link e usar CSS para inverter a ordem visual.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Uma padaria usa a mesma foto de pão em uma página de produto e em uma página sobre como resolver problemas de crostas assadas em excesso. Por que seus textos alternativos podem ser diferentes?
  1. Um arquivo reutilizado deve ter uma função de imagem diferente a cada uso.
  2. A informação relevante muda conforme a finalidade da página.
  3. O texto alternativo deve listar todas as características visíveis nos dois lugares.
  4. O navegador gera uma nova alternativa a partir de cada título de página.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

O botão de um item do carrinho abre uma caixa de diálogo nativa de confirmação. Confirmar exclui o último item e o elemento que abriu a caixa e depois a fecha. O título do carrinho permanece, mas normalmente não recebe foco. Qual plano mantém o comportamento modal e uma posição útil após a confirmação?
  1. Abrir com showModal; depender do retorno automático do foco ao elemento excluído.
  2. Abrir mostrando uma sobreposição div; após fechar, rolar visualmente até o título do carrinho.
  3. Abrir com showModal; após fechar, adicionar aria-live ao título do carrinho sem foco.
  4. Abrir com showModal; após fechar, colocar foco no título do carrinho com tabindex menos um.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Um rótulo branco de botão em tamanho normal tem contraste de 1,63:1 sobre fundo âmbar. Texto preto sobre o mesmo âmbar tem 12,88:1. Qual mudança direta de cor atende ao contraste de texto AA?
  1. Usar preto para o rótulo.
  2. Usar negrito no rótulo branco.
  3. Adicionar um nome acessível.
  4. Ampliar o preenchimento do botão.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Um link em um parágrafo é distinguido apenas pela cor. Seu texto tem contraste de 5,10:1 com o fundo, mas apenas 2,20:1 com o texto ao redor. Ele fica sublinhado ao passar o ponteiro e ao receber foco. Qual correção simples resolve a barreira restante de identificação do link?
  1. Manter o sublinhado visível também no estado normal.
  2. Remover o sublinhado ao passar o ponteiro para manter todos os estados consistentes.
  3. Manter o estado normal porque o contraste com o fundo atende ao requisito.
  4. Adicionar um aria-label mantendo a estilização visual inalterada.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

A finalização da compra obriga o cliente a redigitar para cobrança um endereço de entrega ainda válido, sem motivo de segurança. A entrada na conta bloqueia a colagem de senha sem alternativa que atenda ao critério. Um campo para o e-mail de contato de um amigo usa o token autocomplete="email" do cliente. Qual plano resolve os três problemas?
  1. Oferecer o reaproveitamento do endereço, manter a colagem bloqueada e remover o token inadequado do e-mail do amigo.
  2. Manter a redigitação do endereço, permitir a colagem de senha e manter o token de preenchimento do e-mail do amigo.
  3. Oferecer o reaproveitamento do endereço, permitir a colagem de senha e mudar o token do amigo para username.
  4. Oferecer o reaproveitamento do endereço, permitir a colagem de senha e remover o token inadequado do e-mail do amigo.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Qual valor ARIA informa que um campo foi verificado e contém um erro?
  1. aria-required="false".
  2. aria-invalid="true".
  3. aria-pressed="true".
  4. aria-current="page".
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Três controles não concordam com seu comportamento: um menu aberto informa expanded false; Silenciar muda para Ativar som enquanto pressed passa a true; um botão de pedido com aria-disabled ainda envia o pedido. A equipe quer um botão de alternância Silenciar com estado pressionado e um botão de pedido indisponível que possa receber foco. Qual correção é adequada?
  1. Informar o menu aberto, manter o rótulo Silenciar variável e bloquear ações de pedido indisponíveis no script.
  2. Informar o menu aberto, manter o rótulo Silenciar estável e depender de aria-disabled para bloquear o envio.
  3. Informar o menu aberto, manter o rótulo Silenciar estável e bloquear ações de pedido indisponíveis no script.
  4. Informar o menu aberto, manter o rótulo Silenciar estável e usar disabled nativo no botão de pedido.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um problema de nome ausente é corrigido em um botão de pedido compartilhado. Seu nome computado agora parece correto. Qual novo teste verifica melhor a falha original do leitor de tela e a ação em conjunto?
  1. Aceitar o nome computado e repetir apenas a pontuação automatizada inicial.
  2. Usar o mesmo percurso com leitor de tela, ouvir o nome e ativar o botão.
  3. Testar apenas com mouse porque o nome do elemento agora está presente.
  4. Verificar uma captura de tela do botão e contar os avisos restantes da análise.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Um botão usa aria-disabled="true", mas clicar nele ainda faz um pedido. Qual comportamento está faltando se o controle deve continuar capaz de receber foco?
  1. O valor ARIA deve ser movido para o título mais próximo.
  2. O botão também deve receber um valor positivo de tabindex.
  3. Um novo aria-label deve dizer “Indisponível” em vez da ação.
  4. Um script deve impedir sua ação enquanto estiver indisponível.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Conjunto 5: Revise uma página por vários caminhos de acesso10 Questões de Prática

Salve esta aula para ver todas as respostas e praticar cada conjunto.

Questão 1 de 10

Um pequeno link de receita aparece dentro de uma frase comum. Seu alvo em texto corrido precisa receber preenchimento até ter 24 por 24 px CSS especificamente para atender a 2.5.8?
  1. Sim; o mínimo se aplica sem nenhuma exceção.
  2. Não; o texto do link também é exceção ao contraste de texto.
  3. Não; links em frases têm uma exceção para alvos em texto corrido.
  4. Sim; todos os links exigem 44 por 44 px CSS no nível AA.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 2 de 10

Um relatório verifica vários critérios de sucesso AA, mas nenhum critério de nível A. Isso pode estabelecer conformidade com o nível AA das WCAG 2.2?
  1. Sim; AA substitui os critérios de nível inferior.
  2. Sim; o site funciona com um leitor de tela.
  3. Não; todos os critérios AAA também devem ser atendidos.
  4. Não; todos os critérios A e AA devem ser atendidos.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 3 de 10

Um botão nativo mostra “Search bread” ao lado de um SVG decorativo oculto. Seu aria-label é “Search bread”, mas aria-labelledby aponta para um título que diz “Filters”. Qual nome é computado e qual correção mantém o nome visível e o SVG decorativo oculto?
  1. “Filters”; remover apenas aria-label e manter a referência ao título.
  2. “Filters”; remover as substituições de nome e manter o SVG oculto.
  3. “Search bread”; manter as duas substituições de nome e revelar o SVG.
  4. “Search bread”; remover apenas a referência ao título e manter o SVG oculto.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 4 de 10

Uma finalização de compra tem paradas desnecessárias de Tab em títulos, um percurso de foco que salta em desacordo com os campos reordenados por CSS e um div Submit que funciona apenas com mouse. Qual plano corrige os três problemas?
  1. Remover as paradas nos títulos, corrigir a ordem no código-fonte e usar um botão de envio nativo.
  2. Remover as paradas nos títulos, manter a ordem apenas por CSS e usar um botão de envio nativo.
  3. Manter as paradas nos títulos, corrigir a ordem no código-fonte e usar um botão de envio nativo.
  4. Remover as paradas nos títulos, corrigir a ordem no código-fonte e adicionar apenas função e tabindex a Submit.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 5 de 10

Remover o último item do carrinho exclui seu botão Remover em foco. O foco retorna ao início da página; o título do carrinho normalmente não recebe foco. Qual correção preserva uma posição útil sem adicionar outra parada rotineira de Tab?
  1. Atribuir tabindex zero ao título e colocar foco nele após a remoção.
  2. Atribuir tabindex menos um ao título e apenas rolar até ele.
  3. Atribuir tabindex menos um ao título e colocar foco nele após a remoção.
  4. Deixar o título sem tabindex e apenas rolar até ele.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 6 de 10

Com zoom de 400% em uma janela de 1280 px CSS de largura, os parágrafos exigem rolagem lateral e as instruções de retirada desaparecem. Uma tabela de dados larga também exige rolagem horizontal. Qual correção é necessária para o conteúdo comum, respeitando a exceção da tabela?
  1. Manter a rolagem lateral dos parágrafos e da tabela; preservar as instruções de retirada.
  2. Reorganizar os parágrafos e preservar as instruções de retirada; a tabela pode manter duas dimensões.
  3. Reorganizar os parágrafos e preservar a tabela; remover as instruções de retirada para abrir espaço.
  4. Reorganizar os parágrafos e preservar as instruções; cortar a última coluna da tabela para caber.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 7 de 10

Um campo coleta o número de telefone de um cliente, incluindo um possível zero inicial. Qual tipo de entrada é adequado para esses dados sem dar a entender que valida seu formato?
  1. type="number".
  2. type="email".
  3. type="url".
  4. type="tel".
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 8 de 10

Um campo obrigatório para o e-mail do usuário tem apenas um texto de exemplo, sem rótulo, token de preenchimento automático ou indicação visível de que é obrigatório. Qual correção concisa cobre nome, finalidade e obrigatoriedade?
  1. Adicionar um rótulo visível associado que indique a obrigatoriedade, required nativo e autocomplete email.
  2. Adicionar um rótulo visível associado que indique a obrigatoriedade, required nativo e autocomplete username.
  3. Adicionar um rótulo visível associado que indique a obrigatoriedade e autocomplete email, mas sem o atributo required.
  4. Adicionar um rótulo oculto, required nativo e autocomplete email; manter apenas o texto de exemplo visível.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 9 de 10

Um painel contém links e está visualmente oculto por opacidade, enquanto seu elemento pai tem aria-hidden="true". O foco do teclado ainda chega a esses links. Qual correção torna o painel fechado indisponível pelos dois caminhos?
  1. Usar hidden ou display none enquanto o painel estiver fechado.
  2. Manter a opacidade e mover aria-hidden para cada link que recebe foco.
  3. Manter o elemento pai oculto da fala e rotular cada link novamente.
  4. Manter o elemento pai inalterado e dar aos links uma função de apresentação.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Questão 10 de 10

Qual comando do VoiceOver no macOS abre o rotor quando VO significa Control+Option?
  1. VO+Seta para a direita.
  2. Cmd+F5.
  3. VO+U.
  4. Shift+Tab.
Mostrar respostaOcultar resposta

Salve esta aula para ver esta resposta.

Travou em uma questão sua? Ajuda com Tarefas

Termos-Chave

87 Termos-Chave, cada um com sua definição

A

Acessibilidade na web
Acessibilidade na web é a possibilidade de pessoas com deficiência perceberem, compreenderem, navegarem e operarem um site por meio das ferramentas e configurações de acesso que usam.
Um cliente pode concluir um pedido on-line de padaria com teclado, leitor de tela ou visualização ampliada.
Alerta para revisão
Um alerta para revisão é um resultado de uma ferramenta que precisa de inspeção humana antes de decidir se o conteúdo sinalizado cria uma barreira.
Um alerta de possível título leva o autor a verificar se o parágrafo em negrito realmente introduz uma seção.
Alvo do ponteiro
Um alvo do ponteiro é a área interativa ativada por um dispositivo apontador, incluindo o preenchimento clicável; seu tamanho é medido a partir dessa área, não apenas do ícone desenhado dentro dela.
O preenchimento interno faz o botão de um ícone quadrado de 16 px ter 24 px de lado, aumentando a área real que uma pessoa pode pressionar.
Armadilha de teclado
Uma armadilha de teclado é um componente no qual as pessoas podem entrar com teclado, mas do qual não conseguem sair por um método de teclado disponível.
Um mapa incorporado falha no teste quando Tab entra nele, mas nenhuma ação de teclado permite que o cliente continue.
Atributo aria-current
Aria-current identifica o item atual dentro de um conjunto relacionado, com o valor page marcando o link para a página que está sendo visualizada.
Um site de padaria estiliza aria-current="page" para que a mesma marcação controle o destaque visual da navegação.
Atributo aria-disabled
Aria-disabled informa que um controle está indisponível enquanto mantém inalterados sua capacidade de receber foco e seu comportamento de ativação; um script deve bloquear a ação se ela continuar operável.
Um botão de pedido indisponível que recebe foco precisa de um script para bloquear sua ação, além do estado desabilitado anunciado.
Atributo tabindex
Tabindex é um atributo HTML que controla o foco: zero adiciona uma parada de Tab na ordem do código-fonte, enquanto menos um permite foco deliberado sem adicionar uma parada à sequência regular.
O título do carrinho usa tabindex="-1" para que um script possa colocar o foco nele após a remoção do último item.
Audiodescrição
Audiodescrição é a narração de informações visuais importantes ausentes da trilha sonora de um vídeo, feita durante pausas ou em uma versão separada com audiodescrição.
Um vídeo de panificação com audiodescrição informa qual ajuste do forno aparece silenciosamente no visor de temperatura do forno.
axe-core
Axe-core é um motor de teste de acessibilidade usado por ferramentas como axe DevTools e por uma seleção de verificações do Lighthouse.
A pessoa desenvolvedora inspeciona um resultado do axe para localizar o controle cujo valor ARIA não corresponde à sua função.

Á

Árvore de acessibilidade
Árvore de acessibilidade é a representação derivada pelo navegador dos objetos significativos de uma página, que disponibiliza suas funções, nomes, estados e propriedades às tecnologias assistivas.
A árvore mostra um botão nativo Salvar como um botão chamado “Salvar”, mesmo quando sua aparência é personalizada.

B

Barreira que impede a conclusão da tarefa
Uma barreira que impede a conclusão da tarefa é um obstáculo que impede uma pessoa de concluir uma atividade e deve ter prioridade nas correções de acessibilidade.
Uma armadilha de teclado na finalização da compra é corrigida antes de um pequeno problema de apresentação que não impede o pedido.
Botão
Um botão é um controle interativo que executa uma ação, com suporte nativo do HTML para foco e ativação com Enter ou Espaço.
O botão “Mostrar filtros” abre opções na página atual de produtos sem navegar para outro lugar.
Botão de alternância
Um botão de alternância é um botão que mantém um estado ligado ou desligado, comumente representado por aria-pressed enquanto seu rótulo permanece estável.
O botão de alternância Silenciar mantém a palavra “Silenciar” enquanto seu estado pressionado informa se o som está silenciado.

C

Caixa de diálogo modal
Uma caixa de diálogo modal é uma janela de interação que exige atenção enquanto a página ao redor fica indisponível para interação.
Uma caixa de diálogo de horários de funcionamento mantém Tab dentro dela até fechar e depois retorna o foco ao controle que a abriu.
Campo obrigatório
Um campo obrigatório é um controle de formulário que deve ser preenchido, com essa exigência comunicada por um indicador visível e pelo atributo nativo required.
O rótulo diz “Endereço de e-mail (obrigatório)” e o campo de entrada tem required para verificações do navegador.
Contraste não textual
Contraste não textual é a diferença necessária para identificar controles, seus estados ou gráficos significativos em relação às cores adjacentes, normalmente exigindo pelo menos 3:1 no nível AA.
Uma borda de campo necessária para localizá-lo deve alcançar 3:1 em relação ao fundo branco ao lado.
Controle de expansão e recolhimento
Um controle de expansão e recolhimento mostra ou oculta uma região relacionada, com um estado expandido que descreve se seu conteúdo está aberto.
O botão Menu usa aria-expanded enquanto um script também adiciona ou remove hidden de sua lista.
Controle nativo
Um controle nativo é um elemento de interface integrado ao HTML que fornece semântica padrão, comportamento de teclado e estados relevantes.
Um site de padaria usa um campo de caixa de seleção para ofertas por e-mail, mantendo a interação esperada com a tecla Espaço.
Cores forçadas
Cores forçadas é um modo de exibição que usa uma paleta limitada selecionada pelo usuário e pode substituir fundos e remover sombras, por isso as indicações de foco devem permanecer úteis nessas condições.
Um contorno de foco permanece útil em um tema de contraste do Windows após a sombra do botão desaparecer.
Critério de sucesso das WCAG
Um critério de sucesso das WCAG é um requisito de acessibilidade numerado, nomeado e verificável de nível A, AA ou AAA; a conformidade AA inclui todos os critérios A e AA.
A pessoa desenvolvedora verifica 1.4.3 Contraste (Mínimo) ao decidir se o texto corrido atende ao limiar AA.

D

Declaração da área de visualização
Uma declaração da área de visualização é um metadado HTML que controla a área de visualização do layout em dispositivos móveis, normalmente correspondendo à largura do dispositivo com escala inicial de um.
Um site de padaria permite zoom por pinça em vez de adicionar user-scalable=no aos metadados da área de visualização.
Deficiência na visão de cores
Uma deficiência na visão de cores é uma diferença na percepção das cores que pode dificultar a distinção entre algumas delas.
Um site de padaria acrescenta “Aberto agora” ao lado de um ponto verde para que a disponibilidade permaneça clara sem reconhecer o verde.
Descrição acessível
Uma descrição acessível é um texto de apoio associado a um objeto, como uma orientação de campo anunciada após seu nome.
A orientação de senha é associada com aria-describedby, enquanto o rótulo ainda fornece o nome “Senha”.

E

Entrada redundante
Entrada redundante é pedir informações já inseridas no mesmo processo quando elas poderiam ser reaproveitadas ou selecionadas.
Uma caixa de seleção de cobrança reaproveita o endereço de entrega, a menos que uma exceção válida exija que o cliente o insira novamente.
Escopo do cabeçalho
O escopo do cabeçalho é a relação declarada de um cabeçalho de tabela com as células de sua linha ou coluna, permitindo que o navegador associe um valor aos cabeçalhos que explicam seu significado.
Um cabeçalho de sábado tem scope="row" para que seu nome seja associado aos horários de abertura e fechamento dessa linha.
Estado ARIA
Um estado ARIA descreve a condição atual de um objeto e deve ser mantido sincronizado com as mudanças na interface.
Abrir o menu altera a visibilidade do painel e define o estado expandido do botão como true.

F

Foco do teclado
O foco do teclado é a posição atual de interação em uma página, que identifica o elemento que recebe as entradas de teclado relevantes.
Depois que Tab chega a “Adicionar ao carrinho”, pressionar Espaço ativa esse botão em foco, não outro item.
Função
Uma função é o tipo semântico informado para um objeto na árvore de acessibilidade, expressando o que as pessoas devem esperar que ele seja.
Uma função de botão promete um controle acionável, mas atribuir essa função a um div não implementa suas teclas.
Função de apresentação
Uma função de apresentação remove a semântica de um elemento enquanto mantém seu conteúdo disponível; navegadores a ignoram em elementos que podem receber foco, por isso ela não pode desabilitar um link ativo.
Adicionar role="presentation" não pode transformar de forma confiável um link ativo em texto simples nem ocultar seu conteúdo.

G

Gerenciamento do foco
O gerenciamento do foco é o posicionamento deliberado do foco do teclado após uma mudança na interface, como fechar uma caixa de diálogo ou remover um item, para preservar uma posição adequada na tarefa.
Após excluir um item, a página coloca o foco no próximo botão Remover em vez de retornar ao início da página.
Gráficos vetoriais escaláveis (SVG)
SVG é um formato de gráficos vetoriais cujos gráficos significativos embutidos no código precisam de uma função adequada e de um nome acessível.
Um gráfico de avaliação embutido no código usa role="img" e um título que diz “Avaliado com 4 de 5 estrelas”.
Grupo de campos
Um grupo de campos é um contêiner HTML que agrupa controles de formulário relacionados para que sua pergunta compartilhada possa ser fornecida por uma legenda.
Os campos de opção de retirada e entrega por transportadora ficam em um fieldset para a pergunta sobre o método de entrega.

H

Hierarquia de títulos
A hierarquia de títulos é o esquema expresso pelos níveis de título, que relaciona o assunto de uma página a suas seções e subseções aninhadas, independentemente de seus tamanhos visuais de fonte.
“Sabores” é um h2, com “Chocolate” e “Limão” como subseções h3 dentro dessa seção.
HTML semântico
HTML semântico é a marcação escolhida pelo significado e pela finalidade do conteúdo, com a apresentação tratada separadamente pelo CSS.
Um site de padaria usa um título real para “Horário de funcionamento” para que ele apareça na navegação por títulos do leitor de tela.

I

Identificação de erros
A identificação de erros é informar à pessoa, em texto, qual problema de entrada foi detectado, para que a falha seja compreensível sem depender da cor.
O formulário informa “Erro: digite um endereço de e-mail” ao lado do campo de e-mail com falha e preserva as outras entradas.
Idioma da página
O idioma da página é o idioma principal declarado no elemento HTML raiz, ajudando a tecnologia assistiva a usar a pronúncia adequada.
Uma página de padaria em inglês define lang="en-US", enquanto um breve trecho em francês nela tem seu próprio atributo de idioma.
Imagem complexa
Uma imagem complexa é um gráfico cujas informações detalhadas precisam de mais do que um texto alternativo conciso, exigindo uma explicação próxima ou dados equivalentes além de uma identificação curta.
Um gráfico de visitantes tem um alt curto, além de um texto próximo sobre a tendência e uma tabela dos valores mensais.
Imagem de texto
Uma imagem de texto é uma imagem que contém palavras que muitas vezes poderiam ser fornecidas como texto real, que seria redimensionado e reorganizado com mais facilidade.
Um banner de promoção é substituído por texto HTML para que “20% de desconto em todos os pães” permaneça claro quando ampliado.
Imagem decorativa
Uma imagem decorativa acrescenta aparência visual sem contribuir com informação ou função, por isso um elemento img deve ter alt vazio.
Uma borda com padrão de farinha usa alt="" para não interromper a receita quando ela é lida em voz alta.
Imagem funcional
Uma imagem funcional fornece uma ação ou um destino como conteúdo de um controle, por isso sua alternativa nomeia essa função em vez de descrever apenas a aparência da imagem.
Um logotipo que ocupa sozinho o link para a página inicial tem a alternativa “Página inicial da Padaria Folha Verde”.
Indicação apenas por cor
Uma indicação apenas por cor comunica uma distinção exclusivamente pela cor, deixando seu significado indisponível quando essa cor não pode ser reconhecida.
Uma borda vermelha sem texto de erro deixa o cliente tentando adivinhar qual campo precisa de correção e por quê.
Indicação independente de cor
Uma indicação independente de cor transmite uma distinção por meio de palavras, forma, padrão ou outra característica que não exige a identificação de uma cor.
As linhas tracejadas e contínuas de um gráfico permitem distinguir suas séries mesmo em uma visualização em escala de cinza.
Indicador de foco
Um indicador de foco é uma indicação visual que identifica o elemento com foco do teclado, ajudando as pessoas a acompanhar qual controle sua próxima tecla de ativação operará.
Um site de padaria mantém um contorno azul para que os clientes possam ver qual controle será ativado ao pressionar Enter novamente.
Inspeção de acessibilidade
A inspeção de acessibilidade é o exame de funções, nomes e estados computados nas ferramentas do navegador para investigar o que a página informa.
O painel Acessibilidade mostra que uma substituição de nome oculta, e não o texto visível do botão, fornece seu nome.

L

Legenda do grupo de campos
Uma legenda do grupo de campos é o rótulo curto dentro de um fieldset que fornece às opções relacionadas o contexto da pergunta à qual respondem.
“Método de entrega” é ouvido junto com as opções de rádio, enquanto cada opção também tem seu próprio rótulo.
Legendas de diálogo
Legendas de diálogo são transcrições ou traduções sincronizadas das falas para espectadores que conseguem ouvir o áudio, mas precisam de ajuda para compreendê-lo.
Uma pessoa usa legendas de diálogo traduzidas para uma entrevista, mas ainda precisa de legendas descritivas para receber indicações de sons importantes.
Legendas descritivas para surdos e ensurdecidos
Legendas descritivas são textos sincronizados que transmitem falas, sons importantes e a identificação de quem fala quando necessário durante a reprodução de um vídeo, disponibilizando visualmente as informações audíveis.
As legendas descritivas do vídeo de uma aula de panificação identificam um alarme de temporizador e as instruções faladas pelo instrutor.
Limiar de contraste
Um limiar de contraste é uma razão mínima exata para a classe de conteúdo correspondente; o arredondamento exibido não pode fazer uma razão menor atender ao requisito.
Um valor de 2,99:1 não atende a um requisito de 3:1, mesmo quando uma exibição com uma casa decimal mostraria 3,0.
Link
Um link é um elemento de navegação que leva a pessoa a uma página, arquivo ou local, normalmente expresso como uma âncora com href.
O texto “Informações de entrega” leva à página de uma padaria que explica sua área e seus horários de entrega.
Link para pular blocos de conteúdo
Um link para pular blocos de conteúdo é um link acessível por teclado que permite passar por conteúdo repetido da página e seguir em direção ao conteúdo principal.
O primeiro Tab revela “Pular para o conteúdo principal”, permitindo que o cliente evite todo o menu do cabeçalho.
Lista de descrições
Uma lista de descrições é uma lista HTML de termos ou nomes associados a descrições, expressa com os elementos dl, dt e dd.
O glossário de uma padaria associa cada nome de pão à sua explicação usando uma lista de descrições.
Luminância relativa
Luminância relativa é uma medida calculada do nível de luz de uma cor, com preto em 0 e branco em 1 nos cálculos de contraste das WCAG.
A fórmula de contraste coloca a luminância mais clara mais 0,05 acima da luminância mais escura mais 0,05.

M

Mensagem de status
Uma mensagem de status é uma atualização sobre uma ação ou estado que precisa estar disponível para a tecnologia assistiva sem receber foco.
“Adicionado 1 pão ao seu carrinho” é anunciado de forma polida enquanto o cliente permanece no botão Adicionar.
Mudança de contexto
Uma mudança de contexto é uma mudança importante, como navegação ou deslocamento do foco, que pode prejudicar a compreensão da pessoa sobre sua posição.
Um seletor de destino usa um botão Ir para que selecionar um valor não abra outra página inesperadamente.

N

Nome acessível
Um nome acessível é o texto computado que identifica um objeto, derivado de fontes de nome compatíveis, como um rótulo ou texto de botão.
A pessoa desenvolvedora investiga por que um aria-label substituiu as palavras visíveis do botão Cancelar em seu nome anunciado.

O

Obstrução do foco
A obstrução do foco ocorre quando outro conteúdo cobre o componente que recebe foco, dificultando a visualização da posição atual do teclado.
Um banner aderente encobre completamente o botão de pedido, por isso sua rolagem e seu posicionamento precisam ser corrigidos.
Ordem de tabulação
A ordem de tabulação é a sequência de elementos que podem receber foco alcançados por Tab ou Shift+Tab, normalmente baseada em uma ordem significativa do documento.
O formulário de pedido alcança os dados de contato antes das opções de entrega, na mesma sequência em que aparecem.
Ordem no código-fonte
A ordem no código-fonte é a sequência de elementos no documento HTML que normalmente determina a ordem de leitura e de foco, mesmo quando o CSS move esses elementos para posições diferentes.
Um link de entrada movido visualmente pela ordenação flex ainda recebe foco em sua posição original no HTML.

P

Prevenção de erros
A prevenção de erros protege envios com consequências por meio de reversão, verificação com correção ou revisão e confirmação com correção, em vez de apenas informar um erro depois.
Antes de fazer o pedido, o cliente pode revisar quantidades e alterar um endereço de entrega incorreto.
Pseudoclasse :focus-visible
Focus-visible é uma pseudoclasse CSS que corresponde ao elemento quando o navegador considera que o foco deve ser indicado visualmente à pessoa.
A folha de estilo usa :focus-visible para um contorno destacado no teclado, enquanto cliques comuns do mouse em botões podem não mostrar contorno.

R

Razão de contraste
Uma razão de contraste compara a luminância relativa de duas cores em uma escala de 1:1 a 21:1; o mínimo exigido depende de o par servir a texto normal, texto em tamanho grande ou informação não textual.
Uma ferramenta informa 4,48:1 para texto cinza sobre branco, abaixo do mínimo AA para texto normal.
Refluxo
Refluxo é a reorganização do conteúdo para uma visualização estreita sem perda de informação ou necessidade de rolar texto comum em duas direções; alguns conteúdos bidimensionais têm exceções.
A navegação é empilhada acima do formulário de pedido em vez de desaparecer quando a largura disponível diminui.
Região de referência
Uma região de referência é uma área da página identificada pelo código que a tecnologia assistiva pode usar como destino de navegação, como o conteúdo principal ou uma região de navegação nomeada.
Uma pessoa que usa leitor de tela salta diretamente para o conteúdo principal de um site de padaria em vez de ler seu cabeçalho novamente.
Região inerte
Uma região inerte é conteúdo tornado indisponível para interação, impedindo que seus descendentes atuem como controles ativos; a abertura modal nativa torna a página de fundo inerte.
Uma caixa de diálogo modal aberta com showModal() torna a página de fundo inerte enquanto a caixa está ativa.
Região viva
Uma região viva é uma região da página cujo conteúdo alterado pode ser anunciado pela tecnologia assistiva sem mover o foco do teclado.
Um parágrafo de status do carrinho inicialmente vazio recebe novo texto depois que a pessoa pressiona um botão Adicionar.
Repetição do teste
A repetição do teste consiste em percorrer novamente o caminho de acesso que falhou após uma correção para verificar se a barreira original foi resolvida.
Após corrigir um rótulo, a pessoa responsável pelo teste coloca o foco no mesmo campo com o leitor de tela que primeiro revelou o nome ausente.
Resumo de erros
Um resumo de erros é um relatório agrupado de falhas de formulário, que normalmente recebe foco após o envio e contém links para os controles afetados.
O título “Há 2 problemas com seu pedido” introduz links que levam as pessoas aos campos com falha.
Rotor
O rotor é uma ferramenta de navegação do VoiceOver para escolher categorias como títulos, links, regiões de referência e controles de formulário.
No macOS, VO+U abre o rotor para que a pessoa responsável pelo teste possa inspecionar os títulos disponíveis como destinos na página.
Rótulo de campo de formulário
Um rótulo de campo de formulário é um texto associado a um controle que identifica sua finalidade e normalmente fornece seu nome acessível; uma associação HTML correta também permite colocar o foco no campo ao clicar no rótulo.
Clicar em “Endereço de e-mail” coloca o foco no campo correspondente porque o valor for do rótulo corresponde ao ID do campo.
Rótulo no nome
Rótulo no nome é o requisito de que o nome acessível de um controle inclua seu texto visível para que as pessoas possam operá-lo usando essas palavras.
Um botão Confirmar pedido mantém “Confirmar pedido” em seu nome computado para clientes que usam controle por voz.

S

Substituição do espaçamento do texto pelo usuário
A substituição do espaçamento do texto pelo usuário é um estilo que aumenta o espaçamento de linhas, parágrafos, letras ou palavras e que o conteúdo deve suportar sem perdas.
O teste revela um cartão com altura fixa que corta sua última linha quando o espaçamento entre parágrafos aumenta.
Sugestão de correção de erro
Uma sugestão de correção de erro é uma correção conhecida e útil oferecida após uma falha de entrada detectada, quando a segurança e a finalidade do formulário permitem.
A mensagem fornece o exemplo “nome@example.com” em vez de parar na expressão pouco útil “Entrada inválida”.

T

Tecnologia assistiva
Tecnologia assistiva é uma ferramenta que ajuda uma pessoa a usar conteúdo digital, como leitor de tela, ampliador ou dispositivo acionador.
O controle por voz permite que um cliente diga “clique em Pesquisar” para operar um controle cujo nome corresponde ao rótulo.
Teste manual de acessibilidade
Um teste manual de acessibilidade usa operação e julgamento humanos para avaliar significado e comportamento que regras automatizadas não conseguem avaliar completamente.
A pessoa responsável pelo teste faz um pedido por teclado e verifica para onde o foco retorna após fechar a caixa de diálogo de revisão.
Texto alternativo
Texto alternativo é a alternativa textual de uma imagem em seu atributo alt, que comunica informações úteis ou sua função no contexto; imagens puramente decorativas recebem um valor vazio.
A alternativa de uma foto de pão de fermentação natural descreve sua crosta porque essa característica importa na página do produto.
Texto de exemplo do campo
Um texto de exemplo do campo é uma orientação exibida enquanto o campo está vazio, que desaparece durante a digitação e não fornece um rótulo visível permanente.
O exemplo de endereço fica no texto de ajuda próximo para permanecer disponível depois que o cliente começa a digitar.
Texto em tamanho grande
Texto em tamanho grande para contraste das WCAG tem pelo menos 24 px CSS com peso normal ou cerca de 18,7 px CSS em negrito, qualificando-se para 3:1 no nível AA; ser um título, por si só, não estabelece esse tamanho.
Um título de 22 px com peso normal ainda usa o mínimo de 4,5:1 para texto normal, apesar de ser um título.
Texto visualmente oculto
Texto visualmente oculto é texto escondido da visualização comum por CSS enquanto permanece na árvore de acessibilidade, diferentemente de texto removido com display none ou visibility hidden.
Um botão compacto de exclusão mantém as palavras “Excluir item” disponíveis para leitores de tela sem exibi-las.
Título da página
O título da página é o texto no elemento title do HTML que identifica uma página em abas e favoritos do navegador e em anúncios de leitores de tela.
Em um site de padaria, o título “Escolha um bolo: Padaria Folha Verde” distingue a aba de pedidos da aba de horários de funcionamento.
Título da tabela
O título da tabela é o texto do elemento HTML caption que identifica o assunto ou a finalidade de uma tabela de dados.
“Horário de funcionamento da loja” nomeia a tabela antes que quem ouve navegue por suas células de dias e horários.
Token de preenchimento automático
Um token de preenchimento automático é um valor padronizado de atributo que identifica a finalidade da entrada para preenchimento automático do navegador, gerenciadores de senhas e ferramentas assistivas.
O campo de senha existente usa autocomplete="current-password" para que um gerenciador de senhas possa reconhecê-lo.
Transcrição
Uma transcrição é um relato textual separado de áudio gravado, que disponibiliza as informações faladas sem que seja necessário ouvir a gravação.
Um podcast da padaria oferece uma transcrição legível ao lado do reprodutor de áudio para pessoas que não conseguem ouvi-lo.

U

Unidade rem
Rem é uma unidade de comprimento CSS relativa ao tamanho da fonte do elemento raiz, permitindo que os tamanhos de texto sigam essa configuração base.
O texto 1rem do corpo cresce quando o usuário aumenta o tamanho de fonte padrão do navegador.

V

Verificação automatizada de acessibilidade
Uma verificação automatizada de acessibilidade aplica regras testáveis por máquina a um estado renderizado da página; ela pode encontrar falhas detectáveis, mas não pode determinar o significado nem avaliar todos os requisitos de interação.
Uma análise automática encontra um campo de entrada de boletim informativo sem rótulo, mas ainda precisa de uma pessoa para avaliar se as alternativas de imagem são úteis.

W

WAI-ARIA
WAI-ARIA é uma especificação do W3C de funções, estados e propriedades que acrescentam ou modificam informações comunicadas às tecnologias assistivas.
O controle de expansão e recolhimento usa ARIA para seu estado expandido, enquanto um botão nativo fornece ativação por teclado.
WebVTT
WebVTT é um formato de faixa de texto que associa tempos de entradas a texto, permitindo que legendas descritivas apareçam nos momentos adequados da reprodução.
Um arquivo de legendas descritivas em inglês fornece uma entrada temporizada para o som de uma batedeira antes da próxima fala.

Z

Zoom do navegador
O zoom do navegador amplia ou reduz a página exibida, alterando o espaço efetivo de layout e o tamanho de seu conteúdo.
Com zoom de 400%, uma janela de 1280 px CSS de largura fornece uma largura efetiva de conteúdo de 320 px CSS.

Sobre esta aula

Por StudeliRelatar um erro

Crie seus próprios Materiais de Estudo

Transforme suas anotações, slides e documentos em Guias de Estudo, Questões de Prática, Flashcards e mais 6 ferramentas.

Começar