edubun
Português

Rótulos de formulário

Uma caixa de texto ao lado da palavra "Email" não está rotulada até o elemento label ser ligado a ela; até lá, um leitor de tela pode dizer só "editar texto".

Todo campo precisa de um nome

Quando o foco cai num campo de formulário, um leitor de tela anuncia o rótulo, o tipo e o estado dele: "Email, editar texto, obrigatório". O rótulo vem de um elemento label ligado ao campo. Há dois jeitos de ligá-los. Dê ao input um id e ao label um for correspondente, ou ponha o input dentro do label. De qualquer jeito, clicar no texto do rótulo também leva o foco para o campo, o que deixa caixas de seleção e botões de opção pequenos muito mais fáceis de acertar.

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

<label>
  <input type="checkbox" name="news"> Send me the weekly menu
</label>
Dois jeitos de rotular um campo: for e id, ou envolvendo.

O critério de sucesso 3.3.2 Rótulos ou Instruções da WCAG 2.2, de nível A, pede rótulos ou instruções sempre que o conteúdo exige entrada do usuário, e o 1.3.1 Informações e Relações pede que a ligação entre rótulo e campo exista no código, não só na tela. Um parágrafo que por acaso fica acima de um input só está perto visualmente; nada diz à tecnologia assistiva que os dois andam juntos.

Placeholders não são rótulos

O atributo placeholder mostra um texto de dica cinza dentro de um campo vazio. Dá vontade de usá-lo no lugar de um rótulo, e muitos formulários de cadastro fazem isso. O problema é que ele some assim que você digita, então não dá para conferir para que servia o campo, e em geral ele é pálido o bastante para falhar nas regras de contraste da unidade anterior. Use um rótulo visível e, se quiser, também um placeholder com um valor de exemplo.

Grupos, propósito e erros

Botões de opção e caixas de seleção relacionadas também precisam de um rótulo de grupo. Envolva-os num fieldset e ponha a pergunta no legend dele, para que um leitor de tela diga "Tamanho, grupo" antes de "Pequeno, botão de opção, 1 de 3". Para dados pessoais, o atributo autocomplete diz ao navegador para que serve um campo, usando nomes do padrão HTML como name, email, tel, new-password e one-time-code. O critério 1.3.5 Identificar o Propósito de Entrada, de nível AA, pede exatamente isso, porque permite que os navegadores preencham os campos e que algumas ferramentas mostrem ícones conhecidos ao lado deles.

Quando algo dá errado, diga isso em palavras. O critério 3.3.1 Identificação do Erro pede que um erro de entrada seja identificado e descrito ao usuário em texto, e não só deixando a borda vermelha. A WCAG 2.2 também acrescentou o 3.3.7 Entrada Redundante: uma informação que a pessoa já digitou no mesmo processo deve ser preenchida de novo para ela ou oferecida para seleção, em vez de ser digitada duas vezes. E o 3.3.8 Autenticação Acessível (Mínimo), de nível AA, diz que uma etapa de login não pode depender de lembrar ou transcrever algo, a menos que haja ajuda disponível; deixar os gerenciadores de senhas preencherem o campo e permitir colar contam como essa ajuda.

Diga o que é preciso antes de a pessoa começar

As instruções vêm antes dos campos que descrevem, e não numa mensagem de erro depois que alguém falhou. Se uma senha precisa ter pelo menos 15 caracteres, diga isso ao lado do rótulo. Marque os campos obrigatórios no texto do rótulo, por exemplo com a palavra "obrigatório", e acrescente o atributo required para que o navegador também o anuncie. Quando uma mensagem de erro aparecer, mantenha-a ao lado do seu campo e ligue os dois com aria-describedby apontando para o id da mensagem; assim o leitor de tela lê a mensagem quando o campo recebe o foco. Por fim, leve o foco para o primeiro campo com problema, ou para um resumo dos erros no topo, para que quem usa teclado não fique no fim de um formulário comprido sem saber o que aconteceu.

