Una interfaz intuitiva es la que se usa sin instrucciones: el usuario sabe qué leer primero, qué se puede pulsar y qué pasó después de pulsarlo. No depende de tener buen ojo. Son decisiones con nombre, y todas se escriben con las clases que ya conoces.

Cada sección termina con una captura del mismo contenido hecho dos veces: a la izquierda (o arriba) una versión mala y a la derecha (o abajo) la versión buena. El texto es idéntico; lo único que cambia es el diseño.

Mira primero, lee después

Antes de leer lo que falla, mira la captura unos segundos y busca tú los problemas de la versión mala. Después compara con el recuadro rojo.

Jerarquía visual

Lo primero que hace alguien al abrir una página es buscar dónde mirar. La jerarquía es el orden en que se lee, y se controla con tres cosas: el tamaño, el peso y el color.

<article class="space-y-2">
  <h2 class="text-2xl font-bold text-gray-900">Taller de fotografía</h2>
  <p class="text-sm text-gray-600">Sábado 17 de octubre · Punta Arenas</p>
  <p class="text-base leading-relaxed text-gray-700">
    Una mañana recorriendo la costanera para aprender a usar la luz natural.
  </p>
</article>
NivelQué esCómo se marca
1El título: lo que se lee primeroGrande, negrita y el color más oscuro
2El dato de apoyo: fecha, lugar, autorChico y gris
3El cuerpo: se lee si interesaTamaño normal y buen interlineado

Pocos niveles, bien separados

Con tres o cuatro tamaños de texto en todo el sitio basta (por ejemplo text-sm, text-base, text-2xl y text-4xl). Si todo es grande y en negrita, nada destaca: la jerarquía existe porque hay cosas menos importantes.

A la izquierda, una lista de talleres donde todo el texto es del mismo tamaño y en negrita, con colores al azar. A la derecha, la misma lista con un título grande, los nombres de los talleres medianos, la fecha chica en gris y la descripción en tamaño normal

Lo que falla en la mala

  • Todo tiene el mismo tamaño y la misma negrita: no hay por dónde empezar a leer.
  • El título de la sección tiene el mismo tamaño que todo lo demás: las mayúsculas no bastan para que destaque.
  • La fecha del segundo taller está en rojo sin ser un error, y llama más la atención que el nombre del taller.

La prueba de entrecerrar los ojos

Mira tu página con los ojos entrecerrados, hasta que no puedas leer el texto. Lo que todavía se distingue es lo que el usuario ve primero. Si no es el título ni el botón principal, la jerarquía está mal. Pruébalo con las capturas de esta página: en las buenas sigues viendo el título; en las malas, manchas que compiten entre sí.

Espacio y agrupación

El ojo entiende que las cosas cercanas van juntas. Por eso el espacio no es relleno: es la forma de decir qué pertenece a qué, sin dibujar ni una línea.

<section class="space-y-8">
  <article class="space-y-2">…</article>
  <article class="space-y-2">…</article>
</section>

space-y-2 deja 8 px entre las piezas dentro de cada tarjeta; space-y-8 deja 32 px entre tarjetas. La diferencia es lo que hace que se lean como dos bloques.

Más espacio entre grupos que dentro de ellos

Si el título de una tarjeta queda a la misma distancia de su texto que de la tarjeta de al lado, el ojo no sabe a cuál pertenece. El espacio entre grupos siempre es mayor que el espacio dentro de un grupo.

A la izquierda, una lista de proyectos donde cada descripción queda más lejos de su título que del título siguiente. A la derecha, la misma lista con cada título cerca de su descripción y más espacio entre un proyecto y otro

Lo que falla en la mala

Cada descripción está más lejos de su título que del título que viene después. Como el ojo agrupa lo cercano, parece que “Las recetas de mi abuela…” es la descripción de “Mapa de ciclovías”. La buena es exactamente el código de arriba.

space-y- y gap- hacen lo mismo en distintos lugares

gap-* separa los hijos de un flex o un grid. space-y-* separa hijos que están uno bajo otro en un contenedor normal, sin necesidad de activar Flexbox.

Color con intención

Cada color tiene que significar algo, y significar siempre lo mismo en todo el sitio.

ColorSe usa paraEjemplo
GrisesLa base: texto, fondos, bordestext-gray-900, border-gray-200
El color principalLo que se puede pulsar y la vista activabg-sky-700, text-sky-700
RojoSolo errorestext-red-700
VerdeSolo confirmaciones (“mensaje enviado”)text-green-700

