Dimensionamiento y unidades

Estableces un tamaño de fuente en píxeles, publicas la página, y un lector que ha aumentado el texto de su navegador para mayor comodidad no ve ningún cambio. Le das a una tarjeta un ancho fijo y se desborda en un teléfono. Ambos casos se reducen a la misma pregunta: cuando escribes un número en CSS, ¿contra qué se mide ese número? Algunas unidades son fijas, algunas se escalan a una fuente, algunas se escalan al padre, y algunas se escalan a la pantalla. Una vez que sabes cuál es cuál, dejas de adivinar y empiezas a elegir la unidad que hace el trabajo.
Unidades absolutas versus relativas
Las unidades de CSS se dividen en dos familias. Una unidad absoluta es un tamaño fijo que nunca cambia: px (un píxel) es la que encontrarás en todas partes. Una unidad relativa es un tamaño que se escala a otra cosa, como el tamaño de fuente del lector o el ancho de la pantalla.
Piensa en medir una habitación. Los centímetros son absolutos: una pared mide 400 cm si eres alto o bajo. "Tres de mis pasos" es relativo: depende de quién esté caminando. Las unidades absolutas te dan control exacto; las unidades relativas permiten que la página se adapte a la persona que la observa.
Esa adaptación importa. Algunos lectores establecen un tamaño de texto predeterminado más grande porque es más fácil para sus ojos. Si dimensionas tu texto en una unidad relativa, su configuración se mantiene y la página crece para adaptarse a ellos. Si lo bloqueas en píxeles, se queda igual e los ignora.
px son un tamaño fijo que nunca cambia. Las unidades relativas se escalan a algo más, como el tamaño de fuente del lector o el ancho de pantalla. Las unidades relativas permiten que la página se adapte a la persona que la observa, por lo que importan para los lectores que establecen un tamaño de texto más grande. Píxeles y cuándo están bien
Un píxel (px) es una pequeña unidad de longitud fija. Es la más directa de razonar, porque 16px siempre es 16px. Eso la hace una buena opción para cosas pequeñas que deben mantener el mismo tamaño sin importar qué: el grosor de un borde, una pequeña esquina redondeada, un icono fijo.
.card {
border: 1px solid #ccc; /* un borde fino, siempre 1px */
border-radius: 8px; /* una esquina redondeada fija */
}El inconveniente es que un píxel no se preocupa por el lector. Si alguien ha configurado su navegador para mostrar texto más grande, un encabezado bloqueado en 24px se queda en 24px e ignora su elección. Por eso px es una buena opción para bordes y pequeños detalles, pero no es la unidad que quieres para el texto.
px) es un tamaño fijo, así que 16px siempre es 16px. Eso la hace una buena opción para cosas pequeñas que deben permanecer en su lugar, como un borde 1px o una pequeña esquina redondeada. La compensación es que px ignora a un lector que ha establecido texto más grande, por lo que no es la unidad que quieres para las palabras en la página. em y rem
Dos unidades relativas se escalan a un tamaño de fuente: em y rem. La que debes usar es rem. Se mide contra el tamaño de fuente raíz de la página, que es el tamaño de texto base establecido en todo el documento (16px de manera predeterminada). Así que 1rem es 16px, 1.5rem es 24px, y 2rem es 32px.
h1 {
font-size: 2rem; /* 2 x 16px = 32px */
}
p {
font-size: 1rem; /* 16px, el tamaño base */
margin-bottom: 1.5rem; /* 24px de espacio debajo */
}Porque rem está vinculado a ese único tamaño raíz, es predecible: 1.5rem significa lo mismo en todas partes de la página. Y cuando un lector aumenta su tamaño de fuente predeterminado, todo lo dimensionado en rem crece junto. La otra unidad, em, se escala al tamaño de fuente del elemento en su lugar, lo que puede enredarse, así que comienza con rem y raramente te sorprenderás.
rem y em ambas se escalan a un tamaño de fuente, y la que debes comenzar es rem. Se mide contra el tamaño raíz de la página, que es 16px de manera predeterminada, así que 1.5rem es 24px y significa lo mismo en todas partes. em se escala al tamaño de fuente del elemento en su lugar, lo que puede enredarse, así que llega a rem primero. Porcentajes
Un porcentaje (%) dimensiona un elemento contra su padre. Para ancho, width: 50% significa la mitad del ancho de la caja en la que se sienta el elemento, sea cual sea el ancho.
.sidebar {
width: 25%; /* un cuarto del ancho del padre */
}
.content {
width: 75%; /* los tres cuartos restantes */
}Esto es lo que hace un diseño fluido: porque los anchos son fracciones del padre, se encogen y crecen a medida que lo hace el padre. Cambia el tamaño de la ventana y una columna 50% permanece a media anchura en lugar de derramarse por el borde como lo haría una columna fija de 500px. Esa flexibilidad es por qué los porcentajes aparecen tan a menudo en el diseño responsivo.
width: 50% es la mitad del ancho de la caja en la que se sienta el elemento. Eso hace que las columnas sean fluidas: cambia el tamaño de la ventana y crecen y se encogen en lugar de derramarse. Es una de las herramientas principales detrás de diseños que se ajustan a cualquier pantalla. Unidades de viewport
Las unidades de viewport se dimensionan contra la ventana del navegador en sí. vw es un porcentaje del ancho de la ventana gráfica y vh es un porcentaje de la altura de la ventana gráfica, donde la ventana gráfica es el área visible de la página. Así que 100vw es el ancho completo de la ventana y 100vh es su altura completa.
.hero {
height: 100vh; /* llena toda la altura de la pantalla */
}Este es el estándar para una sección de pantalla completa, como un banner de desembarque que debe llenar la ventana sea cual sea su tamaño. Porque las unidades rastrean la ventana, la sección permanece en pantalla completa cuando alguien cambia el tamaño o gira su dispositivo, sin que establezca una altura de píxel fija que solo sería correcta en una pantalla.
vw y vh se dimensionan contra la ventana del navegador: 100vw es su ancho completo y 100vh es su altura completa. Son estándar para una sección de pantalla completa como un banner de desembarque, porque permanece en pantalla completa cuando la ventana cambia de tamaño en lugar de estar bloqueada a una altura de píxel. 
