A tag input e seus tipos
<input> é um campo de formulário, e o seu atributo type decide o tipo. A mesma tag cria uma caixa de texto, um controle deslizante, um seletor de data ou um seletor de cor. Teste cada campo abaixo e aperte Submit para ver o que o formulário envia:
<input> é um elemento vazio, então não tem tag de fechamento. O seu name é a chave com que o valor é enviado, e value é o valor inicial. Um type ausente ou digitado errado gera um campo de texto simples.
Todos os tipos de input do HTML
type | O que é | Observações |
|---|---|---|
text | Uma linha de texto | O padrão |
password | Texto mostrado como pontos | Não é criptografado por si só; envie por HTTPS |
email | Um endereço de e-mail | Valida o formato; tecla @ no teclado do celular |
url | Um endereço web | Precisa começar com um esquema como https:// |
tel | Um número de telefone | Teclado numérico no celular, sem verificação de formato |
search | Uma caixa de busca | Muitas vezes mostra um botão de limpar |
number | Um número | Botões de incremento, min, max, step |
range | Um controle deslizante | Impreciso de propósito; o valor é um número |
date | Uma data | O valor é YYYY-MM-DD |
time | Uma hora do dia | O valor é HH:MM (24 horas) |
datetime-local | Data e hora, sem fuso horário | O valor é YYYY-MM-DDTHH:MM |
month | Um ano e mês | Não é suportado em todos os navegadores |
week | Um ano e número da semana | Não é suportado em todos os navegadores |
color | Um seletor de cor | O valor é #rrggbb em minúsculas |
checkbox | Uma caixa liga e desliga | Veja checkbox no HTML |
radio | Uma escolha dentro de um grupo | Veja radio button no HTML |
file | Um seletor de arquivo | accept, multiple |
hidden | Um valor enviado, mas não mostrado | Para IDs e tokens |
submit | Um botão de envio | <button type="submit"> é mais flexível |
reset | Um botão de limpar | Raramente é uma boa ideia |
button | Um botão que não faz nada sozinho | Para JavaScript |
image | Um botão de envio desenhado como imagem | Também envia as coordenadas do clique |
Tipos de texto e teclados de celular
email, url, tel, search e text parecem todos uma caixa de texto no computador. A diferença está na validação e, no celular, no teclado que abre. A borda neste exemplo fica verde ou vermelha conforme o navegador avalia o valor:
ada@exampleé um e-mail válido para o navegador: ele só verifica se há texto,@e um domínio, não se o domínio tem ponto. A verificação de verdade acontece no servidor.example.comnão é umaurlválida, porque não tem esquema.https://example.comé.telaceita qualquer coisa. Os formatos de telefone variam demais entre países, então não há verificação nativa; adicione umpatternse precisar.inputmode="numeric"pede ao celular um teclado de dígitos sem os problemas detype="number", e por isso é a escolha certa para CEP, códigos de uso único e números de cartão.
number e range
Os dois aceitam min, max e step. number é para valores exatos; range é um controle deslizante para valores em que o número exato importa menos. Um range não mostra número, então combine-o com um <output>:
step vale 1 por padrão em number, então um campo de preço sem step="0.01" rejeita 4.99 quando o formulário é enviado. No JavaScript, input.value é sempre uma string; use input.valueAsNumber para obter um número.
Datas e horas
Os tipos de data e hora abrem o seletor próprio do navegador. O que o usuário vê segue a sua localidade (09/24/2026, 24.09.2026), mas o valor tem sempre o mesmo formato fixo:
Esse formato fixo é o que o servidor recebe e o que o JavaScript lê, então você nunca precisa interpretar "24.09.2026". min e max usam o mesmo formato. datetime-local não tem fuso horário: se isso importa, converta no servidor usando o fuso do usuário.
color e file
accept="image/*" limita o seletor de arquivos a imagens (e oferece a câmera no celular); ele também aceita extensões, como accept=".pdf,.docx". É só uma dica para o seletor, então verifique o tipo do arquivo no servidor. multiple permite vários arquivos. Um upload de verdade também precisa de method="post" e enctype="multipart/form-data" no formulário.
Sugestões com datalist
Um <datalist> dá a um campo de texto uma lista de sugestões e ainda aceita qualquer valor. Ligue os dois com o atributo list:
Digite "ja" no campo para ver as sugestões correspondentes. Ao contrário de um select, o usuário pode digitar um valor que não está na lista.
Atributos que funcionam nos inputs
| Atributo | Faz |
|---|---|
name | A chave com que o valor é enviado |
value | O valor inicial |
placeholder | Uma dica mostrada enquanto o campo está vazio (não é um label) |
required | Precisa ser preenchido antes do envio |
disabled | Não pode ser usado e não é enviado |
readonly | Não pode ser editado, mas é enviado |
autocomplete | O que preencher automaticamente: email, name, current-password, one-time-code, off |
min, max, step | Limites para números, ranges, datas e horas |
minlength, maxlength | Limites de tamanho para os tipos de texto |
pattern | Uma expressão regular que o valor inteiro precisa satisfazer |
inputmode | Qual teclado mostrar no celular: numeric, decimal, email, tel, url |
list | O id de um <datalist> |
multiple | Vários valores, para email e file |
accept | Tipos de arquivo para file |
Erros comuns
type="number"para telefones, CEPs ou números de cartão. Não são quantidades. Useteloutextcominputmode="numeric".- Um campo de preço sem
step="0.01". Valores decimais falham na validação. - Usar
placeholdercomo label. Ele some assim que o usuário digita. - Contar com
acceptoutype="email"para segurança. São conveniências; o servidor verifica de novo. type="month"outype="week"sem alternativa. Alguns navegadores mostram um campo de texto simples.- Uma tag de fechamento
</input>.<input>é vazio.
Perguntas frequentes
Quantos tipos de input existem no HTML?
22: button, checkbox, color, date, datetime-local, email, file, hidden, image, month, number, password, radio, range, reset, search, submit, tel, text, time, url e week. Um tipo desconhecido ou ausente se comporta como text.
Qual é o tipo de input padrão no HTML?
text. Um <input> sem type, ou com um tipo que o navegador não conhece, é um campo de texto de uma linha.
Devo usar type="number" para telefone ou CEP?
Não. number é para quantidades: ele adiciona botões de incremento e rejeita o +, os espaços e os hífens que os telefones têm. Use type="tel" para telefones e type="text" com inputmode="numeric" para códigos como CEP e número de cartão.
Qual formato o input type date usa?
O valor é sempre YYYY-MM-DD, como 2026-09-24, seja qual for o formato que o usuário vê na tela. A exibição segue a localidade do usuário; o valor enviado e lido pelo script não.
A tag input precisa de tag de fechamento?
Não. <input> é um elemento vazio: escreva <input type="text" name="city">. Um </input> de fechamento é inválido, e a barra de auto fechamento em <input /> é permitida, mas não faz nada.