Usamos cookies

Utilizamos cookies propias y de terceros para analizar el tráfico y mejorar tu experiencia. Puedes aceptarlas o rechazarlas. Política de privacidad.

Saltar al contenido
—Guías

Diseño UI de campos de formulario: etiquetas, ayudas, foco y errores

Por
Juan Navarro
Lectura
11 min
Publicado
14 de febrero de 2026

Un formulario se rellena campo a campo. Esta guía baja al detalle de cada uno: anatomía, medidas, tipos de control, estados, validación y el HTML que hace que todo funcione también con teclado y lector de pantalla.

Hay una prueba que hacemos en el estudio antes de dar por bueno un formulario: lo rellenamos con el móvil en una mano, de pie, con prisa y con datos reales, incluidos un apellido compuesto, un correo largo y una dirección con escalera y puerta. En cinco minutos aparecen cosas que en la pantalla de diseño eran invisibles: una etiqueta que desaparece al escribir, un teclado que no es el adecuado, un mensaje de error que llega antes de terminar de teclear, un desplegable con 200 países donde España está en la posición 68.

Cada uno de esos detalles vive en el diseño de un solo campo. En nuestra guía sobre formularios web que convierten hablamos de cuántos campos pedir y de cómo generar confianza en el conjunto. Aquí bajamos un nivel: la anatomía de cada campo, sus medidas, el control adecuado para cada dato, sus estados y el código que lo sostiene. Es la parte más artesanal del diseño de interfaces, y la que más se agradece al usarla.

01Anatomía de un campo bien resuelto

Un campo de formulario completo tiene más piezas de las que parece. Estas son las que diseñamos, de arriba abajo:

  1. Etiqueta. El nombre del dato, siempre visible, encima del campo. Corta y concreta: «Teléfono», «Fecha de llegada».
  2. Indicador de opcional u obligatorio. Pegado a la etiqueta: «Empresa (opcional)».
  3. Texto de ayuda previo, si la duda surge antes de escribir: «Lo usaremos solo para confirmar la cita».
  4. Contenedor del campo. La caja donde se escribe, con su borde, fondo y radio.
  5. Placeholder, si aporta un ejemplo de formato: «600 000 000». Opcional.
  6. Iconos o afijos dentro del campo: un símbolo de euro, un botón para mostrar la contraseña, un icono de calendario.
  7. Mensaje de error o de validación, debajo del campo, cuando corresponde.
  8. Contador de caracteres, si hay un límite.

No todos los campos necesitan todas las piezas, pero conviene que el sistema de diseño las tenga previstas, con su tipografía, su color y sus espacios, para que cada formulario nuevo se construya sin improvisar.

Clave: la etiqueta es la única pieza que nunca se negocia. Todo lo demás se añade según el dato; la etiqueta está siempre, visible y conectada al campo en el código.

Por qué la etiqueta va siempre visible

El patrón de usar solo el placeholder como etiqueta (el texto gris dentro de la caja) sigue siendo muy común porque deja formularios limpios en la maqueta. En uso real tiene tres problemas: desaparece al escribir, así que al revisar ya no se sabe qué era cada campo; su gris claro casi nunca alcanza el contraste de 4,5:1 que pide WCAG 2.2 para el texto, y muchas personas confunden un campo con placeholder con un campo ya relleno. El Nielsen Norman Group lleva años documentándolo en sus estudios de usabilidad.

Las etiquetas flotantes (que empiezan dentro del campo y suben al enfocarlo) son un término medio aceptable si se hacen bien: tamaño legible en su posición superior, buen contraste y espacio suficiente para que no se monten sobre el texto. Aun así, en nuestros proyectos preferimos la etiqueta fija encima: es más sencilla de construir, más robusta con textos largos y no depende de animaciones.

02Medidas que funcionan

Estas son las medidas de partida que usamos, coherentes con un sistema de espaciado de 8 puntos:

ElementoValor recomendadoPor qué
Altura del campo48 px en móvil, 40 a 48 px en escritorioObjetivo táctil cómodo; misma altura que los botones
Texto dentro del campo16 px como mínimoLegibilidad y evita el zoom automático de iOS
Etiqueta14 a 16 px, peso medioSe distingue del texto escrito sin gritar
Separación etiqueta–campo4 a 8 pxProximidad: se leen como una unidad
Separación entre campos16 a 24 pxCada campo se percibe como un grupo propio
Separación entre secciones32 a 48 pxMarca bloques como «Datos de contacto» y «Envío»
Borde del campo1 px con contraste 3:1 frente al fondoWCAG 1.4.11: el límite del control debe verse
Relleno horizontal12 a 16 pxEl texto respira dentro de la caja

El ancho dice qué se espera