label for="x"Liga o rótulo ao campo com id="x"
WCAG 3.3.2Rótulos ou Instruções (A)
WCAG 1.3.5Identificar o Propósito de Entrada (AA): autocomplete
fieldset + legendRótulo de grupo para botões de opção e caixas de seleção
WCAG 3.3.7Entrada Redundante (A), novo na 2.2
WCAG 3.3.8Autenticação Acessível (Mínimo), AA: permita colar e gerenciadores de senhas
Pontos-chave
  • Ligue cada campo a um rótulo com for e id, ou envolvendo-o.
  • Um placeholder some e muitas vezes é pálido demais; ele não é um rótulo.
  • Agrupe botões de opção com fieldset e legend; use autocomplete para dados pessoais.
  • Descreva os erros em texto; não obrigue as pessoas a redigitar ou decorar para fazer login.
  1. Qual atributo do label aponta para o id do seu input?
  2. Por que um placeholder não basta como rótulo?
    • Ele some quando você digita e muitas vezes é pálido demais
    • Os navegadores o ignoram
    • Não é permitido em HTML
    • Só funciona no celular
  3. O que mais acontece quando um rótulo é ligado a uma caixa de seleção?
    • Clicar no texto do rótulo marca a caixa
    • A caixa fica maior
    • O formulário é enviado
    • Nada mais
  4. Quais elementos dão a pergunta de um grupo de botões de opção?
    • fieldset e legend
    • div e span
    • form e button
    • ul e li
  5. Qual valor de autocomplete um campo de email deve usar?
  6. Qual critério pede que os campos de dados pessoais identifiquem o seu propósito?
    • 1.3.5 Identificar o Propósito de Entrada
    • 1.1.1 Conteúdo Não Textual
    • 2.4.7 Foco Visível
    • 1.4.1 Uso de Cores
  7. Um erro é mostrado só por uma borda vermelha. O que falta?
    • Uma descrição do erro em texto
    • Um vermelho mais vivo
    • Um som
    • Uma borda maior
  8. Um formulário de login bloqueia colar no campo de senha. Contra qual critério da WCAG 2.2 isso vai?
    • 3.3.8 Autenticação Acessível (Mínimo)
    • 2.4.6 Cabeçalhos e Rótulos
    • 1.4.3 Contraste (Mínimo)
    • 2.5.8 Tamanho do Alvo
  9. Um checkout pede o endereço de entrega de novo na etapa seguinte. Qual critério ajuda?
    • 3.3.7 Entrada Redundante
    • 2.1.1 Teclado
    • 1.3.1 Informações e Relações
    • 2.4.3 Ordem do Foco
  10. Qual é um campo rotulado corretamente?
    • City

Fontes deste curso (9)
  • W3C, Web Content Accessibility Guidelines (WCAG) 2.2, W3C Recommendation first published 5 October 2023, current edition 12 December 2024 (w3.org/TR/WCAG22/, checked 2026-10-17, rechecked 2026-10-18)
  • W3C WAI, What's new in WCAG 2.2 (w3.org/WAI/standards-guidelines/wcag/new-in-22/, checked 2026-10-17)
  • W3C WAI, Images tutorial and alt decision tree (w3.org/WAI/tutorials/images/decision-tree/, checked 2026-10-17)
  • W3C, Using ARIA (w3.org/TR/using-aria/, Discontinued Draft 24 February 2026, rules 1 to 4, checked 2026-10-17)
  • W3C WAI-ARIA Authoring Practices Guide, Read Me First, "No ARIA is better than bad ARIA" (w3.org/WAI/ARIA/apg/practices/read-me-first/, checked 2026-10-17)
  • MDN Web Docs, tabindex (developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/tabindex, checked 2026-10-17)
  • MDN, Heading elements, accessibility notes (developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/Heading_Elements, checked 2026-10-17)
  • MDN, autocomplete attribute (developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/autocomplete, checked 2026-10-17)
  • Every code exercise was checked with a Playwright probe against a reference solution.

Data de verificação: 2026-10-17