Sobre este problema HTML
O atributo step especifica a granularidade à qual o valor de um input deve aderir. Ele controla o incremento quando um utilizador clica nos botões de seta para cima/baixo num input numérico, move um slider num input de intervalo, ou ajusta inputs de data e hora. O navegador também usa este valor durante a validação de restrições para determinar quais valores são considerados válidos com base na base de passo (normalmente o valor min ou o padrão do input).
Quando a especificação HTML define o atributo step, requer que o valor seja um número de ponto flutuante válido maior que zero. Um valor de "0" é explicitamente inválido porque um passo de zero significa nenhum incremento - é logicamente sem sentido. Não pode percorrer valores em incrementos de nada. O validador W3C assinala isto como um erro porque "0" falha o requisito de ser um número positivo.
Porque isto importa
-
Conformidade com padrões: O padrão vivo HTML WHATWG requer explicitamente que
stepseja analisado como um número maior que zero. Um valor de"0"viola esta regra. -
Comportamento do navegador: Embora os navegadores possam não falhar com
step="0", o comportamento torna-se imprevisível. Os botões de seta podem parar de funcionar, e a validação de formulário pode não funcionar como esperado. -
Acessibilidade: As tecnologias assistivas dependem de valores
stepcorretos para comunicar intervalos de input válidos aos utilizadores. Um passo inválido pode levar a uma experiência confusa.
Como corrigir
Escolha a correção apropriada dependendo da sua intenção:
-
Se quiser incrementos específicos (ex: números inteiros, cêntimos, décimas), defina
steppara o intervalo desejado como"1","0.01", ou"0.1". -
Se quiser permitir qualquer valor sem restrição de passo, use a palavra-chave especial
step="any". Isto diz ao navegador que não há passo implícito e qualquer valor de ponto flutuante é aceitável. -
Se não precisar do atributo de todo, simplesmente remova-o. Cada tipo de input tem um valor de passo padrão (ex:
1paratype="number").
Exemplos
❌ Inválido: step definido para zero
<label for="price">Preço:</label>
<input id="price" name="price" type="number" step="0" min="0">
Isto desencadeia o erro de validação porque "0" não é um número de ponto flutuante positivo válido.
✅ Corrigido: usando um valor de passo específico
Se quiser que o input aceite valores em incrementos de um cêntimo:
<label for="price">Preço:</label>
<input id="price" name="price" type="number" step="0.01" min="0">
Valores válidos incluiriam 0, 0.01, 0.02, 1.50, 99.99, e assim por diante.
✅ Corrigido: usando step="any" para precisão irrestrita
Se quiser permitir qualquer valor numérico sem restrições de passo:
<label for="price">Preço:</label>
<input id="price" name="price" type="number" step="any" min="0">
Isto permite qualquer valor de ponto flutuante, como 3.14159 ou 0.007.
✅ Corrigido: usando um passo de número inteiro com um mínimo não-zero
<label for="quantity">Quantidade:</label>
<input id="quantity" name="quantity" type="number" step="2" min="1.3">
Com step="2" e min="1.3", valores válidos incluem 1.3, 3.3, 5.3, 7.3, e assim por diante. A base de passo é 1.3, e cada valor válido é um múltiplo par de 2 afastado dele.
✅ Corrigido: removendo o atributo completamente
Se o comportamento de passo padrão é suficiente, simplesmente omita o atributo:
<label for="amount">Quantidade:</label>
<input id="amount" name="amount" type="number" min="0">
O step padrão para type="number" é 1, então valores válidos são números inteiros (0, 1, 2, etc.).
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: