Sobre este problema HTML
O atributo for num elemento <label> indica ao navegador qual controlo de formulário a label descreve. Quando um utilizador clica ou toca na label, o navegador transfere o foco para o controlo associado. Para que isto funcione, o valor de for deve corresponder exatamente ao id de um elemento de formulário como <input>, <textarea>, <select>, ou <button>.
Uma string vazia ("") não é um ID válido de acordo com a especificação HTML. O padrão HTML do WHATWG exige que um valor de atributo id deve conter pelo menos um caráter e não deve conter espaços em branco ASCII. Uma vez que nenhum elemento pode ter um id de string vazia, uma <label> com for="" nunca pode referenciar algo com sucesso, tornando-se tanto markup inválido como uma associação quebrada.
Porque isto é importante
Acessibilidade: Os leitores de ecrã dependem do emparelhamento for/id para anunciar para que serve um controlo de formulário. Uma label com um atributo for vazio não cria associação programática, o que significa que os utilizadores de tecnologia assistiva podem não saber o que um campo está a pedir. Isto impacta diretamente a conformidade WCAG.
Usabilidade: Uma label adequadamente associada expande a área clicável do seu controlo de formulário. Por exemplo, clicar numa label associada a uma checkbox irá alternar a checkbox. Um atributo for vazio quebra este comportamento.
Conformidade com padrões: O validador W3C sinaliza isto porque viola a especificação HTML. Manter o markup válido ajuda a garantir comportamento consistente entre navegadores e torna o seu código à prova de futuro.
Como corrigir
Tem três opções:
-
Definir
forpara umidválido: Dê ao controlo de formulário associado umidúnico e referencie-o no atributoforda label. -
Remover
fore usar associação implícita: Envolva o controlo de formulário dentro do elemento<label>. Isto cria uma associação implícita sem necessitar deforouid. -
Remover o atributo
for: Se a label é puramente decorativa ou não pretende ser associada a um controlo, simplesmente remova o atributoforvazio.
Exemplos
❌ Atributo for vazio (desencadeia o erro)
<label for="">Username:</label>
<input type="text" name="username">
A label não tem associação significativa com o input porque for="" não é uma referência válida.
✅ Correção: Use um par for/id válido
<label for="username">Username:</label>
<input type="text" id="username" name="username">
O for="username" agora corresponde ao id="username" no input, criando uma associação explícita.
✅ Correção: Use associação implícita através do aninhamento
<label>
Username:
<input type="text" name="username">
</label>
Envolver o input dentro da <label> cria uma associação implícita. Não são necessários atributos for ou id.
❌ Múltiplas labels com atributos for vazios
<form>
<label for="">Email:</label>
<input type="email" name="email">
<label for="">Subscribe to newsletter</label>
<input type="checkbox" name="subscribe">
</form>
✅ Corrigido com associações adequadas
<form>
<label for="email">Email:</label>
<input type="email" id="email" name="email">
<label for="subscribe">Subscribe to newsletter</label>
<input type="checkbox" id="subscribe" name="subscribe">
</form>
Cada id deve ser único dentro do documento, e cada atributo for deve referenciar exatamente um id. Se as suas labels são geradas por uma framework ou CMS com valores for vazios, verifique a configuração do template ou componente para garantir que valores id adequados estão a ser produzidos.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.
Saiba mais: