ToolHub
View All Posts

Guía de conversión de unidades CSS: px, rem, em, vw, vh explicados

Elegir la unidad CSS correcta es una de las decisiones más impactantes al escribir hojas de estilo. La unidad que elijas determina cómo se escalan los elementos en diferentes tamaños de pantalla, cómo responden a las preferencias del usuario (como la configuración del tamaño de fuente del navegador) y cuán predecible se comporta tu layout. Sin embargo, muchos desarrolladores usan píxeles por defecto por costumbre, perdiendo la flexibilidad y los beneficios de accesibilidad que ofrecen las unidades relativas. Esta guía cubre todas las unidades CSS principales, explica cuándo usar cada una, muestra cómo convertir entre ellas y proporciona mejores prácticas para el diseño responsive moderno.

Comprendiendo las categorías de unidades CSS

Las unidades CSS se dividen en dos categorías principales: unidades absolutas y unidades relativas. Las unidades absolutas tienen un tamaño físico fijo, mientras que las unidades relativas derivan su valor calculado de otro punto de referencia. Comprender esta distinción es fundamental para tomar decisiones informadas sobre las unidades.

Unidades absolutas

Las unidades absolutas son medidas de tamaño fijo. La unidad absoluta más utilizada en desarrollo web es el píxel (px). Otras unidades absolutas incluyen puntos (pt), centímetros (cm), milímetros (mm) y pulgadas (in). Estas unidades se utilizan principalmente para hojas de estilo de impresión o cuando necesitas medidas que no cambien según el contexto. En CSS basado en pantalla, px es la única unidad absoluta que usarás con frecuencia.

Unidades relativas

Las unidades relativas calculan su valor final basándose en un valor de referencia. em es relativo al tamaño de fuente del elemento actual, rem es relativo al tamaño de fuente del elemento raíz, vw y vh son relativos a las dimensiones del viewport, y los porcentajes son relativos al elemento padre. Las unidades relativas son la piedra angular del diseño responsive y accesible porque permiten que tu layout se adapte automáticamente a diferentes contextos.

Píxeles (px): La unidad de referencia

El píxel es la unidad CSS más intuitiva porque se asigna directamente a los píxeles de la pantalla (con algunas consideraciones sobre la relación de píxeles del dispositivo). Los valores px siempre son iguales independientemente del contexto, lo que los hace predecibles y fáciles de entender. Sin embargo, esta previsibilidad tiene un costo: los tamaños basados en píxeles no se escalan cuando los usuarios cambian el tamaño de fuente predeterminado del navegador, lo que crea problemas de accesibilidad.

Cuándo usar px

Cuándo evitar px

Evita usar px para tamaños de fuente, padding, margin y dimensiones de layout que deberían adaptarse a las preferencias del usuario. Los usuarios que aumentan el tamaño de fuente del navegador a 20px esperan que todo el texto se escale en consecuencia, pero los tamaños de fuente basados en px no responden a este cambio.

rem: Tamaño relativo a la raíz

). En la mayoría de los navegadores, el tamaño de fuente raíz predeterminado es 16px, por lo que 1rem = 16px, 0.5rem = 8px, 2rem = 32px. La ventaja clave de rem es que se escala cuando los usuarios cambian el tamaño de fuente predeterminado del navegador, haciéndolo la mejor opción para la accesibilidad.

Convertir px a rem

La fórmula de conversión es simple: divide el valor en píxeles por el tamaño de fuente raíz.

rem = px / root-font-size

// With default root font size of 16px:
12px = 12 / 16 = 0.75rem
16px = 16 / 16 = 1rem
24px = 24 / 16 = 1.5rem
32px = 32 / 16 = 2rem
48px = 48 / 16 = 3rem

El truco del 62.5%

Muchos desarrolladores encuentran tediosa la matemática de dividir por 16. Un truco popular es establecer el tamaño de fuente raíz al 62.5%, haciendo que 1rem sea igual a 10px. Esto simplifica el cálculo mental: 14px se convierte en 1.4rem, 24px en 2.4rem, y así sucesivamente.

