Pular para o conteúdo

A primeira escola especializada em tecnologia do Alto Solimões, com corpo técnico formado na área.

Módulo 3: O formulário de contato

Campos e rótulos: o formulário de contato

O formulário que a pessoa preenche para falar com você

O formulário

<form action="https://formulario.exemplo/contato" method="post">
<label for="nome">Nome completo</label>
<input type="text" id="nome" name="nome" />

<button type="submit">Enviar mensagem</button>
</form>
  • action; para onde os dados vão
  • method; post para enviar dados, get para busca
  • <button type="submit">; envia

label: o par que não pode faltar

<label for="nome">Nome completo</label>
<input type="text" id="nome" name="nome" />

O for do label aponta para o id do campo. É esse par que cria o vínculo - estar ao lado na tela não liga nada.

O que se ganha:

  1. O leitor de tela anuncia "Nome completo, campo de texto" em vez de só "campo de texto".
  2. Clicar no rótulo põe o cursor no campo. No celular, isso transforma um alvo de 16 pixels de altura num alvo de 40: e é a diferença entre acertar e errar com o polegar.

O placeholder tem lugar: como exemplo, ao lado do rótulo, nunca no lugar dele.

<label for="email">E-mail</label>
<input type="email" id="email" name="email" placeholder="[email protected]" />

id e name são coisas diferentes

AtributoServe para
idligar o rótulo ao campo, e ser único na página
nameser a chave do dado quando o formulário envia

Sem name, o campo não é enviado. É um erro que passa despercebido: o formulário parece funcionar, e o dado simplesmente não chega.

Os tipos de input

<label for="nome">Nome completo</label>
<input type="text" id="nome" name="nome" />

<label for="email">E-mail</label>
<input type="email" id="email" name="email" />

<label for="telefone">Telefone com WhatsApp</label>
<input type="tel" id="telefone" name="telefone" />

<label for="prazo">Prazo desejado</label>
<input type="date" id="prazo" name="prazo" />

<label for="orcamento">Orçamento aproximado</label>
<input type="number" id="orcamento" name="orcamento" min="0" step="100" />

O type faz duas coisas: muda a validação do navegador e muda o teclado que o celular abre.

typeTeclado no celular
textcomum
emailcomum, com @ visível
telnumérico de discagem
numbernumérico com setas
dateseletor de data

Escolher entre opções

Num formulário de contato, um <select> de assunto poupa uma frase de quem escreve e organiza a sua caixa de entrada:

<label for="assunto">Assunto</label>
<select id="assunto" name="assunto">
<option value="">Selecione</option>
<option value="projeto">Um projeto</option>
<option value="vaga">Uma vaga</option>
<option value="duvida">Uma dúvida técnica</option>
<option value="outro">Outro</option>
</select>

Rádio; uma escolha entre poucas:

<fieldset>
<legend>Como prefere que eu responda?</legend>

<input type="radio" id="por-email" name="retorno" value="email" />
<label for="por-email">Por e-mail</label>

<input type="radio" id="por-whatsapp" name="retorno" value="whatsapp" />
<label for="por-whatsapp">Por WhatsApp</label>
</fieldset>

Repare: os dois rádios têm o mesmo name. É isso que os faz um grupo, em que só um pode estar marcado. id diferente, name igual.

O <fieldset> com <legend> é o que diz qual é a pergunta. Sem ele, o leitor de tela anuncia "Por e-mail, botão de rádio": e a pessoa não sabe por e-mail o quê.

Caixa de marcar; cada uma independente:

<input type="checkbox" id="copia" name="copia" value="sim" />
<label for="copia">Quero receber uma cópia desta mensagem</label>

Texto longo

O campo principal do formulário de contato:

<label for="mensagem">Mensagem</label>
<textarea id="mensagem" name="mensagem" rows="6"></textarea>

<textarea> abre e fecha, e o valor inicial vai entre as tags: não num atributo value.

O formulário de contato completo

<h2>Envie uma mensagem</h2>
<p>Conte rapidamente do que você precisa. Eu respondo pessoalmente.</p>

<form action="https://formulario.exemplo/contato" method="post">
<fieldset>
<legend>Quem está falando</legend>

<label for="nome">Nome completo</label>
<input type="text" id="nome" name="nome" autocomplete="name" />

<label for="email">E-mail</label>
<input
type="email"
id="email"
name="email"
autocomplete="email"
placeholder="[email protected]"
/>
</fieldset>

<fieldset>
<legend>Sobre o que</legend>

<label for="assunto">Assunto</label>
<select id="assunto" name="assunto">
<option value="">Selecione</option>
<option value="projeto">Um projeto</option>
<option value="vaga">Uma vaga</option>
<option value="duvida">Uma dúvida técnica</option>
</select>

<label for="mensagem">Mensagem</label>
<textarea id="mensagem" name="mensagem" rows="6"></textarea>
</fieldset>

<button type="submit">Enviar mensagem</button>
</form>

Três campos obrigatórios e um opcional. Todo campo a mais é gente a menos enviando: cada pergunta que você faz antes de conhecer a pessoa é um motivo para ela desistir e fechar a aba.

O plano B honesto

Enquanto não houver servidor, o formulário fica na página como estrutura - você vai estilizá-lo no curso de CSS - e ao lado dele fica o caminho que funciona hoje:

<h2>Canais diretos</h2>
<dl>
<dt>E-mail</dt>
<dd><a href="mailto:[email protected]">[email protected]</a></dd>

<dt>WhatsApp</dt>
<dd><a href="https://wa.me/5597999998888">(97) 99999-8888</a></dd>

<dt>Onde estou</dt>
<dd>Benjamin Constant - AM, tríplice fronteira</dd>

<dt>Tempo de resposta</dt>
<dd>Até dois dias úteis</dd>
</dl>

No portfólio

A página contato.html fica pronta de estrutura:

  • <h1> "Vamos construir algo juntos" e um parágrafo de abertura;
  • o <h2> "Canais diretos" com a <dl> de e-mail, WhatsApp, localização e tempo de resposta;
  • o <h2> "Envie uma mensagem" com o <form>;
  • todo campo com id, name e um <label for> apontando para ele;
  • <fieldset> e <legend> em cada grupo;
  • um <button type="submit"> com texto que diz o que acontece - "Enviar mensagem", não "Enviar".

E no index.html, a seção final: um <h2> com uma pergunta ("Tem um problema que merece atenção?"), um parágrafo e um link para contato.html.

Exercícios

  1. Monte o formulário de contato do seu portfólio com nome, e-mail, assunto e mensagem, cada campo com o seu <label>.
  2. Adicione um <fieldset> com <legend> para agrupar os campos de quem está falando.
  3. Escreva a <dl> de canais diretos, incluindo o tempo de resposta que você consegue cumprir de verdade.
  4. Confira, campo a campo: todo campo tem id, name e um <label for> apontando para ele?
  5. Abra o formulário no celular e toque em cada rótulo, não no campo. O cursor foi para o campo certo?
  6. Conte quantos campos o seu formulário tem. Para cada um, responda: "se eu tirar este, perco a mensagem?" Tire os que sobrarem.

Referências

Testa o que você leu

6 perguntas sobre esta aula. Errar aqui não custa nada - a explicação vem junto da correção.

Pergunta 1 de 6
Um `<label>` está escrito imediatamente antes do campo, mas sem `for`. Qual é a consequência?