Hoy · Hoja de ruta
- 1. Aprende: Respecto a qué se calcula cada unidad, cómo se escriben los colores y qué hace legible un texto.
- 2. Haz: Define el sistema visual mínimo de tu proyecto.
- 3. Comprueba: El sitio es coherente entre sus cuatro páginas.
Antes de empezar · 5 minutos, sin apuntes
- Nombra las cuatro capas del box model de dentro hacia fuera.
- ¿Qué cambia
box-sizing: border-box? - Una caja de
300pxtienepadding: 20pxy dos bordes de2px: calcula su anchura con el modelo inicial.
No todo se mide en píxeles
| Unidad | Se calcula respecto a | Para qué la usamos |
|---|---|---|
px |
Nada, es absoluta | Bordes y detalles que no deben escalar |
rem |
El tamaño de fuente raíz del documento | Tamaños de texto y espaciados |
em |
El tamaño de fuente del propio elemento | Espacios que deben crecer con su texto |
% |
Una medida del contenedor, según la propiedad | Anchuras fluidas |
vw / vh |
El ancho y el alto del viewport | Con cuidado, y casi siempre dentro de clamp() |
rem
Root em: una medida relativa al tamaño de fuente del elemento raíz, que por defecto son 16px. Así, 1.5rem son 24px… hasta que alguien cambia el tamaño de letra de su navegador, y entonces todo tu diseño escala con él. Ese es el motivo real para usarlo.
Ahí está la diferencia importante con px: un font-size: 16px ignora la preferencia de quien necesita la letra más grande. Un 1rem la respeta.
El contraste entre rem y em es este:
.card { font-size: 1.25rem; padding: 1em; } /* padding = 1.25 × 20px */
.card small { font-size: 0.8rem; padding: 1em; } /* padding = 0.8 × ese texto */
em se acumula al anidar, lo cual sorprende cuando no lo esperas. Regla práctica: rem por defecto, em cuando quieras que algo escale con su propio texto.
Las unidades de viewport tienen una trampa
100vh parece «la altura de la pantalla», y en un móvil no lo es: las barras del navegador aparecen y desaparecen al hacer scroll, así que el valor cambia bajo tus pies y el contenido salta.
Existen svh, lvh y dvh para las variantes pequeña, grande y dinámica. La regla aplicable hoy es más simple: no uses una unidad porque sea moderna, úsala cuando sepas respecto a qué se calcula.
Colores
color: #1f2937; /* hexadecimal */
color: rgb(31 41 55); /* rojo, verde, azul */
color: hsl(215 28% 17%); /* tono, saturación, luminosidad */
Los tres describen el mismo color. hsl tiene una ventaja práctica cuando construyes una paleta: para conseguir una variante más clara del mismo color solo tienes que subir el último número, sin recalcular nada.
VS Code te muestra un cuadradito junto a cada color y te abre un selector al pulsarlo, con el que además puedes cambiar de notación.
El contraste no es una cuestión de gusto
Un texto gris claro sobre fondo blanco puede parecerte elegante y ser ilegible para bastante gente. El criterio está medido: el texto normal necesita una relación de contraste de al menos 4.5:1 con su fondo, y el texto grande, 3:1.
DevTools lo calcula: al abrir el selector de color de una declaración muestra la relación de contraste y advierte si no alcanza el mínimo. No es necesario estimarlo visualmente.
Tipografía
body {
font-family: system-ui, sans-serif;
font-size: 1rem;
line-height: 1.6;
}
h1 {
font-size: 2.5rem;
font-weight: 700;
line-height: 1.1;
}
Tres decisiones que casi nadie explica:
- La lista de
font-familyes una cadena de respaldo. El navegador usa la primera que tenga disponible.system-uitoma la tipografía del sistema operativo, así que carga instantánea y se ve nativa en cada dispositivo. - El
line-heightsin unidad —1.6, no1.6rem— es lo correcto: al no tener unidad, cada elemento lo multiplica por su tamaño de fuente, así que un titular grande no acaba con el interlineado de un párrafo. - Los titulares llevan menos interlineado que el texto. Un
line-height: 1.6en unh1de 2.5rem deja un hueco enorme entre sus dos líneas. Alrededor de 1.1 es lo habitual.
Una escala, no una lista de tamaños
No elijas cada tamaño por separado. Elige un paso y multiplica:
| Nivel | Tamaño |
|---|---|
| Texto | 1rem |
| h3 | 1.25rem |
| h2 | 1.75rem |
| h1 | 2.5rem |
Conviene una advertencia: no hace falta una tipografía distinta para cada zona. Una interfaz coherente usa una o dos familias y una escala corta. La variedad tipográfica no es riqueza: casi siempre es falta de decisión.
Tarea 5 · Tu sistema visual mínimo
Define para tu proyecto, y aplícalo a las cuatro páginas:
- Familia tipográfica y tamaño base.
- Una escala de encabezados de tres o cuatro pasos.
line-heightpara texto y para titulares.- Color de texto, color de fondo y un color principal.
- Dos o tres medidas de espaciado que vayas a repetir.
Comprueba el contraste de tu color de texto sobre tu fondo con DevTools. Si no llega a 4.5:1, oscurece hasta que llegue.
No buscamos todavía un diseño espectacular. Buscamos consistencia: que las cuatro páginas parezcan del mismo sitio.
Antes de cerrar · 2 minutos, sin mirar
- ¿Respecto a qué se calcula un
rem, y por qué importa? - ¿Por qué el
line-heightse escribe sin unidad? - ¿Cuál es el contraste mínimo para texto normal?
Ver respuestas
1 · Respecto al tamaño de fuente del elemento raíz. Importa porque respeta la preferencia de tamaño de letra de quien usa la web, cosa que un valor en píxeles ignora.
2 · Para que cada elemento lo multiplique por su propio tamaño de fuente en lugar de heredar una altura fija.
3 · 4.5:1 con su fondo. Para texto grande basta 3:1.