El ancho de un campo es una pista silenciosa. Un código postal en un campo de ancho completo parece pedir algo largo; uno de 5 o 6 caracteres de ancho se entiende al instante. En escritorio, ajustar el ancho al dato esperado (código postal, CVV, año) ayuda a rellenar más rápido. En móvil, la mayoría de campos van a ancho completo por comodidad, salvo pares cortos que se pueden poner en línea, como mes y año de caducidad.

Una columna

Los formularios de una sola columna se recorren de arriba abajo sin dudas sobre el orden. Las excepciones razonables son pares que forman una unidad mental: nombre y apellidos, código postal y ciudad, fecha de llegada y de salida.

03El control adecuado para cada dato

Diseñar un campo también es elegir qué tipo de control usar. La regla general: cuantas menos acciones necesite la persona para dar el dato correcto, mejor.

SituaciónControl recomendadoNotas
2 a 5 opciones excluyentesBotones de opción (radio) visiblesSe ven todas sin abrir nada; un clic
2 o 3 opciones cortas y frecuentesControl segmentadoIdeal para «Particular / Empresa»
6 a 15 opcionesDesplegable (select)Ordenadas de forma lógica, no siempre alfabética
Muchas opciones conocidas (países, ciudades)Campo con autocompletadoEscribir «Esp» es más rápido que desplazarse
Varias opciones compatiblesCasillas (checkbox)Una por línea, con la etiqueta clicable
Activar algo con efecto inmediatoInterruptor (switch)Solo si el cambio se aplica al momento
Aceptar condicionesCasilla sin marcar por defectoEl RGPD exige consentimiento activo
Cantidades pequeñasCampo numérico con botones + y −Útil en reservas de personas o unidades
Fechas cercanasSelector de calendarioPara fechas de nacimiento, mejor tres campos o texto

Dos matices. Primero, la diferencia entre casilla e interruptor: la casilla se usa en formularios que se envían con un botón; el interruptor, en ajustes que se aplican en el acto, como activar notificaciones. Segundo, la fecha de nacimiento: abrir un calendario y retroceder 40 años mes a mes es una de las experiencias más frustrantes de la web. Tres campos (día, mes, año) o uno de texto con formato claro funcionan mucho mejor.

04Los estados de un campo

Igual que un botón, un campo cambia según lo que pasa. Diseñamos siempre estos estados:

  • Vacío (reposo). Borde visible, fondo neutro, etiqueta clara.
  • Hover. Un leve oscurecimiento del borde en escritorio. Opcional.
  • Foco. El más importante. Indica dónde va a aparecer lo que se escribe. Lo resolvemos con un borde de 2 px en el color de acción más un anillo exterior suave, con un contraste de al menos 3:1.
  • Relleno. El texto escrito en el color principal de texto, claramente distinto del placeholder.
  • Error. Borde en color de error, un icono y un mensaje debajo. El color solo no basta: WCAG pide que la información no dependa únicamente del color, así que el icono y el texto son necesarios.
  • Validado. Opcional y con mesura: una marca verde discreta en campos donde confirmar ayuda (un correo disponible, un código postal reconocido).
  • Desactivado. Fondo gris claro y texto atenuado. Si un campo no se puede editar pero su contenido importa, mejor el estado de solo lectura, que se puede seleccionar y copiar.
  • Solo lectura. Sin borde o con borde muy suave, texto en color normal.

05Validación y mensajes de error en el campo

El momento de validar cambia mucho la experiencia. Lo que mejor funciona en la mayoría de formularios es:

  1. Validar al salir del campo (evento blur), cuando la persona ya ha terminado de escribir.
  2. Quitar el error en cuanto se corrige, mientras escribe, para dar una sensación inmediata de progreso.
  3. Validar todo de nuevo al enviar, llevar el foco al primer campo con error y, en formularios largos, mostrar un resumen arriba con enlaces a cada campo.
  4. Mostrar en tiempo real solo lo que ayuda a construir el dato, como los requisitos de una contraseña, marcándolos en positivo a medida que se cumplen.

El texto del error es tan importante como su posición. Un buen mensaje dice qué ha pasado y cómo arreglarlo, en el idioma de quien lo lee: «Escribe el correo con el formato nombre@dominio.com» funciona mucho mejor que «Formato inválido». La redacción de estos mensajes tiene su propia guía, mensajes de error que ayudan.

Y un detalle que se olvida a menudo: si el formulario falla al enviarse, los datos se conservan. Volver a escribir todo es la forma más rápida de que alguien lo deje para otro día.

06El HTML que hace que el diseño funcione

Un campo bien dibujado necesita un código bien escrito para comportarse como se espera: que el teclado del móvil sea el adecuado, que el navegador autocomplete, que el lector de pantalla anuncie la etiqueta, la ayuda y el error. Este es el patrón que usamos:

