pratica

Criando Formulários Web Essenciais

Aprenda sobre criando formulários web essenciais

40 min
Aula 6 de 6

Criando Formulários Web Essenciais 📝

Bem-vindos à nossa aula prática sobre a criação de formulários web! Os formulários são a espinha dorsal da interação em qualquer site, permitindo que os usuários enviem informações, façam login, se cadastrem, realizem buscas e muito mais. Nesta aula, vamos mergulhar nos elementos HTML essenciais para construir formulários robustos e acessíveis.

Ao final desta aula, você será capaz de:

  • Compreender a estrutura básica de um formulário HTML.
  • Utilizar os principais elementos de formulário como <input>, <textarea>, <select>, <label> e <button>.
  • Aplicar atributos importantes para controlar o comportamento e a validação dos formulários.
  • Criar formulários web funcionais para diversas finalidades.

Vamos colocar a mão na massa! 🚀


1. A Estrutura Básica de um Formulário: <form>

Todo formulário HTML começa e termina com a tag <form>. Ela atua como um contêiner para todos os elementos de input, botões e outros controles que compõem o formulário.

Atributos Importantes:

  • action: Define para onde os dados do formulário serão enviados quando ele for submetido. Geralmente, é um URL de um script no servidor que processará esses dados.
  • method: Especifica o método HTTP a ser usado para enviar os dados. Os mais comuns são:
    • GET: Os dados do formulário são anexados ao URL como parâmetros (visíveis na barra de endereço). Ideal para buscas ou dados não sensíveis.
    • POST: Os dados do formulário são enviados no corpo da requisição HTTP (não visíveis na URL). Ideal para dados sensíveis (senhas) ou grandes volumes de dados.

Exemplo Básico:

<form action="/processar-dados" method="POST">
  <!-- Elementos do formulário virão aqui -->
  <p>Este é um formulário de exemplo.</p>
</form>

2. Elementos de Input Essenciais: <input>

A tag <input> é a mais versátil e frequentemente usada em formulários. Ela pode representar uma variedade de controles de interface, dependendo do seu atributo type.

Atributos Comuns:

  • type: Define o tipo de controle de input (texto, senha, email, número, etc.).
  • name: Crucial! Define o nome do controle, que será usado para identificar o dado enviado ao servidor.
  • id: Fornece um identificador único para o elemento, útil para CSS, JavaScript e, especialmente, para associar com a tag <label>.
  • value: Define o valor inicial do input ou o valor que será enviado para o servidor (para type="radio", type="checkbox", type="submit").
  • placeholder: Texto de dica que aparece no campo antes do usuário digitar algo.
  • required: Um atributo booleano que indica que o campo deve ser preenchido antes do formulário ser submetido.
  • readonly: Impede que o usuário modifique o valor do campo, mas o valor ainda é enviado.
  • disabled: Impede que o usuário interaja com o campo e seu valor não é enviado.

Tipos de Input Comuns e Exemplos:

2.1. type="text" (Texto Simples)

O tipo padrão. Usado para inputs de texto de linha única.

<label for="nomeUsuario">Nome de Usuário:</label>
<input type="text" id="nomeUsuario" name="username" placeholder="Digite seu nome de usuário" required>

2.2. type="password" (Senha)

Oculta os caracteres digitados.

<label for="senha">Senha:</label>
<input type="password" id="senha" name="password" placeholder="Sua senha secreta" required>

2.3. type="email" (Email)

Espera um endereço de e-mail. Navegadores podem oferecer validação básica de formato.

<label for="email">E-mail:</label>
<input type="email" id="email" name="user_email" placeholder="seu@email.com" required>

2.4. type="number" (Número)

Permite apenas valores numéricos. Pode ter atributos min, max e step.

<label for="idade">Idade:</label>
<input type="number" id="idade" name="user_age" min="18" max="120" value="25">

2.5. type="date" (Data)

Abre um seletor de data no navegador.

<label for="dataNascimento">Data de Nascimento:</label>
<input type="date" id="dataNascimento" name="birth_date">

2.6. type="checkbox" (Caixa de Seleção)

Permite selecionar zero ou mais opções.

<input type="checkbox" id="newsletter" name="subscribe_newsletter" value="yes">
<label for="newsletter">Desejo receber a newsletter</label>

2.7. type="radio" (Botão de Rádio)

Permite selecionar apenas uma opção de um grupo. É essencial que todos os botões de rádio no mesmo grupo tenham o mesmo atributo name.

<p>Selecione seu gênero:</p>
<input type="radio" id="masculino" name="gender" value="male">
<label for="masculino">Masculino</label><br>
<input type="radio" id="feminino" name="gender" value="female">
<label for="feminino">Feminino</label><br>
<input type="radio" id="outro" name="gender" value="other">
<label for="outro">Outro</label>

3. Associando Rótulos aos Inputs: <label>

A tag <label> é fundamental para a acessibilidade e usabilidade dos formulários. Ela associa um texto descritivo a um controle de formulário.

