Elegir la unidad correcta en CSS es clave para lograr un diseño responsive, accesible y controlado. Aquí se explica, con ejemplos claros, cuándo usar px, %, rem, em, vw y vh, sus ventajas y sus límites en contenedores y texto. Además, verás por qué rem mejora la accesibilidad y cómo vw/vh simplifican ocupar toda la pantalla.
¿Por qué los pixels pueden limitar el diseño responsive?
Los pixels son una unidad fija: si defines un contenedor de 200px, se mantendrá así sin importar el tamaño de pantalla. Esto puede obligar a hacer scroll si el contenido es más ancho que el viewport. Es útil en casos puntuales, pero no siempre para definir el width de contenedores.
Tip práctico: con el inspector de elementos verás cómo todo cambia salvo el primer bloque fijo en 200px cuando reduces la pantalla.
¿Cómo usar porcentajes para contenedores flexibles?
El porcentaje se calcula con base en el contenedor padre. Si ese padre tiene dimensiones, tu caja puede adaptarse. Por ejemplo, 50% tomará la mitad del ancho disponible del padre, y se mantendrá proporcional al redimensionar la ventana.
Depende del tamaño del contenedor padre.
Permite contenedores flexibles y relativos.
Requiere que el padre tenga dimensiones definidas.
Estas unidades relativas resuelven necesidades distintas. rem y em se basan en el font-size; vw y vh usan el tamaño del viewport. Elegir bien evita comportamientos inesperados y mejora la accesibilidad.
¿Qué es rem y por qué mejora accesibilidad?
Un rem equivale siempre al font-size del documento base (HTML), que por defecto es 16 píxeles. No cambia, aunque alteres el font-size de contenedores internos. Es ideal para texto y también útil para dimensiones consistentes.
1rem = 16px por defecto en HTML.
No se ve afectado por font-size de contenedores internos.
Mejora la accesibilidad: si el usuario cambia el tamaño de fuente del dispositivo, el contenido en rem se ajusta.
Ejemplo:
.box-rem {border: 1px solid red;padding: 16px;width: 15rem;/* 15 x 16px = 240px por defecto */}
¿Qué es em y por qué puede acumularse?
Un em toma como referencia el font-size del contenedor padre inmediato. Si no hay uno definido, hereda el de HTML (16px). El problema: es acumulativo. Cambiar font-size en distintos niveles altera el valor efectivo de 1em, y puede dificultar llegar a valores exactos.
1em = font-size del padre.
Si el padre es 20px: 1em = 20px.
Con anidaciones, los cálculos se acumulan y pueden redondearse.
Ejemplo con acumulación:
.container{ font-size: 20px;/* aquí 1em = 20px */}.container.inner{ font-size: 24px;/* cambia la base dentro de .inner */}.box-em {border: 1px solid red;padding: 16px;width: 1em;/* vale 16px, 20px o más, según el padre */}
Consecuencia: para medidas de contenedor, rem suele ser más predecible que em.
¿Qué son vw y vh y cómo ocupan pantalla?
vw (view width) y vh (view height) miden en función del viewport: 1vw es 1% del ancho de la pantalla; 1vh es 1% de la altura. Son precisos para ajustar bloques a la pantalla y facilitan patrones comunes como secciones a pantalla completa.
30vw: ocupa el 30% del ancho del viewport.
20vh: ocupa el 20% de la altura del viewport.
Útiles para resolver alturas relativas antes complejas en CSS.
Habilidades que practicas aquí: - Definir dimensiones con px, %, rem, em, vw y vh según el objetivo. - Usar el inspector para verificar comportamientos en diferentes tamaños de pantalla. - Priorizar rem para tipografías y medidas previsibles; evitar acumulación indeseada de em. - Aplicar vw/vh para bloques adaptados al viewport, como un hero a pantalla completa.
¿Con cuál unidad te sientes más cómodo y por qué? Comenta cómo la aplicas en tus layouts y qué retos has resuelto.
Quería compartir una experiencia que tuve con la unidad de medida rem frente a los píxeles (px). Aunque sabía que rem era importante para la accesibilidad (como mencionó el profesor), la diferencia práctica y la razón por la que era superior no me quedaban claras. Tuve que consultar con Gemini para entenderlo realmente a fondo.
El hallazgo fue que el problema del px no es visible con el zoom normal, no es un problema que surge al hacer zoom, sino cuando el usuario cambia la configuración del tamaño de fuente base del navegador o del mobile (la configuración de accesibilidad).
Les recomiendo hacer la prueba, es reveladora:
Vayan a la configuración de su navegador (en Chrome: Configuración > Apariencia > "Tamaño de fuente").
Cámbienlo a "Muy Grande".
Prueben en dos webs: una moderna (yo usé Google Ads) y otra web tradicional, la de sus empresas o trabajos.
Mi resultado fue la clave para entenderlo:
Página de Google Ads: El texto escaló y se adaptó al tamaño "Muy Grande". (Usa rem)
Web con píxeles (px): El texto no creció en absoluto, ignorando el cambio de configuración del navegador.
Esto me parece sumamente importante. Particularmente, mi padre usa su teléfono con fuentes muy grandes, y este experimento me hizo caer en la cuenta del punto de accesibilidad. Usar px está limitando la capacidad de acceso de personas mayores o con problemas visuales.
La diferencia es crucial, y ahora que la he experimentado, recomiendo enfáticamente usar rem para la tipografía. ¡Espero que a ustedes también les sirva para clarificar este concepto!
Así puedes usar rem de una forma más sencilla e intuitiva:
html{font-size:62.5%;/* 1rem = 10px */}body{font-size:1.6rem/* Reset the styles */}
Lo que hace este snippet es definir el font-size del root element a 10px, pero esto afecta el tamaño default del html, por lo que en body hay que reestablecerlo a 1.6rem (16px).
La principal diferencia es su referencia. rem se basa en el tamaño de fuente del elemento HTML raíz (normalmente 16px por defecto), mientras que em se basa en el tamaño de fuente de su elemento padre, lo que puede causar acumulación de valores. Por esto, la clase recomienda usar rem por su predictibilidad y accesibilidad.
No es que rem sea mejor que em, ya que estas dos unidades de medida se complementan.
Para que quede claro como funciona la acumulación de em, hay verla como un multiplicador en cascada.
Hay que usar rem para definir tamaños tipográficos y escalas globales, mientras que em se usa para que los elementos escalen proporcionalmente a su propio texto.