html {
    font-size: 62.5%; /* 1rem = 10px */
}

body {
    font-size: 1.6rem; /* 16px */
}

h1 {
    font-size: 3.2rem; /* 32px */
    margin-bottom: 1.6rem; /* 16px */
}
Nota de accesibilidad: El truco del 62.5% funciona porque aún respeta las preferencias de tamaño de fuente del usuario. Establecer font-size: 62.5% en el elemento raíz es el 62.5% del valor predeterminado elegido por el usuario, por lo que si el usuario configura su navegador a 20px, el elemento raíz se convierte en 12.5px y todos los valores rem se escalan proporcionalmente. Nunca establezcas el tamaño de fuente raíz en un valor px fijo, ya que esto anula las preferencias del usuario.

em: Tamaño relativo al contexto

La unidad em es relativa al tamaño de fuente del elemento actual (o para propiedades distintas de font-size, relativa a su elemento padre). Esto significa que 1em es igual al tamaño de fuente actual, y los valores em se componen cuando los elementos están anidados. Este comportamiento de composición puede ser tanto poderoso como confuso.

El problema de la composición

/* Parent: font-size 16px */
.parent {
    font-size: 1em; /* 16px */
}

/* Child: 1.2em of parent's 16px = 19.2px */
.child {
    font-size: 1.2em;
}

/* Grandchild: 1.2em of child's 19.2px = 23.04px */
.grandchild {
    font-size: 1.2em;
}

Cada elemento anidado multiplica el tamaño de fuente, lo que lleva a un crecimiento exponencial. Por eso rem es generalmente preferible para tamaños de fuente. Sin embargo, em destaca en casos de uso específicos donde quieres escalado a nivel de componente.

Cuándo usar em

Unidades de viewport: vw, vh, vmin, vmax

Las unidades de viewport son relativas a las dimensiones de la ventana del navegador. 1vw equivale al 1% del ancho del viewport, 1vh equivale al 1% de la altura del viewport. vmin es el menor entre vw y vh, vmax es el mayor. Estas unidades son esenciales para crear layouts que respondan al espacio de pantalla disponible.

Casos de uso comunes de unidades de viewport

Caso de usoUnidadEjemplo
Sección hero de pantalla completavhheight: 100vh
Tipografía fluidavw + clampfont-size: clamp(1rem, 2.5vw, 2rem)
Layout lado a ladovwwidth: 50vw
Elemento cuadradovminwidth: 20vmin; height: 20vmin
Superposición de viewport completovw + vhwidth: 100vw; height: 100vh

El problema de vh en móviles

En navegadores móviles, 100vh no siempre equivale a la altura visible del viewport. La barra de direcciones y los controles de navegación del navegador ocupan espacio, pero 100vh incluye el área detrás de estos controles. Esto hace que el contenido en la parte inferior de las secciones a altura completa quede recortado. El CSS moderno proporciona dvh (altura de viewport dinámica) como solución, que tiene en cuenta las barras de herramientas dinámicas. Alternativamente, usa JavaScript para establecer una propiedad personalizada CSS basada en window.innerHeight.

/* Modern approach */
.hero {
    height: 100dvh; /* Dynamic viewport height */
}

/* Fallback for older browsers */
.hero {
    height: 100vh;
    height: 100dvh;
}

Nuevas unidades de viewport: svh, lvh, dvh

CSS introdujo tres nuevas unidades de altura de viewport para resolver el problema del viewport en móviles:

Las mismas variantes pequeño/grande/dinámico existen para el ancho (svw, lvw, dvw) y las unidades mín/máx (svmin, lvmin, dvmin, etc.). Usa dvh para layouts de pantalla completa en móviles, svh cuando necesites garantizar que el contenido sea visible sin scroll, y lvh cuando quieras llenar el máximo espacio posible.

Tipografía fluida con clamp()

