Unidades en CSS: px, %, em, rem, vh y vw
📚 Contenido de la guía ⌃
- El mapa mental: absolutas vs relativas 🧭
- Cómo pensar las unidades de CSS
- 1. px: el ladrillo básico de la web
- 2. %: adaptarse al contenedor
- 3. em vs rem: unidades que “piensan” en texto
- 3.1 rem: sistema de diseño global
- 3.2 em: escala local según el padre
- 3.3 La “trampa” del em anidado
- 4. vh y vw: pensando en “pantallas completas”
- 4.1 Texto fluido con vw
- 5. Buenas prácticas para elegir unidades
- Conclusión: piensa en “a qué es relativo” cada número
¿Te ha pasado que algo se ve perfecto en tu pantalla… pero gigante en el celular? ¿O que cambias el tamaño de fuente y, de repente, todo el layout se desordena? La mayoría de esas “peleas” con el diseño vienen de una sola decisión: qué unidad usas en CSS.
En esta guía vamos a construir un mapa mental de las unidades más importantes de CSS:
px, %, em, rem, vh y vw. Verás cuándo usarlas, qué problema resuelven y qué errores típicos evitan. La idea no es memorizar definiciones, sino saber qué unidad elegir en cada situación para que tu interfaz sea fluida, legible y adaptable.
El mapa mental: absolutas vs relativas 🧭
Primero, una vista desde arriba. En CSS podemos pensar las unidades en dos grandes familias:
- Absolutas: no dependen del contexto de la página (por ejemplo,
px). - Relativas: cambian según el tamaño de su contenedor, de la fuente o de la ventana (
%,em,rem,vh,vw).
En esta guía veremos:
px: perfecto para bordes finos, iconos, sombras, detalles pixel-perfect.%: ideal para anchos que dependen del contenedor (layouts fluidos).em: relativo al tamaño de fuente del elemento padre (escala local).rem: relativo al tamaño de fuente raíz (html) (escala global).vhyvw: relativos al alto y ancho de la ventana (pantallas completas, secciones “hero”).
Cómo pensar las unidades de CSS
1px es 1 “pixel” lógico, da igual el contenedor.
width: 50%; depende del ancho del contenedor.
em y rem: se adaptan a la tipografía, muy útiles para accesibilidad.
vh y vw: ideales para secciones que ocupan “pantallas completas”.
| Unidad | Relativa a… | Uso típico |
|---|---|---|
px |
Pixel lógico de la pantalla | Bordes, iconos, sombras, detalles muy precisos. |
% |
Medida del contenedor (ancho/alto) | Layouts fluidos, columnas, imágenes responsivas. |
em |
Fuente del elemento padre | Padding/margins que escalan junto con el texto local. |
rem |
Fuente de html (raíz) |
Sistema global de tamaños (tipografía, espaciado). Muy usado en diseño moderno. |
vh |
Altura de la ventana (viewport) | Secciones que deben ocupar X% del alto de la pantalla. |
vw |
Ancho de la ventana (viewport) | Texto / contenedores fluidos según el ancho del dispositivo. |
1. px: el ladrillo básico de la web
px es la unidad más conocida. Representa un “pixel lógico” de la pantalla, y aunque los dispositivos tengan diferentes densidades, el navegador se encarga de escalarlo. Es una unidad absoluta: si dices 16px, serán 16px aquí y en la China.
Es ideal cuando necesitas precisión:
- Bordes finos (
1px,2px). - Iconos y elementos que deben alinearse al pixel.
- Sombras, outlines, detalles visuales.
Ejemplo simple con px:
.card {
width: 320px;
padding: 24px;
border-radius: 8px;
border: 1px solid #e5e7eb;
}
Problema: si usas px para todo (incluyendo fuentes y espaciado global), tu diseño puede ser menos accesible y menos flexible cuando el usuario cambia el tamaño de fuente del navegador.
2. %: adaptarse al contenedor
La unidad % no vive sola: siempre es “un porcentaje de algo”. Ese “algo” suele ser el tamaño del contenedor (por ejemplo, el width del elemento padre).
Ejemplo de columnas fluidas con %:
.layout {
display: flex;
gap: 16px;
}
.col {
width: 50%; /* la mitad del contenedor */
}
Visualmente:
Usa % cuando quieras que un elemento se adapte al tamaño de su padre (por ejemplo: imágenes responsivas, columnas que se achican en móviles, barras de progreso, etc.).
3. em vs rem: unidades que “piensan” en texto
Tanto em como rem son relativas al tamaño de fuente:
1em= tamaño de fuente del elemento padre.1rem= tamaño de fuente del elemento raíz (html).
Esto las hace perfectas para construir diseños que escalen cuando el usuario aumenta la fuente del navegador (accesibilidad).
3.1 rem: sistema de diseño global
Ejemplo: definimos un sistema base de tamaños con rem:
html {
font-size: 16px; /* 1rem = 16px */
}
h1 {
font-size: 2rem; /* 32px */
}
p {
font-size: 1rem; /* 16px */
}
.btn {
padding: 0.75rem 1.5rem; /* padding escala con la fuente raíz */
border-radius: 0.5rem;
}
Si el usuario aumenta el tamaño de fuente del navegador (por accesibilidad), todo el diseño crece de forma coherente.
3.2 em: escala local según el padre
em se calcula a partir del tamaño de fuente del elemento padre. Esto puede ser útil cuando quieres que el espaciado o los elementos internos crezcan junto con ese componente concreto.
.card {
font-size: 1rem; /* hereda de html = 16px */
padding: 2em; /* 2 * 16px = 32px de padding */
}
.card-small {
font-size: 0.875rem; /* 14px aprox */
padding: 2em; /* 2 * 14px = 28px de padding */
}
En ambos casos usamos 2em, pero el valor real cambia según el tamaño de fuente de cada tarjeta. Eso puede ser lo que quieres… o un dolor de cabeza si no lo recuerdas.
💡 Regla práctica: usa rem para tipografía y espaciado global, y deja em para casos puntuales donde necesites que todo un componente escale respecto a su propia fuente.
3.3 La “trampa” del em anidado
Ejemplo de cómo em puede crecer sin que lo notes:
.parent {
font-size: 1rem; /* 16px */
}
.child {
font-size: 1.25em; /* 20px (1.25 * 16) */
}
.grandchild {
font-size: 1.25em; /* 25px (1.25 * 20) */
}
Comentarios y Valoraciones
No hay comentarios aún. ¡Sé el primero en opinar!