El color no puede ser la única señal

Un campo con error marcado solo en rojo no le dice nada a quien no distingue ese color (uno de cada doce hombres tiene algún grado de daltonismo). El error lleva además un texto que explica qué pasó. Un enlace dentro de un párrafo lleva además su subrayado.

Contraste: que se pueda leer

El contraste es la diferencia de luz entre el texto y su fondo. La norma de accesibilidad web (WCAG) pide una relación de al menos 4,5 a 1 para el texto normal y 3 a 1 para el texto grande (24 px o más, o 19 px en negrita).

Combinación¿Se lee bien?
text-gray-900 sobre blancoSí, de sobra
text-gray-600 sobre blancoSí: buen gris para texto secundario
text-gray-400 sobre blancoNo: sirve para un ícono decorativo, no para texto
text-white sobre bg-sky-500No: el celeste es demasiado claro
text-white sobre bg-sky-700Sí

A la izquierda, un bloque de contacto con el título en rojo, el párrafo en gris muy claro, un enlace verde sin subrayar, un botón celeste claro con texto blanco y un mensaje de éxito en naranjo. A la derecha, el mismo bloque con texto oscuro, el enlace subrayado en azul, un botón azul oscuro y el mensaje de éxito en verde

Lo que falla en la mala

  • El párrafo en text-gray-400 y el botón bg-sky-400 con texto blanco no alcanzan el contraste mínimo.
  • El rojo aparece en el título y en “Respondo en menos de dos días”, y nada de eso es un error. Cuando haya un error de verdad, ya no se va a notar.
  • El enlace verde sin subrayado se confunde con un texto destacado, y la confirmación va en naranjo: los colores no significan nada fijo.

Mide el contraste en el inspector

En el panel de estilos (F12), haz clic sobre el cuadradito de color de la propiedad color. El selector que se abre muestra el contraste con el fondo y marca con un visto bueno si cumple. Revísalo en tus botones y en tu texto gris.

Tipografía legible

ReglaClases
Párrafos en 16 px o mástext-base (o text-lg en textos para leer con calma)
Interlineado holgado en los párrafosleading-relaxed
Líneas de no más de unos 70 caracteresmax-w-prose en el párrafo o su contenedor
Texto largo alineado a la izquierdatext-left (el centrado solo para títulos o frases cortas)
Una sola familia tipográfica, o dos como máximofont-sans en el body

Arriba, un párrafo largo centrado, en letra de máquina de escribir chica y con las líneas muy juntas, que ocupa todo el ancho de la pantalla, bajo un título en cursiva con serifa. Abajo, el mismo párrafo alineado a la izquierda, en letra normal más grande, con interlineado holgado y un ancho de línea cómodo

Lo que falla en la mala

Rompe las cinco reglas de la tabla: text-sm con leading-tight, líneas de más de 150 caracteres, el texto largo centrado (cada línea empieza en un lugar distinto) y tres familias mezcladas sin razón: con serifa, cursiva y de máquina de escribir.

Por qué las líneas largas cansan

Al terminar una línea muy larga, el ojo tiene que volver a la izquierda y encontrar el comienzo de la siguiente. Si la línea mide todo el ancho de un monitor, se pierde y vuelve a leer la misma línea. max-w-prose corta el párrafo a un ancho cómodo.

Componentes y sus estados

Un componente es una pieza que se repite con la misma forma: un botón, una tarjeta, un enlace del menú. Si todos los botones del sitio se ven iguales, el usuario aprende una vez qué es un botón.

Botones

<!-- Principal: la acción más importante de la vista -->
<button type="submit"
        class="cursor-pointer rounded-lg bg-sky-700 px-4 py-2 font-semibold text-white
               transition-colors hover:bg-sky-800 active:bg-sky-900
               focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-700
               disabled:cursor-not-allowed disabled:opacity-50">
  Enviar mensaje
</button>
 
<!-- Secundario: una acción alternativa, menos llamativa -->
<a href="index.html"
   class="inline-block rounded-lg border border-gray-300 px-4 py-2 font-semibold text-gray-700
          transition-colors hover:bg-gray-50
          focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-sky-700">
  Volver al inicio
</a>

El botón secundario es un <a> y lleva inline-block: un enlace es un elemento en línea, y el relleno de arriba y abajo de un elemento en línea no ocupa espacio, así que se encimaría con lo que tenga cerca.