La función CSS clamp() es un cambio de juego para la tipografía responsive. Acepta tres valores: un valor mínimo, un valor preferido y un valor máximo. El navegador elige el valor preferido pero lo restringe entre el mínimo y el máximo.

/* Font size scales from 1rem to 2.5rem based on viewport */
h1 {
    font-size: clamp(1rem, 2.5vw + 0.5rem, 2.5rem);
}

/* Padding scales proportionally */
.container {
    padding: clamp(1rem, 3vw, 3rem);
}

Este enfoque te da los beneficios del escalado basado en viewport sin el riesgo de que el texto se vuelva demasiado pequeño en móviles o demasiado grande en escritorio. Elimina la necesidad de breakpoints de media queries para tamaños de fuente, reduciendo significativamente la complejidad del CSS.

Tabla de referencia de conversión

Usa esta tabla como referencia rápida para conversiones comunes. Todos los valores asumen un tamaño de fuente raíz de 16px y un viewport de 1920x1080.

pxremem (a 16px)vw (1920px)% (de 16px)
8px0.5rem0.5em0.417vw50%
12px0.75rem0.75em0.625vw75%
16px1rem1em0.833vw100%
20px1.25rem1.25em1.042vw125%
24px1.5rem1.5em1.25vw150%
32px2rem2em1.667vw200%
48px3rem3em2.5vw300%
64px4rem4em3.333vw400%

Mejores prácticas de unidades CSS

¿Necesitas convertir rápidamente entre unidades CSS? Prueba nuestro conversor gratuito de unidades CSS en línea. Convierte instantáneamente entre px a rem, em a px, unidades de viewport y más.

Conversor de unidades CSS

Preguntas frecuentes

¿Debo usar px o rem para el tamaño de fuente?

Usa rem para tamaños de fuente en la mayoría de los casos. Las unidades rem son relativas al tamaño de fuente raíz, por lo que se escalan cuando los usuarios cambian el tamaño de fuente predeterminado del navegador. Esto mejora la accesibilidad. Usa px solo para detalles finos como bordes, sombras o cuando necesites precisión a nivel de píxel que no debe escalar con las preferencias del usuario.

¿Cuál es la diferencia entre em y rem?

em es relativo al tamaño de fuente del elemento padre, mientras que rem es relativo al tamaño de fuente raíz (normalmente 16px). em se compone al anidar, lo que puede causar cambios de tamaño inesperados. rem siempre hace referencia a la misma base, haciéndolo más predecible. Usa rem para dimensiones globales y em para escalado a nivel de componente donde quieres que los elementos anidados escalen proporcionalmente.

¿Cómo convertir px a rem?

Divide el valor en píxeles por el tamaño de fuente raíz (normalmente 16px). Por ejemplo, 24px / 16 = 1.5rem. La fórmula es: rem = px / root-font-size. Si el tamaño de fuente raíz es 16px, entonces 1rem = 16px, 0.5rem = 8px, 2rem = 32px. Puedes usar un conversor de unidades CSS en línea para conversiones rápidas.

¿Cuándo debo usar unidades de viewport (vw, vh)?

Usa unidades de viewport cuando quieras tamaños relativos a la ventana del navegador. Los casos de uso comunes incluyen secciones hero de pantalla completa (100vh), tipografía que se escala con el ancho del viewport (clamp con vw) y layouts que deben llenar el espacio disponible. Evita usar vw solo para texto de cuerpo, ya que puede volverse demasiado pequeño en móviles o demasiado grande en pantallas anchas.

¿Cuál es la mejor unidad CSS para diseño responsive?

No hay una única mejor unidad. Una combinación funciona mejor: rem para tamaños de fuente y espaciado, porcentajes para anchos dentro de contenedores, unidades de viewport para elementos de pantalla completa, y CSS clamp() para tipografía fluida que se escala entre tamaños mínimo y máximo. La clave es entender a qué hace referencia cada unidad y elegir en consecuencia.

ToolHub's collection of 300+ free online tools including CSS unit converters, formatters, and more — no sign-up required.