CSS
La Guía Definitiva de Unidades CSS: Beneficios de Usar REM y EM
5 min read
La Guía Definitiva de Unidades CSS: Beneficios de Usar REM y EM
En los primeros días del desarrollo web, el píxel (px) era el rey indiscutible del tamaño en CSS. Los desarrolladores creaban diseños meticulosamente, asegurándose de que cada botón, encabezado y contenedor tuviera exactamente un número específico de píxeles de ancho y alto. Esto funcionaba perfectamente bien cuando todos navegaban por Internet en monitores de escritorio con resoluciones similares.
Sin embargo, la web moderna es un panorama muy diferente. Los usuarios acceden a sitios web en enormes monitores 4K, teléfonos inteligentes pequeños, dispositivos plegables y relojes inteligentes. Además, la accesibilidad web ha tomado (con razón) un lugar central, lo que significa que los sitios web deben adaptarse dinámicamente a los usuarios que aumentan manualmente el tamaño de fuente predeterminado de su navegador para facilitar la lectura.
Aquí es donde las unidades CSS relativas, específicamente rem (Root EM) y em, se vuelven absolutamente esenciales. Depender únicamente de píxeles estáticos crea diseños rígidos e inaccesibles. Al dominar rem y em, desbloqueas la capacidad de crear interfaces web fluidas, escalables y altamente accesibles.
En esta guía completa, exploraremos exactamente qué son estas unidades, en qué se diferencian, los profundos beneficios de usarlas y las mejores prácticas para implementarlas en el desarrollo frontend moderno.
El Problema con los Píxeles (px)
Antes de sumergirnos en las unidades relativas, es crucial entender por qué necesitamos alejarnos de los píxeles.
Un píxel (px) es una unidad de medida absoluta en CSS. Cuando declaras font-size: 16px;, le estás diciendo al navegador que represente ese texto exactamente a 16 píxeles, independientemente del tamaño de la pantalla del usuario o sus preferencias personales.
El Problema de Accesibilidad:
El problema principal con los píxeles es la accesibilidad. Los usuarios con problemas de visión a menudo cambian el tamaño de fuente predeterminado de su navegador (que típicamente es de 16px) a algo más grande, como 20px o 24px, para leer cómodamente. Si codificas (hardcode) la tipografía de tu sitio web en px, anulas la configuración del navegador del usuario. Tu sitio web se mantendrá obstinadamente en 16px, forzando al usuario a hacer zoom manualmente, lo que a menudo rompe el diseño de la página.
Por el contrario, las unidades relativas respetan las preferencias del usuario, ampliándose o reduciéndose armónicamente.
Entendiendo REM (Root EM)
El término rem significa "root em" (em raíz). Es una unidad de medida relativa que se escala según el tamaño de fuente del elemento raíz (root element) del documento, que es la etiqueta <html>.
Por defecto, en casi todos los navegadores web modernos, el tamaño de fuente raíz es exactamente 16px.
Por lo tanto (por defecto):
1rem=16px2rem=32px0.5rem=8px1.5rem=24px
¿Por qué es REM tan poderoso?
La brillantez de rem radica en su previsibilidad y su respeto por la accesibilidad.
Si un usuario va a la configuración de su navegador y cambia su tamaño de fuente predeterminado de 16px a 24px, el tamaño de fuente raíz cambia. Debido a que rem está vinculado directamente a la raíz, cada elemento en tu sitio web que use rem se escalará proporcionalmente hacia arriba.
Tu encabezado de 2rem, que antes era de 32px, se calculará automáticamente a 48px (2 * 24px). Tu sitio web se mantiene perfectamente proporcionado y, lo que es más importante, perfectamente legible para el usuario.
Mejores Casos de Uso para REM:
- Tipografía: Usa siempre
remparafont-size,line-heightyletter-spacing. Esto asegura que tu texto sea completamente accesible. - Espaciado Global: Usa
rempara propiedades de macro-diseño como brechas (gaps) en Grid, relleno (padding) de contenedores principales y márgenes de secciones. Esto asegura que el espacio en blanco de tu sitio respire proporcionalmente al tamaño del texto.
Entendiendo EM
Mientras que rem es relativo al elemento raíz <html>, em es relativo al tamaño de fuente de su elemento padre directo (parent element).
Si un contenedor padre tiene un tamaño de fuente de 20px, y configuras el tamaño de fuente de un elemento hijo (child) en 2em, el hijo se renderizará a 40px.
El Efecto Compuesto (La Trampa EM)
La característica más importante que hay que entender sobre em es que se compone (se multiplica). Debido a que mira a su padre inmediato, anidar (nesting) elementos con tamaños en em puede llevar a un crecimiento o encogimiento exponencial e inesperado.
Considera esta estructura HTML:
<div class="parent">
<div class="child">
<div class="grandchild">Hola</div>
</div>
</div>
Con este CSS:
.parent { font-size: 1.5em; } /* 1.5 * 16px (por defecto) = 24px */
.child { font-size: 1.5em; } /* 1.5 * 24px = 36px */
.grandchild { font-size: 1.5em; } /* 1.5 * 36px = 54px */
Como puedes ver, el tamaño del texto se sale de control rápidamente. Este efecto de capitalización hace que em sea notoriamente difícil de manejar para la tipografía global, razón por la cual los desarrolladores favorecen en gran medida rem para los tamaños de fuente.
El Verdadero Poder de EM: Componentes Modulares
Si em es tan complicado, ¿por qué usarlo en absoluto? La respuesta está en el diseño de componentes modulares y aislados.
Debido a que em es relativo al tamaño de fuente del padre, es increíblemente poderoso para dimensionar elementos alrededor del texto, como el relleno (padding), los márgenes y el radio de borde (border-radius) en botones, insignias (badges) y tooltips.
Imagina que estás diseñando un botón:
.button {
font-size: 1rem;
padding: 0.5em 1em;
border-radius: 0.25em;
}
.button-large {
font-size: 1.5rem;
}
Al usar em para el padding y el border-radius, esos valores están intrínsecamente vinculados al font-size del botón. Si quieres crear un .button-large (botón grande), solo necesitas cambiar el font-size. El relleno y el radio del borde se calcularán automáticamente y se ampliarán perfectamente para coincidir con el texto más grande. No es necesario redefinir manualmente el relleno para cada variante de tamaño de botón.
Mejores Casos de Uso para EM:
- Relleno y Márgenes de Componentes: Botones, cuadros de alerta (alerts) e insignias donde el espaciado interno debe escalar proporcionalmente al texto dentro de ellos.
- Iconos SVG: Si colocas un icono junto a un texto y le das una medida de
1em, siempre tendrá exactamente el mismo tamaño que la fuente que lo acompaña.
REM vs. EM: Una Hoja de Trucos Rápida
Para resumir cuándo usar qué unidad, ten en cuenta esta regla general:
- Usa
REMpara Dimensionamiento Global: Cualquier cosa que deba permanecer consistente en todo el diseño de la página debe usarrem. Esto incluye tamaños de fuente, espaciado genérico (márgenes entre secciones) y definiciones de cuadrícula de diseño (Grid).remte protege de la pesadilla de la capitalización. - Usa
EMpara Dimensionamiento Local: Cualquier cosa que deba escalar proporcionalmente al texto inmediatamente a su alrededor debe usarem. Esto incluye el relleno dentro de un botón, el espacio entre un ícono y el texto, o el tamaño de una viñeta SVG personalizada. - Usa
PXcon Moderación: Los píxeles deben reservarse para cosas que nunca, jamás deben escalar. Los ejemplos incluyen un borde sólido de1px, desplazamientos precisos de sombras de caja (box-shadow) o la definición del ancho máximo (max-width) de una imagen altamente específica.
Implementando el "Truco del 62.5%" (Y Por Qué Debes Tener Cuidado)
Históricamente, calcular los valores rem era un dolor para los desarrolladores. Si querías un tamaño de fuente de 14px, tenías que dividir 14 entre 16, lo que daba como resultado 0.875rem. Para facilitar las matemáticas, surgió un truco popular:
html {
font-size: 62.5%;
}
Debido a que el valor predeterminado del navegador es 16px, el 62.5% de 16 es exactamente 10. Al establecer el tamaño de fuente raíz en 10px, las matemáticas se vuelven increíblemente simples:
1.4rem=14px2.4rem=24px3.2rem=32px
¿Deberías usarlo? Si bien facilita las matemáticas, el desarrollo CSS moderno depende en gran medida de preprocesadores (SASS/LESS), variables CSS o frameworks de "primero utilidades" (utility-first) como Tailwind CSS, que manejan las matemáticas por ti. Además, anular el tamaño de fuente raíz con un porcentaje a veces puede causar comportamientos inesperados con complementos (plugins) de terceros que asumen que la raíz es 16px.
Si estás trabajando en un proyecto CSS puro (vanilla), el truco del 62.5% sigue siendo viable, pero para las pilas (stacks) modernas, generalmente es más seguro ceñirse al tamaño raíz del 100% (16px) predeterminado y dejar que tus herramientas manejen los valores rem fraccionarios.
Conclusión
La transición de píxeles a unidades relativas como rem y em es un rito de iniciación para todo desarrollador frontend. Si bien requiere un ligero cambio de paradigma en cómo piensas sobre las dimensiones, la recompensa es inmensa.
Al combinar estratégicamente rem para tipografías y diseños globales predecibles, y em para componentes de interfaz de usuario modulares y autónomos, escribirás un CSS más limpio y fácil de mantener. Lo más importante es que crearás experiencias web inclusivas y accesibles que se verán y funcionarán a la perfección para cada usuario, independientemente de su dispositivo o configuración de navegador.