Saltar al contenido principal

Ejercicio práctico 7: Formulario básico en HTML

Aprende a crear un formulario básico en HTML paso a paso. Descubre cómo usar etiquetas como <form>, <input>, <label>, y más, para capturar información del usuario de forma clara y estructurada.

Actividad​

Crea un formulario con campos de texto, correo electrónico y un botón de envío.

Solución interactiva​

Logo DivZone de ad link
Plataforma IAConvierte el código en clientes.Pruébalo gratis

Solución con el código HTML completo​

HTML
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<title>Formulario Básico</title>
</head>
<body>
<h1>Formulario</h1>
<form>
<label for="nombre">Nombre:</label>
<input type="text" id="nombre" name="nombre" />
<!-- <br />: Este es un salto de línea -->
<br />
<label for="email">Correo Electrónico:</label>
<input type="email" id="email" name="email" />
<br />
<button type="submit">Enviar</button>
</form>
</body>
</html>

Variantes del mismo ejercicio​

Variante 1: Formulario con method y action​

Los atributos method y action definen cómo y a dónde se envían los datos del formulario.

HTML
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<title>Formulario con Método POST</title>
</head>
<body>
<h1>Registro de Usuario</h1>
<form action="/procesar-registro" method="POST">
<label for="nombre">Nombre:</label>
<input type="text" id="nombre" name="nombre" />
<br />
<label for="email">Correo Electrónico:</label>
<input type="email" id="email" name="email" />
<br />
<button type="submit">Registrarse</button>
</form>
</body>
</html>
  • method="POST": envía los datos en el cuerpo de la petición (más seguro para información sensible).
  • method="GET": envía los datos en la URL como parámetros visibles (útil para búsquedas y filtros).
  • action: URL del servidor que procesará el formulario. Si se omite, se envía a la misma página.

Variante 2: Validación HTML5 con atributos nativos​

HTML5 permite validar campos sin escribir JavaScript usando atributos como required, placeholder, minlength, maxlength y pattern.

HTML
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<title>Formulario con Validación</title>
</head>
<body>
<h1>Formulario Validado</h1>
<form>
<label for="nombre">Nombre (obligatorio):</label>
<input
type="text"
id="nombre"
name="nombre"
placeholder="Ingresá tu nombre completo"
required
minlength="3"
maxlength="50"
/>
<br />
<label for="email">Correo Electrónico:</label>
<input
type="email"
id="email"
name="email"
placeholder="ejemplo@correo.com"
required
/>
<br />
<label for="telefono">Teléfono:</label>
<input
type="tel"
id="telefono"
name="telefono"
placeholder="+54 11 1234-5678"
pattern="[+]{0,1}[0-9]{1,3}[0-9]{6,14}"
/>
<br />
<button type="submit">Enviar</button>
</form>
</body>
</html>
  • required: el campo no puede estar vacío.
  • placeholder: texto de ejemplo que desaparece al escribir.
  • minlength / maxlength: largo mínimo y máximo de caracteres.
  • pattern: expresión regular que el valor debe cumplir.

Variante 3: Tipos de input y sus diferencias​

Cada type de input activa un teclado diferente en móviles y tiene validación automática.

HTML
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<title>Tipos de Input</title>
</head>
<body>
<h1>Distintos Tipos de Campos</h1>
<form>
<label for="texto">Texto (type="text"):</label>
<input type="text" id="texto" name="texto" />
<br /><br />

<label for="email2">Email (type="email"):</label>
<input type="email" id="email2" name="email2" />
<!-- Valida formato de correo automáticamente -->
<br /><br />

<label for="password">Contraseña (type="password"):</label>
<input type="password" id="password" name="password" />
<!-- Oculta los caracteres al escribir -->
<br /><br />

<label for="edad">Edad (type="number"):</label>
<input type="number" id="edad" name="edad" min="1" max="120" />
<!-- Solo acepta números, con flechas incrementales -->
<br /><br />

<label for="telefono2">Teléfono (type="tel"):</label>
<input type="tel" id="telefono2" name="telefono2" />
<!-- Activa teclado numérico en móviles -->
<br /><br />

<button type="submit">Enviar</button>
</form>
</body>
</html>

Variante 4: Agrupando campos con fieldset y legend​

Para formularios largos, <fieldset> y <legend> agrupan campos relacionados visual y semánticamente.

HTML
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<title>Formulario Agrupado</title>
</head>
<body>
<h1>Perfil de Usuario</h1>
<form>
<fieldset>
<legend>Datos Personales</legend>
<label for="nombre2">Nombre:</label>
<input type="text" id="nombre2" name="nombre" required />
<br />
<label for="email3">Email:</label>
<input type="email" id="email3" name="email" required />
</fieldset>

<fieldset>
<legend>Preferencias</legend>
<label for="idioma">Idioma preferido:</label>
<select id="idioma" name="idioma">
<option value="es">Español</option>
<option value="en">English</option>
<option value="pt">Português</option>
</select>
</fieldset>

<br />
<button type="submit">Guardar Perfil</button>
</form>
</body>
</html>

fieldset crea un recuadro visual alrededor de los campos agrupados y legend le da un título accesible.


Mini-desafío: Ponelo a prueba​

Creá un formulario de registro que contenga:

  • Campo de nombre con required y placeholder
  • Campo de email con type="email" y validación automática
  • Campo de contraseña con type="password" y minlength="8"
  • Campo de teléfono con type="tel" y pattern
  • Un <button type="submit"> para enviar
  • Todos los campos deben tener su <label> asociado con for

Intentá armarlo sin mirar los ejemplos. Si te trabás, volvé a la variante que necesites.


Errores comunes con formularios HTML​

ErrorPor qué es un problema
Olvidar el atributo name en los inputsSin name, el dato no se envía al servidor. Es el identificador del campo
No asociar label con for/idLos lectores de pantalla no saben qué etiqueta corresponde a qué campo. Además, al hacer clic en el label no se enfoca el input
Botón sin type="submit"Si está dentro de un <form>, un <button> sin type funciona como submit, pero es mejor ser explícito para evitar comportamientos inesperados
Usar solo required sin validación server-sideLa validación del navegador se puede saltar. Siempre validá también en el backend
No poner placeholder como ayuda visualAunque no reemplaza al <label>, el placeholder guía al usuario sobre el formato esperado

Preguntas frecuentes​

¿Qué pasa si no pongo name en un input?​

El campo no se envía al servidor. El atributo name es la clave con la que el backend recibe el valor. Si tenés <input type="text" id="nombre"> sin name, el usuario puede escribir en el campo pero al enviar el formulario ese dato no llega a destino.

¿GET vs POST: cuál uso?​

Usá GET para búsquedas y filtros (los parámetros quedan en la URL, se puede compartir el link). Usá POST para registro, login o cualquier formulario que modifique datos o contenga información sensible (contraseñas, datos personales). POST envía los datos en el cuerpo de la petición, no en la URL.

info

No te pierdas la explicación completa acá 👉 Creación de formularios con HTML