Atributo for:

  • O atributo for da tag <label> deve corresponder ao id do elemento de formulário ao qual ela está associada. Isso permite que, ao clicar no rótulo, o controle de formulário correspondente seja focado.

Exemplo:

<label for="emailUsuario">Seu E-mail:</label>
<input type="email" id="emailUsuario" name="user_email_address">

4. Input de Texto Multilinhas: <textarea>

Para entradas de texto mais longas, como mensagens ou comentários, usamos a tag <textarea>.

Atributos Comuns:

  • name: Nome para identificação no envio.
  • id: Identificador único.
  • rows: Número de linhas visíveis (altura).
  • cols: Número de colunas visíveis (largura).
  • placeholder: Texto de dica.

Exemplo:

<label for="mensagem">Sua Mensagem:</label><br>
<textarea id="mensagem" name="user_message" rows="5" cols="40" placeholder="Escreva sua mensagem aqui..."></textarea>

5. Listas de Seleção (Dropdowns): <select> e <option>

Para permitir que o usuário escolha uma ou mais opções de uma lista predefinida, usamos as tags <select> e <option>.

<select> Atributos:

  • name: Nome para identificação.
  • id: Identificador único.
  • multiple: (Booleano) Permite selecionar múltiplas opções (geralmente com Ctrl/Cmd + clique).
  • size: Número de opções visíveis sem rolagem.

<option> Atributos:

  • value: O valor que será enviado para o servidor se esta opção for selecionada.
  • selected: (Booleano) Torna esta opção a opção padrão selecionada.
  • disabled: (Booleano) Impede que esta opção seja selecionada.

Exemplo:

<label for="cidade">Selecione sua Cidade:</label>
<select id="cidade" name="user_city">
  <option value="">-- Por favor, selecione --</option>
  <option value="sao_paulo">São Paulo</option>
  <option value="rio_janeiro" selected>Rio de Janeiro</option>
  <option value="belo_horizonte">Belo Horizonte</option>
</select>

6. Botões de Ação: <button>

A tag <button> é usada para criar botões clicáveis que podem submeter o formulário, resetá-lo ou executar um script JavaScript.

Atributo type:

  • submit: Envia os dados do formulário (comportamento padrão).
  • reset: Reseta todos os campos do formulário para seus valores iniciais.
  • button: Um botão genérico que não tem comportamento padrão de formulário. Usado geralmente com JavaScript.

Exemplo:

<button type="submit">Enviar Formulário</button>
<button type="reset">Limpar Campos</button>
<button type="button">Clique-me!</button>

Nota: Você também pode usar <input type="submit"> ou <input type="reset">, mas <button> é mais flexível, pois pode conter HTML (como imagens e outros elementos) dentro dele.


7. Agrupando Elementos: <fieldset> e <legend>

Para agrupar elementos relacionados dentro de um formulário e melhorar a semântica e acessibilidade, usamos <fieldset> e <legend>.

  • <fieldset>: Cria um grupo visual e semântico de controles de formulário.
  • <legend>: Fornece um título ou legenda para o grupo de elementos dentro do <fieldset>.

Exemplo:

<fieldset>
  <legend>Informações de Contato</legend>
  <label for="nome">Nome:</label>
  <input type="text" id="nome" name="full_name" required><br><br>
  <label for="emailContato">E-mail:</label>
  <input type="email" id="emailContato" name="contact_email" required>
</fieldset>

8. Exemplo Completo de Formulário Simples 🧑‍💻

