Formulários em HTML: Um Guia para Iniciantes
Aprenda a criar formulários HTML interativos com tipos de entrada, rótulos, botões e validação básica. Domine a acessibilidade e melhores práticas de formulários.
Aprenda a criar formulários HTML interativos com tipos de entrada, rótulos, botões e validação básica. Domine a acessibilidade e melhores práticas de formulários.
<form>
?O elemento <form>
é um contêiner que envolve todos os controles de formulário e define como os dados do formulário devem ser processados. Ele atua como a base para coletar entrada do usuário e enviá-la para um servidor.
<form action="/submit" method="POST">
<!-- Controles do formulário vão aqui -->
<input type="text" name="username" required>
<button type="submit">Enviar</button>
</form>
action
: Especifica para onde enviar os dados do formulário quando submetidomethod
: Define como enviar os dados (GET ou POST)enctype
: Especifica como os dados do formulário devem ser codificados (importante para uploads de arquivos)<form action="/contact" method="POST" enctype="multipart/form-data">
<!-- Formulário para uploads de arquivos -->
</form>
O HTML5 introduziu numerosos tipos de entrada que proporcionam melhor experiência do usuário e validação integrada. Vamos explorar os mais comumente usados:
<!-- Entrada de texto básica -->
<input type="text" name="fullname" placeholder="Digite seu nome completo">
<!-- Entrada de senha (oculta caracteres) -->
<input type="password" name="password" placeholder="Digite a senha">
<!-- Entrada de email (com validação integrada) -->
<input type="email" name="email" placeholder="usuario@exemplo.com">
<!-- Entrada de número de telefone -->
<input type="tel" name="phone" placeholder="+55 (11) 99999-9999">
<!-- Entrada de URL -->
<input type="url" name="website" placeholder="https://exemplo.com">
<!-- Entrada de número com valores min/max -->
<input type="number" name="age" min="18" max="100" step="1">
<!-- Seletor de data -->
<input type="date" name="birthdate">
<!-- Seletor de hora -->
<input type="time" name="appointment">
<!-- Seletor de cor -->
<input type="color" name="theme-color" value="#ff0000">
<!-- Upload de arquivo -->
<input type="file" name="resume" accept=".pdf,.doc,.docx">
<!-- Botões de rádio (seleção única) -->
<input type="radio" name="gender" value="male" id="male">
<input type="radio" name="gender" value="female" id="female">
<!-- Caixas de seleção (múltiplas seleções) -->
<input type="checkbox" name="interests" value="coding" id="coding">
<input type="checkbox" name="interests" value="design" id="design">
<!-- Controle deslizante -->
<input type="range" name="satisfaction" min="1" max="10" value="5">
Os rótulos são cruciais para a acessibilidade de formulários. Eles fornecem contexto para leitores de tela e melhoram a usabilidade para todos os usuários.
<!-- Método 1: Usando atributo 'for' -->
<label for="username">Nome de usuário:</label>
<input type="text" id="username" name="username" required>
<!-- Método 2: Envolvendo entrada dentro do rótulo -->
<label>
Endereço de Email:
<input type="email" name="email" required>
</label>
<form action="/register" method="POST">
<fieldset>
<legend>Informações Pessoais</legend>
<div class="form-group">
<label for="first-name">Primeiro Nome *</label>
<input type="text" id="first-name" name="firstName" required
aria-describedby="first-name-help">
<small id="first-name-help">Digite seu primeiro nome legal</small>
</div>
<div class="form-group">
<label for="email">Endereço de Email *</label>
<input type="email" id="email" name="email" required
aria-describedby="email-help">
<small id="email-help">Nunca compartilharemos seu email</small>
</div>
<div class="form-group">
<label for="phone">Número de Telefone</label>
<input type="tel" id="phone" name="phone"
aria-describedby="phone-help">
<small id="phone-help">Opcional: Inclua código do país</small>
</div>
</fieldset>
</form>
Os botões controlam o comportamento do formulário e fornecem ações claras para os usuários.
<!-- Botão de envio (envia o formulário) -->
<button type="submit">Criar Conta</button>
<!-- Botão de reset (limpa dados do formulário) -->
<button type="reset">Limpar Formulário</button>
<!-- Botão regular (para interações JavaScript) -->
<button type="button" onclick="showHelp()">Precisa de Ajuda?</button>
<!-- Usando elemento input -->
<input type="submit" value="Enviar Formulário">
<!-- Usando elemento button (mais flexível) -->
<button type="submit">
<span>Enviar Formulário</span>
<svg><!-- ícone --></svg>
</button>
O HTML5 fornece validação integrada que funciona sem JavaScript, melhorando a experiência do usuário e a qualidade dos dados.
<input type="text" name="username" required>
<input type="email" name="email" required>
<select name="country" required>
<option value="">Escolha um país</option>
<option value="br">Brasil</option>
<option value="pt">Portugal</option>
</select>
<!-- Padrão de número de telefone -->
<input type="tel" name="phone"
pattern="[0-9]{2}-[0-9]{5}-[0-9]{4}"
placeholder="11-99999-9999">
<!-- Padrão personalizado de nome de usuário -->
<input type="text" name="username"
pattern="[a-zA-Z0-9_]{3,16}"
title="Nome de usuário deve ter 3-16 caracteres, apenas letras, números e sublinhados">
<!-- Limites de comprimento de texto -->
<input type="text" name="title" minlength="5" maxlength="100">
<!-- Intervalos de números -->
<input type="number" name="quantity" min="1" max="10">
<!-- Intervalos de data -->
<input type="date" name="start-date" min="2025-01-01" max="2025-12-31">
Aqui está um formulário de contato abrangente que demonstra todos os conceitos que cobrimos:
<form action="/contact" method="POST" novalidate>
<fieldset>
<legend>Informações de Contato</legend>
<div class="form-row">
<div class="form-group">
<label for="first-name">Primeiro Nome *</label>
<input type="text" id="first-name" name="firstName"
required minlength="2" maxlength="50">
</div>
<div class="form-group">
<label for="last-name">Sobrenome *</label>
<input type="text" id="last-name" name="lastName"
required minlength="2" maxlength="50">
</div>
</div>
<div class="form-group">
<label for="email">Endereço de Email *</label>
<input type="email" id="email" name="email" required>
</div>
<div class="form-group">
<label for="phone">Número de Telefone</label>
<input type="tel" id="phone" name="phone"
pattern="[0-9]{2}-[0-9]{5}-[0-9]{4}"
placeholder="11-99999-9999">
</div>
</fieldset>
<fieldset>
<legend>Detalhes da Mensagem</legend>
<div class="form-group">
<label for="subject">Assunto *</label>
<select id="subject" name="subject" required>
<option value="">Escolha um assunto</option>
<option value="general">Consulta Geral</option>
<option value="support">Suporte Técnico</option>
<option value="billing">Questão de Cobrança</option>
</select>
</div>
<div class="form-group">
<label for="message">Mensagem *</label>
<textarea id="message" name="message" required
minlength="10" maxlength="1000" rows="5"
placeholder="Por favor, descreva sua consulta..."></textarea>
</div>
<div class="form-group">
<label for="priority">Nível de Prioridade</label>
<input type="range" id="priority" name="priority"
min="1" max="5" value="3">
<output for="priority">3</output>
</div>
</fieldset>
<fieldset>
<legend>Preferências</legend>
<div class="form-group">
<label>
<input type="checkbox" name="newsletter" value="yes">
Inscrever-se em nossa newsletter
</label>
</div>
<div class="form-group">
<fieldset>
<legend>Método de Contato Preferido</legend>
<label>
<input type="radio" name="contact-method" value="email" checked>
Email
</label>
<label>
<input type="radio" name="contact-method" value="phone">
Telefone
</label>
</fieldset>
</div>
</fieldset>
<div class="form-actions">
<button type="reset">Limpar Formulário</button>
<button type="submit">Enviar Mensagem</button>
</div>
</form>
Embora este guia foque no HTML, aqui estão algumas dicas de CSS para melhor apresentação de formulários:
/* Estilização básica de formulário */
.form-group {
margin-bottom: 1rem;
}
.form-row {
display: flex;
gap: 1rem;
}
label {
display: block;
margin-bottom: 0.25rem;
font-weight: 500;
}
input, select, textarea {
width: 100%;
padding: 0.5rem;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1rem;
}
input:focus, select:focus, textarea:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
}
button {
padding: 0.75rem 1.5rem;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1rem;
}
button[type="submit"] {
background-color: #007bff;
color: white;
}
Os formulários HTML são essenciais para criar experiências web interativas. Ao entender o elemento <form>
, vários tipos de entrada, rotulagem adequada e validação básica, você pode criar formulários que são funcionais e acessíveis.
Lembre-se destes princípios fundamentais:
Com esses fundamentos em vigor, você será capaz de criar formulários que proporcionam excelentes experiências do usuário enquanto coletam os dados que sua aplicação precisa.
Continue lendo com estes artigos relacionados
Domine imagens HTML com este guia abrangente cobrindo a tag img, texto alternativo, formatos de arquivo, imagens responsivas, srcset e otimização de performance web.
Domine listas HTML com este guia completo cobrindo elementos ul, ol e dl, técnicas de aninhamento, estilização com CSS e melhores práticas de acessibilidade.
Aprenda tabelas HTML do básico às técnicas avançadas. Domine elementos table, tr, td, th, acessibilidade, design responsivo e quando usar tabelas adequadamente.
Descubra o poder dos elementos HTML semânticos como header, footer, article e section. Aprenda como a marcação semântica melhora SEO, acessibilidade e manutenibilidade do código.