Generador de Formularios CSS

Resultados

Los formularios son la parte más tocada de la mayoría de los sitios y la menos pulida de muchos. Este generador produce el CSS de un formulario completo con estilo: una cuadrícula de formulario adaptable, pares de etiqueta + entrada, áreas de texto, selectores y estados de foco visibles, todo con un estilo visual coherente. Elige el color de acento, el radio de las esquinas y la separación, y copia la hoja de estilos. El CSS conserva la semántica nativa del formulario, por lo que la validación, el uso del teclado y los lectores de pantalla funcionan.

Cómo usar el generador

  1. 1

    Elige el color de acento

    El color de acento define el anillo de foco y el color del borde de cada campo.

  2. 2

    Elige el radio de las esquinas

    El radio se aplica a entradas, áreas de texto y selectores para que todos compartan la misma forma.

  3. 3

    Ajusta la separación

    La separación controla el espacio vertical entre los campos de la cuadrícula.

  4. 4

    Copia el CSS

    Una hoja de estilos completa que puedes pegar y adaptar sin tocar tu HTML.

El formulario base

<form class="form">
  <label class="field">
    <span class="field-label">Correo electrónico</span>
    <input type="email" required>
    <span class="field-error">Por favor, introduce un correo electrónico válido.</span>
  </label>

  <label class="field">
    <span class="field-label">Contraseña</span>
    <input type="password" minlength="8" required>
  </label>

  <button type="submit" class="button">Registrarse</button>
</form>
.field {
  display: block;
  margin-bottom: 1.25rem;
}
.field-label {
  display: block;
  font-weight: 500;
  margin-bottom: .25rem;
}
.field input {
  width: 100%;
  padding: .5rem .75rem;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
  background: #fff;
  transition: border-color 120ms, box-shadow 120ms;
}
.field input:focus-visible {
  outline: none;
  border-color: #2563eb;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);
}
.field input:invalid:not(:placeholder-shown) {
  border-color: #dc2626;
}
.field-error { display: none; color: #dc2626; font-size: .875rem; margin-top: .25rem; }
.field input:invalid:not(:placeholder-shown) ~ .field-error { display: block; }

Cuatro estilos comunes

Estilo Qué es Mejor para
Contorneado Borde alrededor de la entrada, fondo transparente Formularios de escritorio, diseños densos
Subrayado Solo un borde inferior UI minimalista / editorial
Relleno Fondo gris, sin borde UI inspirada en Material Design
Etiqueta flotante La etiqueta se sitúa dentro, anima hacia arriba al foco/valor Móvil primero, páginas de aterrizaje

La etiqueta flotante es la más bonita pero requiere marcado adicional o JavaScript para detectar el estado vacío. El contorneado es el más universal.

Lista de verificación de accesibilidad

  • Etiqueta visible para cada entrada. Nunca uses un placeholder como la única etiqueta, desaparece al enfocar y falla en contraste.
  • <label for> o envolviendo <label>. Ambos son válidos; envolver es un poco más fácil.
  • Indicador de foco. Nunca outline: none sin un reemplazo. Los usuarios de teclado lo necesitan.
  • Mensajes de error: enlázalos a través de aria-describedby en la entrada. No uses solo color para marcar errores, incluye un mensaje de texto o icono.
  • Campos requeridos: usa el atributo required. Agrega un marcador visual (asterisco) en la etiqueta para usuarios videntes.
  • Tipos de entrada: usa type="email", type="tel", type="url", type="number". Los teclados móviles se adaptan.
  • Atributos autocomplete: autocomplete="email", autocomplete="current-password", etc. Ahorra mucho tecleo a los usuarios.

Estados de validación nativos

CSS tiene pseudo-clases para la validez del formulario:

  • :required / :optional
  • :valid / :invalid
  • :in-range / :out-of-range (para entradas numéricas con min/max)
  • :placeholder-shown (vacío, placeholder visible)
  • :user-invalid (inválido y el usuario ha interactuado, el correcto para estilos de error)

La pseudo-clase :user-invalid es la forma más limpia de mostrar errores solo después de que el usuario ha hecho algo, evitando bordes rojos antes de la interacción. El soporte llegó a todos los principales alrededor de 2023.

Estado deshabilitado

.field input:disabled {
  background: #f3f4f6;
  color: #9ca3af;
  cursor: not-allowed;
}

Las entradas deshabilitadas no son enfocables ni enviables. Si deseas que sean enfocables para lectores de pantalla, usa readonly en su lugar, el formulario envía el valor pero el usuario no puede editarlo.

Preguntas frecuentes

No. Los placeholders desaparecen tan pronto como el usuario escribe, por lo que no pueden servir como etiquetas. Además, el texto del placeholder típicamente tiene bajo contraste y falla en WCAG. Usa una etiqueta visible más un placeholder opcional para sugerencias de formato.

Porque :invalid se aplica inmediatamente a los campos requeridos vacíos. Usa :user-invalid (consciente de la interacción) o combina :invalid:not(:placeholder-shown) como solución alternativa en navegadores más antiguos.

Establece appearance: none, elimina la flecha predeterminada, agrega la tuya a través de una imagen de fondo o un span envolvente con una flecha de pseudo-elemento. Las listas de opciones dentro permanecen estilizadas por el SO y no se pueden personalizar con CSS.

Ambos. La validación HTML (required, type, pattern) captura casos simples sin JavaScript. JavaScript maneja reglas complejas (fuerza de contraseña, dependencias entre campos). Siempre valida en el servidor también, la validación del lado del cliente es para UX, no para seguridad.

Herramientas relacionadas