Tema
Formularios
Casi todos los proyectos para clientes tienen al menos un formulario: contacto, acceso, registro o cotización. Aquí tienes tres listos para usar, con validación accesible y buen aspecto en móvil.
Sobre el envío
Las demos no envían datos a ningún servidor (usan preventDefault()). Para hacerlo real, conecta el formulario a tu backend, a un servicio como Formspree o a un fetch() hacia tu API.
Login y registro con pestañas
Cuándo usarlo: páginas de acceso de aplicaciones, tiendas o áreas de clientes donde el usuario puede entrar o crear cuenta desde el mismo lugar.
Cómo personalizarlo
--acentoy--acento-2controlan el color principal y el degradado de fondo.- Las pestañas siguen el patrón ARIA (
role="tablist",role="tab",aria-selected,aria-controls) y se pueden cambiar con las flechas del teclado. - El botón del ojo cambia el
typedel input entrepasswordytexty actualiza suaria-label. - Los atributos
autocomplete(email,current-password,new-password) permiten que el navegador y los gestores de contraseñas rellenen los campos.
Buena práctica
Nunca bloquees pegar texto en el campo de contraseña. Los gestores de contraseñas lo necesitan y hacen tu sitio más seguro.
Formulario de contacto con validación
Cuándo usarlo: la página de contacto de cualquier negocio o portafolio, formularios de cotización y solicitudes.
Cómo personalizarlo
--acento,--errory--okdefinen los colores de foco, error y campo correcto.- Las reglas son atributos HTML nativos:
required,type="email",minlength,maxlength. Añade más (por ejemplopattern="[0-9]{10}"para teléfono) y agrega su mensaje en la funciónmensajeDe(). - Cada campo tiene un
<p class="error">enlazado conaria-describedby; el JS ponearia-invalid="true"y el texto del error, así los lectores de pantalla lo anuncian. - Se valida al salir de cada campo (
blur) y, si ya había error, mientras se escribe: así no regañas al usuario antes de tiempo.
Error común
Confiar solo en la validación del navegador. Siempre valida también en el servidor: cualquiera puede saltarse el JavaScript.
Inputs con label flotante
Cuándo usarlo: formularios cortos donde quieres un look moderno y compacto (checkout, suscripción, contacto) sin perder la etiqueta visible.
Cómo personalizarlo
- Funciona solo con CSS: el truco es
placeholder=" "(un espacio) y el selector:not(:placeholder-shown), que detecta si el campo tiene texto. - El
<label>debe ir justo después del input para que funcione el selectorinput + label. --acentocolorea el borde y el label al enfocar;--radioel redondeo.- Incluye dos estilos: con contorno (
.flotante) y subrayado tipo Material (.linea). Usa uno solo por formulario para mantener la coherencia.
Resumen
- Usa validación nativa (
required,type,minlength) y personaliza los mensajes con la APIvalidity. - Enlaza los errores con
aria-describedbyy marca los campos conaria-invalid. autocompletecorrecto = formularios más rápidos de llenar.- Label flotante:
placeholder=" "+:placeholder-shown, sin JavaScript.