PX a REM: La Guía del Desarrollador para Tipografía Escalable

Aprende por qué las unidades rem mejoran la accesibilidad, cómo calcularlas y las mejores prácticas para tipografía responsive en CSS.

6 min de lectura CSS · Accesibilidad · Tipografía 6 secciones + FAQ

La elección entre px y rem en CSS no es solo una preferencia estilística — tiene consecuencias directas en la accesibilidad, el control del usuario y el diseño responsive. Millones de usuarios establecen un tamaño de fuente personalizado en las preferencias de su navegador, y una hoja de estilos escrita completamente en px ignora esa configuración por completo.

Esta guía explica la mecánica de cada unidad, la fórmula para convertir px a rem y las reglas prácticas para saber cuándo usar cada una en una base de código CSS real.

Entendiendo las unidades CSS (px, rem, em, vh)

CSS ofrece múltiples unidades de longitud para diferentes casos de uso. px (píxeles) es una unidad absoluta. rem (root em) es una unidad relativa basada en el font-size del elemento raíz (<html>). em es una unidad relativa basada en el font-size del elemento actual. vh y vw son relativas al viewport: 1vh = 1% de la altura del viewport. Cada unidad tiene casos de uso apropiados e inapropiados.

Herramienta gratuita Conversor PX a REM Convierte al instante valores en píxeles a rem con cualquier tamaño base

Por qué px es problemático para la accesibilidad

Los navegadores permiten a los usuarios establecer un tamaño de fuente predeterminado en preferencias (típicamente 16px por defecto, pero los usuarios pueden configurar 20px, 24px o más). Cuando configuras font-size: 16px en CSS, esto anula la preferencia del usuario. Esto viola el criterio de éxito WCAG 2.1 1.4.4 (Cambio de tamaño del texto), que requiere que el texto pueda redimensionarse hasta el 200% sin pérdida de contenido o funcionalidad.

Cómo funciona rem (root font-size)

La unidad rem siempre es relativa al font-size del elemento <html>. Por defecto, los navegadores lo establecen en 16px. Si un usuario aumenta el tamaño de fuente del navegador a 20px, entonces 1rem = 20px — todos los valores basados en rem se escalan proporcionalmente. Nunca establezcas font-size en <html> en píxeles (ej. html { font-size: 16px }) ya que esto anula el propósito. Usa un porcentaje: html { font-size: 112.5% } establece la base en 18px en un navegador predeterminado de 16px.

Herramienta gratuita Verificador de Contraste de Color Verifica las relaciones de contraste WCAG 2.1 junto con la accesibilidad del tamaño de fuente

Fórmula PX a REM

La fórmula es simple: rem = px / tamaño-fuente-base. Con la base predeterminada de 16px: 12px = 0.75rem, 14px = 0.875rem, 16px = 1rem, 18px = 1.125rem, 24px = 1.5rem, 32px = 2rem. En preprocesadores CSS (Sass, Less), puedes definir una función. En CSS moderno, las propiedades personalizadas y calc() pueden automatizar esto sin un preprocesador.

/* Función Sass */
@function rem($px) {
  @return #{$px / 16}rem;
}

/* Uso */
font-size: rem(18); /* → 1.125rem */

/* CSS puro */
:root {
  --base: 16;
}

.text {
  font-size: calc(18 / var(--base) * 1rem);
}

Cuándo usar rem vs em vs px

Usa rem para tipografía global (texto del cuerpo, encabezados, etiquetas) y para espaciado que deba escalar con la preferencia de tamaño de fuente del usuario. Usa em para el espaciado a nivel de componente que sea proporcional al font-size propio del componente (padding dentro de un botón). Usa px para bordes, sombras y elementos de layout que no deban escalar con el texto. Usa unidades viewport (vh, vw) para elementos de layout que deban relacionarse con el viewport.

Propiedades CSS personalizadas para la base rem

Un patrón común es establecer una propiedad CSS personalizada para el tamaño de fuente base. Establece font-size como porcentaje en <html> para respetar las preferencias del usuario, luego usa rem en todo. La función clamp() crea tipografía fluida que se escala entre valores mínimo y máximo basándose en el ancho del viewport, sin breakpoints de media query.

/* Base accesible */
html {
  font-size: 100%;
}

body {
  font-size: 1rem;
}

h1 {
  font-size: 2rem;
}

/* Tipografía fluida con clamp */
.hero-title {
  font-size: clamp(1.5rem, 4vw, 3rem);
}
Herramienta gratuita Generador de Paletas de Color Construye paletas de colores accesibles junto a tu sistema tipográfico

Preguntas Frecuentes

¿Cuál es la diferencia entre px, rem y em en CSS? +
px es una unidad absoluta que corresponde a píxeles del dispositivo. rem es relativo al font-size del elemento raíz (). em es relativo al font-size del elemento actual. rem es preferido para tipografía y espaciado porque respeta las preferencias del navegador del usuario.
¿Cómo convierto px a rem en CSS? +
Divide el valor en píxeles por el tamaño de fuente base (generalmente 16px): rem = px / 16. Ejemplos: 12px = 0.75rem, 18px = 1.125rem, 24px = 1.5rem, 32px = 2rem. La herramienta px-to-rem de PixCode automatiza esta conversión para cualquier tamaño base.
¿Por qué usar px para font-size es malo para la accesibilidad? +
Cuando font-size se establece en px, anula la preferencia de tamaño de fuente del navegador del usuario. Los usuarios que necesitan texto más grande no pueden anular los tamaños de fuente basados en px ajustando la configuración del navegador. El criterio WCAG 2.1 1.4.4 requiere que el texto sea redimensionable al 200%.
¿Cuánto es 1rem en píxeles? +
1rem equivale al font-size del elemento . En la mayoría de los navegadores, el valor predeterminado es 16px, por lo que 1rem = 16px por defecto. Si un usuario cambia el tamaño de fuente del navegador a 20px, entonces 1rem = 20px. Nunca establezcas html { font-size: 16px } — usa html { font-size: 100% }.
¿Debería usar rem o em para padding y margin? +
Usa rem para padding y margin que deben escalar con el tamaño de fuente global. Usa em para el espaciado interno de componentes que debe escalar proporcionalmente con el font-size del componente (ej. padding de botones). Así, si cambias el font-size de un componente, su padding interno se ajusta automáticamente.
¿Puedo usar rem para layout (width, height, grid)? +
Técnicamente sí, pero generalmente no se recomienda para anchos de layout. El layout debería usar porcentajes, unidades fr (grid) o unidades viewport. Usar rem para max-width (ej. max-width: 60rem para una columna de contenido) es común y funciona bien.
¿La herramienta px-to-rem de PixCode admite tamaños base personalizados? +
Sí. El conversor PX a REM de PixCode permite establecer cualquier tamaño de fuente base (predeterminado 16px pero configurable). También muestra la salida CSS lista para pegar y admite la conversión por lotes de múltiples valores a la vez.