Sobre este problema HTML
O atributo id identifica exclusivamente um elemento dentro de um documento. De acordo com a especificação WHATWG HTML living standard, se o atributo id for especificado, o seu valor deve ser não vazio e não deve conter caracteres de espaço em branco ASCII. O atributo em si é opcional — não precisa de o incluir — mas quando o faz, deve ter um valor válido. Definir id="" viola esta regra porque a string vazia não é um identificador válido.
Este problema ocorre frequentemente quando o código é gerado dinamicamente (por exemplo, por um motor de templates ou framework JavaScript) e a variável destinada a preencher o valor id resolve-se numa string vazia. Também pode acontecer quando os programadores adicionam o atributo como um placeholder e se esquecem de o preencher.
Por que isto é importante
-
Conformidade com normas: Um
idvazio viola a especificação HTML, tornando o seu documento inválido. -
Acessibilidade: Tecnologias assistivas como leitores de ecrã dependem dos atributos
idpara associar elementos<label>com controlos de formulário. Umidvazio quebra esta associação, tornando os formulários mais difíceis de usar para pessoas que dependem destas ferramentas. -
JavaScript e CSS: Métodos como
document.getElementById("")e seletores como#(sem identificador) não funcionarão como esperado. Umidvazio pode causar problemas subtis e difíceis de depurar nos seus scripts e estilos. -
Comportamento do browser: Embora os browsers sejam geralmente tolerantes, um
idvazio leva a comportamentos indefinidos. Diferentes browsers podem lidar com isto de forma inconsistente.
Como corrigir
-
Atribua um valor significativo: Dê ao
idum valor descritivo e único que identifique o propósito do elemento (por exemplo,id="country-select"). -
Remova o atributo: Se não precisar do
id, simplesmente remova-o do elemento completamente. -
Corrija a geração dinâmica: Se um motor de templates ou framework estiver a produzir o valor vazio, adicione uma verificação condicional para produzir um
idválido ou omitir o atributo completamente.
Exemplos
❌ Incorreto: atributo id vazio
<label for="country">Country</label>
<select id="" name="country">
<option value="us">United States</option>
<option value="ca">Canada</option>
</select>
Isto desencadeia o erro de validação porque id="" é uma string vazia.
✅ Correto: valor id significativo
<label for="country">Country</label>
<select id="country" name="country">
<option value="us">United States</option>
<option value="ca">Canada</option>
</select>
O id agora tem um valor válido e não vazio, e o atributo for do elemento <label> refere-o corretamente.
✅ Correto: atributo id removido completamente
<label>
Country
<select name="country">
<option value="us">United States</option>
<option value="ca">Canada</option>
</select>
</label>
Se não precisar do id, remova-o. Aqui, o <label> envolve diretamente o <select>, pelo que a associação for/id não é necessária — o label implícito funciona igualmente bem.
Encontre problemas como este automaticamente
O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.