Skip to main content
Validação HTML

Valor inválido “0” para o atributo “step” no elemento “input”: Zero não é um número de ponto flutuante positivo válido.

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 step seja 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 step corretos 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:

  1. Se quiser incrementos específicos (ex: números inteiros, cêntimos, décimas), defina step para o intervalo desejado como "1", "0.01", ou "0.1".
  2. 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.
  3. Se não precisar do atributo de todo, simplesmente remova-o. Cada tipo de input tem um valor de passo padrão (ex: 1 para type="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.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.