EstadoPara qué le sirve al usuarioClases
NormalSe reconoce como algo que se puede pulsarColor principal, relleno, esquinas redondeadas
hover:”Esto responde”Un tono más oscuro
focus-visible:”Aquí estoy” (con teclado)Contorno visible
active:”Llegó el clic”Otro tono más oscuro
disabled:”Todavía no se puede”Más transparente y sin manito

Un solo botón principal por sección

Si hay tres botones azules juntos, el usuario no sabe cuál es el importante. Uno es el principal (relleno de color) y los demás son secundarios (solo borde) o simples enlaces.

El texto del botón dice lo que hace

“Enviar mensaje”, “Ver proyectos” o “Descargar CV” dicen qué va a pasar. “OK”, “Aceptar” o “Clic aquí” obligan a leer todo lo de alrededor para adivinarlo.

A la izquierda, tres botones azules de formas distintas que dicen Aceptar, Volver y Clic aquí, y debajo el botón Aceptar idéntico en sus cuatro estados. A la derecha, un botón principal azul que dice Enviar mensaje y uno secundario con borde que dice Volver al inicio, y debajo el botón en sus estados: normal, más oscuro con el cursor, con un contorno al usar el teclado y semitransparente desactivado

Lo que falla en la mala

  • Tres botones principales, cada uno con una forma distinta (esquinas, tamaño, mayúsculas): no se sabe cuál importa y no parecen del mismo sitio.
  • “Aceptar” y “Clic aquí” no dicen qué va a pasar.
  • El botón se ve igual en todos sus estados: no responde al cursor, no muestra dónde está el foco y no se nota cuando está desactivado.

transition-colors suaviza el cambio

Sin transición, el color cambia de golpe al pasar el cursor. transition-colors lo hace en una fracción de segundo, y el botón se siente más cuidado. Úsalo en todos los botones y enlaces, o en ninguno.

Tarjetas

<article class="overflow-hidden rounded-lg border border-gray-200 bg-white shadow-md">
  <img src="img/taller.jpg" alt="Grupo fotografiando la costanera al amanecer"
       class="h-48 w-full object-cover">
  <div class="space-y-2 p-6">
    <h3 class="text-lg font-semibold text-gray-900">Taller de fotografía</h3>
    <p class="leading-relaxed text-gray-700">Aprende a usar la luz natural.</p>
    <a href="taller.html" class="font-semibold text-sky-700 underline hover:text-sky-900">
      Ver detalles
    </a>
  </div>
</article>

object-cover recorta la imagen para llenar su caja sin deformarla: así todas las tarjetas tienen la foto del mismo alto aunque las imágenes originales no midan lo mismo. overflow-hidden hace que la foto respete las esquinas redondeadas.

La vista activa en el menú

<a href="index.html" aria-current="page"
   class="border-b-2 border-sky-700 font-semibold text-sky-700">
  Inicio
</a>

El enlace de la vista actual se distingue por tres señales a la vez (color, negrita y subrayado grueso), así que se nota aunque alguien no distinga el color. aria-current="page" es un atributo de HTML que no cambia cómo se ve, pero le avisa al lector de pantalla que ese enlace es la página en la que está.

Dos menús con los enlaces Inicio, Sobre mí y Contacto, estando en Sobre mí. En el malo, el enlace activo es apenas un tono más oscuro de celeste, y en la versión en grises no se distingue. En el bueno, el enlace activo va en azul, negrita y con una línea debajo, y en la versión en grises se sigue notando

Lo que falla en la mala

Todos los enlaces son celestes y el activo es apenas un tono más oscuro (text-sky-600 contra text-sky-500). Es la única señal, y en la versión en grises de abajo ya no se sabe en qué página estás. En la buena, los demás enlaces van en text-gray-700 y el activo conserva la negrita y la línea aunque se pierda el color.

Formularios usables

Un formulario es donde más se nota una interfaz mal pensada: es el único lugar en el que el usuario tiene que hacer algo, y cada duda es una razón para abandonarlo.

<div class="space-y-1">
  <label for="correo" class="block text-sm font-semibold text-gray-900">Correo</label>
  <input id="correo" name="correo" type="email" required
         placeholder="ana@correo.cl"
         class="w-full rounded-lg border border-gray-300 px-3 py-2 text-base
                focus:border-sky-700 focus:outline-2 focus:outline-sky-700">
  <p class="text-sm text-gray-600">Te responderemos a esta dirección.</p>
