Formulários e inputs
HTML & CSS • Módulo 1: HTML essencial • Codding — material para estudo offline
Aluno: ______________________________ Data: ____ / ____ / ______
Nesta aula, você vai compreender Formulários e inputs com explicação progressiva, exemplo resolvido, checagens e prática. Nada de apenas copiar: cada etapa prepara a próxima.
Objetivos da aula
- Explicar Formulários e inputs com suas próprias palavras
- Reconhecer as partes importantes em um exemplo real
- Identificar e corrigir os erros mais frequentes
- Aplicar o conteúdo em uma atividade prática
Pré-requisito: Leia a aula anterior do módulo se algum termo parecer novo. Você pode testar o exemplo antes de continuar. • Duração: 50–75 min
Explicação passo a passo
1. O que é Formulários e inputs
Formulário é a porta de entrada dos dados do usuário — e de quase todo problema de segurança e de dados sujos. Validar bem é parte do trabalho, não um extra.
Checkpoint: Por que validar também no servidor? — Resposta: Porque o cliente pode ser burlado e enviar dados direto
2. Como pensar antes de fazer
Use os tipos e atributos nativos primeiro: type="email", required, minlength, pattern. O navegador já valida, avisa e ajuda o teclado do celular a aparecer certo.
Dica: Não decore a forma. Tente explicar com suas palavras qual problema “Formulários e inputs” resolve.
3. Exemplo completo, do início ao resultado
Todo campo precisa de <label> associado (for/id). Sem isso, leitor de tela não anuncia o campo e o toque no rótulo não foca o input — acessibilidade e usabilidade caem juntas.
<form id="cadastro">
<label for="email">E-mail</label>
<input id="email" name="email" type="email" required />
<label for="senha">Senha (mínimo 8)</label>
<input id="senha" name="senha" type="password" minlength="8" required />
<button type="submit">Criar conta</button>
</form>
<script>
document.getElementById('cadastro').addEventListener('submit', (e) => {
e.preventDefault(); // impede o recarregamento
const dados = new FormData(e.target);
console.log(Object.fromEntries(dados)); // { email: ..., senha: ... }
});
</script>| Trecho | O que faz |
|---|
<form id="cadastro"> | Define uma parte da estrutura visível ou semântica da página. |
<label for="email">E-mail</label> | Percorre ou transforma uma sequência de valores. |
<input id="email" name="email" type="email" required /> | Define uma parte da estrutura visível ou semântica da página. |
<label for="senha">Senha (mínimo 8)</label> | Percorre ou transforma uma sequência de valores. |
<input id="senha" name="senha" type="password" minlength="8" required /> | Define uma parte da estrutura visível ou semântica da página. |
<button type="submit">Criar conta</button> | Define uma parte da estrutura visível ou semântica da página. |
</form> | Define uma parte da estrutura visível ou semântica da página. |
<script> | Define uma parte da estrutura visível ou semântica da página. |
Dica: FormData lê todos os campos pelo atributo name de uma vez — não é preciso capturar input por input.
Checkpoint: Para que serve o label associado ao input? — Resposta: Acessibilidade e usabilidade: leitores de tela anunciam e o toque foca o campo
4. Do detalhe para o todo
Validação no navegador é conveniência; validação no servidor é obrigação. Qualquer pessoa pode enviar dados sem passar pela sua tela, então a regra final tem que estar no back-end.
5. Erros comuns e como corrigi-los
1. Esquecer e.preventDefault() e a página recarregar perdendo tudo.
2. Campo sem name: ele simplesmente não vai no envio.
3. Confiar só na validação do navegador e aceitar qualquer coisa no servidor.
Dica: Quando algo der errado, compare uma diferença por vez com o exemplo. Evite mudar várias partes ao mesmo tempo.
Prática guiada
1. 1. Monte a primeira versão
Prática guiada: edite o exemplo abaixo aplicando "Formulários e inputs" e clique em Rodar para ver o resultado ao vivo.
<form id="cadastro">
<label for="email">E-mail</label>
<input id="email" name="email" type="email" required />
<label for="senha">Senha (mínimo 8)</label>
<input id="senha" name="senha" type="password" minlength="8" required />
<button type="submit">Criar conta</button>
</form>
<script>
document.getElementById('cadastro').addEventListener('submit', (e) => {
e.preventDefault(); // impede o recarregamento
const dados = new FormData(e.target);
console.log(Object.fromEntries(dados)); // { email: ..., senha: ... }
});
</script>Dica: Volte ao exemplo resolvido e compare a estrutura. Esquecer e.preventDefault() e a página recarregar perdendo tudo.
2. 2. Preveja antes de testar
Sem executar, explique qual resultado o exemplo de Formulários e inputs deve produzir e qual parte é responsável por ele.
Minha previsão:
A parte responsável pelo resultado:
Como vou conferir:
Dica: Use o modelo mental da aula: entrada, transformação e evidência observável.
3. 3. Encontre e corrija o erro
Use o exemplo de Formulários e inputs, identifique um risco citado na aula e registre ou implemente a correção.
<form id="cadastro">
<label for="email">E-mail</label>
<input id="email" name="email" type="email" required />
<label for="senha">Senha (mínimo 8)</label>
<input id="senha" name="senha" type="password" minlength="8" required />
<button type="submit">Criar conta</button>
</form>
<script>
document.getElementById('cadastro').addEventListener('submit', (e) => {
e.preventDefault(); // impede o recarregamento
const dados = new FormData(e.target);
console.log(Object.fromEntries(dados)); // { email: ..., senha: ... }
});
</script>Dica: Esquecer e.preventDefault() e a página recarregar perdendo tudo.
4. 4. Aplique em um caso novo
Crie uma variação própria usando Formulários e inputs. Mude os dados ou o cenário e demonstre que o resultado continua correto.
<form id="cadastro">
<label for="email">E-mail</label>
<input id="email" name="email" type="email" required />
<label for="senha">Senha (mínimo 8)</label>
<input id="senha" name="senha" type="password" minlength="8" required />
<button type="submit">Criar conta</button>
</form>
<script>
document.getElementById('cadastro').addEventListener('submit', (e) => {
e.preventDefault(); // impede o recarregamento
const dados = new FormData(e.target);
console.log(Object.fromEntries(dados)); // { email: ..., senha: ... }
});
</script>Dica: Mantenha a estrutura que já funcionou e altere uma decisão por vez.
Revisão
- Formulário é a porta de entrada dos dados do usuário — e de quase todo problema de segurança e de dados sujos. Validar bem é parte do trabalho, não um extra.
- FormData lê todos os campos pelo atributo name de uma vez — não é preciso capturar input por input.
- Evite: Esquecer e.preventDefault() e a página recarregar perdendo tudo.
- Evite: Campo sem name: ele simplesmente não vai no envio.
Exemplo comentado
<form id="cadastro">
<label for="email">E-mail</label>
<input id="email" name="email" type="email" required />
<label for="senha">Senha (mínimo 8)</label>
<input id="senha" name="senha" type="password" minlength="8" required />
<button type="submit">Criar conta</button>
</form>
<script>
document.getElementById('cadastro').addEventListener('submit', (e) => {
e.preventDefault(); // impede o recarregamento
const dados = new FormData(e.target);
console.log(Object.fromEntries(dados)); // { email: ..., senha: ... }
});
</script>FormData lê todos os campos pelo atributo name de uma vez — não é preciso capturar input por input.
Erros comuns
- Esquecer e.preventDefault() e a página recarregar perdendo tudo.
- Campo sem name: ele simplesmente não vai no envio.
- Confiar só na validação do navegador e aceitar qualquer coisa no servidor.
Quiz e gabarito completo
1. Por que validar também no servidor?
- a) Para ficar mais rápido
- b) Porque o cliente pode ser burlado e enviar dados direto
- c) Porque o navegador não valida e-mail
- d) Para economizar código
Gabarito: b) Porque o cliente pode ser burlado e enviar dados direto — A validação de tela é conveniência; a regra que protege os dados precisa estar no servidor.
2. Para que serve o label associado ao input?
- a) Só estética
- b) Acessibilidade e usabilidade: leitores de tela anunciam e o toque foca o campo
- c) Validar o campo
- d) Enviar o valor
Gabarito: b) Acessibilidade e usabilidade: leitores de tela anunciam e o toque foca o campo — Sem label associado o campo fica sem nome para tecnologias assistivas.
Codding • HTML & CSS • Formulários e inputs • Prova final e certificado em codding.lovable.app/cursos/html-css/prova