Vamos juntar tudo em um formulário de contato básico.

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Formulário de Contato</title>
    <style>
        /* Pequeno estilo para melhor visualização */
        body { font-family: sans-serif; margin: 20px; }
        form { background-color: #f4f4f4; padding: 20px; border-radius: 8px; max-width: 500px; margin: auto; }
        div { margin-bottom: 15px; }
        label { display: block; margin-bottom: 5px; font-weight: bold; }
        input[type="text"],
        input[type="email"],
        textarea,
        select {
            width: calc(100% - 20px); /* Ajusta a largura para não transbordar o padding */
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 4px;
            box-sizing: border-box; /* Inclui padding e borda na largura total */
        }
        textarea { resize: vertical; } /* Permite redimensionar verticalmente */
        button {
            background-color: #007bff;
            color: white;
            padding: 10px 15px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            font-size: 16px;
        }
        button:hover { background-color: #0056b3; }
        fieldset { border: 1px solid #ddd; padding: 15px; border-radius: 8px; margin-top: 20px; }
        legend { font-weight: bold; padding: 0 10px; color: #333; }
    </style>
</head>
<body>
    <h1>Entre em Contato</h1>
 
    <form action="/enviar-contato" method="POST">
        <fieldset>
            <legend>Suas Informações</legend>
            <div>
                <label for="nomeCompleto">Nome Completo:</label>
                <input type="text" id="nomeCompleto" name="full_name" placeholder="Seu nome" required>
            </div>
            <div>
                <label for="emailContato">E-mail:</label>
                <input type="email" id="emailContato" name="contact_email" placeholder="seu@email.com" required>
            </div>
        </fieldset>
 
        <fieldset>
            <legend>Sua Mensagem</legend>
            <div>
                <label for="assunto">Assunto:</label>
                <input type="text" id="assunto" name="subject" placeholder="Qual o motivo do contato?" required>
            </div>
            <div>
                <label for="mensagemTexto">Mensagem:</label>
                <textarea id="mensagemTexto" name="message" rows="6" placeholder="Escreva sua mensagem detalhada aqui..." required></textarea>
            </div>
            <div>
                <input type="checkbox" id="termos" name="accept_terms" value="yes" required>
                <label for="termos">Eu concordo com os <a href="#">termos de serviço</a></label>
            </div>
        </fieldset>
 
        <div>
            <button type="submit">Enviar Mensagem</button>
        </div>
    </form>
</body>
</html>

9. Exercícios e Desafios Práticos 💪

Agora é a sua vez de praticar! Crie os seguintes formulários em arquivos HTML separados. Lembre-se de usar <!DOCTYPE html>, <html>, <head> e <body> corretamente.

Desafio 1: Formulário de Login Simples

Crie um formulário de login que inclua:

  • Um campo de input para "Nome de Usuário" (tipo text).
  • Um campo de input para "Senha" (tipo password).
  • Uma caixa de seleção "Lembrar-me" (tipo checkbox).
  • Um botão de "Entrar" (tipo submit).
  • Use as tags <label> para associar os rótulos aos campos.
  • Adicione o atributo required aos campos de nome de usuário e senha.
  • Use placeholder para dar dicas aos usuários.

Desafio 2: Formulário de Cadastro Completo

Crie um formulário de cadastro que inclua:

  • Um <fieldset> para "Dados Pessoais" com:
    • Nome Completo (tipo text, required).
    • E-mail (tipo email, required).
    • Data de Nascimento (tipo date).
    • Gênero (grupo de radio buttons: "Masculino", "Feminino", "Outro").
  • Um <fieldset> para "Endereço" com:
    • Rua (tipo text).
    • Número (tipo number).
    • Cidade (dropdown <select> com algumas opções, e uma opção padrão "Selecione a Cidade").
    • Estado (dropdown <select> com algumas opções).
  • Um campo <textarea> para "Informações Adicionais" com rows e cols definidos.
  • Uma caixa de seleção "Concordo com os Termos de Uso" (tipo checkbox, required).
  • Um botão "Cadastrar" (tipo submit).
  • Certifique-se de usar <label> para todos os campos.
  • Adicione placeholder onde fizer sentido.

Desafio 3 (Opcional - CSS Básico): Estilizando seu Formulário

Para os desafios acima, adicione um bloco <style> dentro da tag <head> e aplique um CSS básico para:

  • Centralizar o formulário na página (ex: margin: auto; max-width: 600px;).
  • Dar um espaçamento interno (padding) e uma cor de fundo clara ao formulário.
  • Fazer com que os labels apareçam em uma linha separada acima dos seus respectivos inputs (ex: display: block;).
  • Dar um pouco de margin-bottom para separar os campos.
  • Estilizar o botão de submit com uma cor de fundo e texto visíveis.

10. Resumo e Próximos Passos 🏁

Nesta aula, exploramos os fundamentos dos formulários HTML, aprendendo a usar as tags essenciais para coletar informações dos usuários. Você agora sabe como criar inputs de texto, senhas, e-mails, números, datas, caixas de seleção, botões de rádio, áreas de texto multilinhas, listas suspensas e botões de ação. A importância de <label> para acessibilidade e name para o processamento dos dados foi destacada.

Pontos Chave:

  • <form> é o contêiner principal.
  • <input> é versátil com vários types.
  • <label> associa texto a controles para acessibilidade.
  • <textarea> para texto longo.
  • <select> e <option> para listas suspensas.
  • <button> para ações de formulário.
  • <fieldset> e <legend> para agrupar campos semanticamente.

Próximos Passos:

  • CSS para Formulários: Aprender a estilizar formulários com CSS para torná-los visualmente atraentes e responsivos.
  • Validação de Formulários com JavaScript: Implementar validações mais complexas no lado do cliente para melhorar a experiência do usuário.
  • Processamento de Formulários no Servidor: Entender como os dados enviados por formulários são recebidos e processados por linguagens de programação no lado do servidor (como Node.js, Python, PHP, etc.).

Continue praticando e experimentando com diferentes tipos de inputs e atributos! Os formulários são uma parte crucial de qualquer aplicação web interativa. Parabéns pelo seu progresso! 🎉

© 2025 Escola All Dev. Todos os direitos reservados.

Criando Formulários Web Essenciais - Fundamentos da Web com HTML e CSS | escola.all.dev.br