</div>

Y el mismo campo cuando hay un error:

<div class="space-y-1">
  <label for="correo" class="block text-sm font-semibold text-gray-900">Correo</label>
  <input id="correo" name="correo" type="email" required value="ana.correo.cl"
         class="w-full rounded-lg border-2 border-red-700 px-3 py-2 text-base
                focus:outline-2 focus:outline-red-700">
  <p class="text-sm text-red-700">Falta la @. Escríbelo como ana@correo.cl.</p>
</div>
ReglaPor qué
Un <label> visible en cada campoEl placeholder desaparece al escribir y el usuario olvida qué se pedía
El placeholder solo como ejemplo del formato”ana@correo.cl” ayuda; “Escribe tu correo” repite el label
Un foco notorio en el campo activoSe sabe dónde se está escribiendo
El error junto al campo y diciendo cómo arreglarlo”Correo inválido” obliga a adivinar; “Falta la @” no
El ancho del campo según lo que se esperaUn campo de edad no necesita todo el ancho
Marcar lo opcional si es la minoríaSi casi todo es obligatorio, se marca lo que no lo es: “Teléfono (opcional)”

A la izquierda, un formulario sin etiquetas, con campos de anchos distintos, un correo marcado solo con un borde rojo, textos de ejemplo en gris muy claro, el aviso Hay errores en el formulario y un botón OK. A la derecha, el mismo formulario con una etiqueta sobre cada campo, el error del correo explicado debajo del campo, el teléfono marcado como opcional, el campo activo resaltado y un botón Enviar mensaje

Lo que falla en la mala

  • Sin label: el primer campo ya tiene un nombre escrito y no se sabe qué pedía.
  • El correo tiene un borde rojo, pero nada dice qué está mal ni cómo arreglarlo. “Hay errores en el formulario” está lejos y tampoco lo dice.
  • Los textos de ejemplo en placeholder:text-gray-300 casi no se ven, y los * en todos los campos no aportan nada.
  • Campos de anchos al azar y un botón que dice “OK”.

Los mensajes de error los vas a generar en la Unidad 2

Por ahora el campo con error se escribe a mano, para diseñar cómo se va a ver. Cuando PHP valide el formulario, solo tendrá que decidir cuándo poner esas clases y ese mensaje.

Cuatro heurísticas para revisar una interfaz

Las heurísticas de Nielsen son diez reglas clásicas para evaluar si una interfaz es usable. Estas cuatro son las que más se aplican a un sitio como el tuyo:

HeurísticaQué pideEn tu sitio
Visibilidad del estadoQue el usuario sepa siempre dónde está y qué pasóVista activa marcada en el menú, estados de los botones, foco visible
ConsistenciaQue lo mismo se vea y se comporte igual en todas partesLa misma navbar, los mismos botones y la misma paleta en las tres vistas
Prevención de erroresEvitar el error antes de tener que avisarlotype="email", required, un select en vez de un texto libre, un ejemplo en el placeholder
Reconocer antes que recordarQue no haya que memorizar nadaLabels siempre visibles, enlaces con nombres claros, el menú a la vista

En una portada se juntan todos los problemas anteriores. Revísala con las heurísticas:

A la izquierda, una portada con la barra de navegación celeste, un encabezado con degradado rosado y amarillo, texto blanco poco legible, tres botones de colores distintos y tarjetas de proyecto con bordes negros, imágenes de alturas distintas y texto gris claro centrado. A la derecha, la misma portada con fondo claro, un título grande y oscuro, un botón principal y uno secundario, la vista activa marcada en el menú y tres tarjetas iguales y ordenadas

Lo que falla en la mala

  • Visibilidad del estado: el menú no marca en qué vista estás.
  • Consistencia: tres botones de tres colores, y tarjetas con imágenes de alturas distintas.
  • Reconocer antes que recordar: el título (“Bienvenidos a mi página web personal”) no dice de qué trata el sitio, y los botones dicen “Clic aquí”, “Ver más” y “OK”.
  • Además, texto blanco sobre un degradado claro y descripciones en gris muy claro: no alcanzan el contraste.

Pídele a otra persona que use tu sitio

Dale una tarea concreta (“envíame un mensaje”, “encuentra mi proyecto de fotos”) y mira sin ayudar. Cada vez que duda o busca, hay algo que arreglar. Es la prueba más barata y la que más enseña.

Checkpoint

Intenta responder antes de desplegar cada pregunta.