html
<div class="field">
  <label for="tel">Teléfono</label>
  <p id="tel-help" class="field-help">Te llamaremos solo para confirmar la reserva.</p>
  <input
    id="tel"
    name="tel"
    type="tel"
    inputmode="tel"
    autocomplete="tel"
    required
    aria-describedby="tel-help tel-error"
    aria-invalid="true">
  <p id="tel-error" class="field-error">Escribe un teléfono de 9 cifras, por ejemplo 600 000 000.</p>
</div>

Lo que aporta cada pieza:

  • `label` con `for`: conecta la etiqueta con el campo. Además, al tocar la etiqueta se enfoca el campo, que es un área de toque extra muy útil en casillas y botones de opción.
  • `type` e `inputmode`: muestran el teclado adecuado en móvil (numérico para teléfonos, con arroba para correos, decimal para importes).
  • `autocomplete`: permite que el navegador rellene nombre, correo, dirección o tarjeta de un toque. Los valores están estandarizados en la especificación HTML (name, email, postal-code, cc-number…), y WCAG 2.2 los recoge en el criterio 1.3.5.
  • `aria-describedby`: hace que el lector de pantalla lea la ayuda y el error después de la etiqueta.
  • `aria-invalid`: comunica que el campo tiene un error. Se añade solo cuando lo hay.

Para agrupar botones de opción o casillas relacionadas se usa fieldset con su legend, que hace de etiqueta del grupo: «¿Cómo prefieres que te contactemos?».

07Ejemplo resuelto: el formulario de reserva de un restaurante

Un restaurante de Marbella con el que trabajamos pedía, para reservar, nombre, correo, teléfono, fecha, hora, número de personas y comentarios. Así quedó el diseño campo a campo:

  1. Fecha: control segmentado con «Hoy», «Mañana» y «Otra fecha», que abre un calendario solo si hace falta. La mayoría de reservas son para los dos primeros días.
  2. Hora: botones con los huecos disponibles en lugar de un desplegable. Se ve de un vistazo qué queda libre.
  3. Personas: campo numérico con botones − y + de 48 px, valor inicial 2.
  4. Nombre: un solo campo, autocomplete="name".
  5. Teléfono: type="tel", ayuda previa explicando para qué se usa.
  6. Correo: type="email" y autocomplete="email", validación al salir del campo.
  7. Comentarios (opcional): área de texto de tres líneas con un ejemplo en la ayuda: «Alergias, trona, celebración…».
  8. Botón: «Reservar mesa para 2», que actualiza el número al cambiar las personas.

El orden también se pensó: primero lo que define la reserva (cuándo y cuántos) y después los datos personales, cuando la persona ya ha visto que hay sitio. Rellenarlo en el móvil lleva menos de un minuto.

Un formulario bien diseñado se nota en lo que no pasa: nadie se queda dudando, nadie vuelve a escribir lo que ya escribió, nadie abandona en el tercer campo. Lo trabajamos así, campo a campo y hasta el código, en cada proyecto de diseño web y experiencia digital de SIMA. Si tu web tiene un formulario que sientes que podría rendir más, escríbenos y lo revisamos contigo.

Juan Navarro

Juan Navarro

Fundador y director creativo de SIMA, en Estepona. Más de 25 años dando forma a marcas, webs y espacios.

—FAQ

Preguntas
al margen.

Las dudas que suelen aparecer después de leer esta guía.

Hacer una pregunta

Es mejor no hacerlo. El placeholder desaparece en cuanto la persona empieza a escribir, así que al revisar el formulario ya no se sabe qué pedía cada campo, y su color gris claro rara vez alcanza el contraste necesario. Lo que funciona es una etiqueta visible siempre encima del campo y, si hace falta, un texto de ayuda debajo; el placeholder queda para un ejemplo de formato, y opcional.

Encima, en la gran mayoría de casos. Las etiquetas superiores permiten leer etiqueta y campo de un solo vistazo, funcionan igual en móvil y en escritorio y aguantan bien textos largos y traducciones. Las etiquetas a la izquierda tienen sentido en formularios de escritorio muy largos que se consultan más que se rellenan, como los paneles de configuración.

Para la mayoría de campos, al salir de ellos (cuando pierden el foco) y de nuevo al enviar. Validar mientras se escribe interrumpe con errores antes de que la persona haya terminado. La excepción útil son los campos donde la comprobación ayuda en tiempo real, como los requisitos de una contraseña, y en esos casos conviene mostrar el progreso en positivo.

Si casi todos los campos son obligatorios, marca solo los opcionales con la palabra «(opcional)», que se entiende mejor que cualquier símbolo. Si la mayoría son opcionales, marca los obligatorios. Si usas el asterisco, explica su significado al principio del formulario y acompáñalo del atributo required en el código para que también lo anuncien los lectores de pantalla.

Al menos 16 px. Además de leerse mejor, Safari en iOS hace zoom automático al enfocar un campo con texto más pequeño, lo que descoloca la página y obliga a reducir con los dedos. Con 16 px o más el formulario se mantiene estable.

Del papel al proyecto¿Lo hacemos realidad?