Menu

Width y height en CSS: min, max, % y auto explicados

width y height definen el tamaño de la caja de un elemento. Aprende los tamaños fijos y en porcentaje, por qué height: 100% a menudo no hace nada, min-height y max-width para layouts flexibles, auto vs 100% y las palabras clave fit-content.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Definir width y height

width y height definen el tamaño de la caja de contenido de un elemento. Por defecto, el padding y el borde se suman por fuera de ese tamaño.

La caja mide 260 por 100 píxeles: 240 por 80 de contenido más 10px de padding en cada lado. Con box-sizing: border-box, mediría exactamente 240 por 80; la página del modelo de caja explica los dos casos.

Valores

ValorEjemploSignificado
autowidth: autoEl valor por defecto. Los bloques ocupan el ancho de su contenedor; la altura se ajusta al contenido
Longitud300px, 20remUn tamaño fijo
Porcentaje50%Del ancho del bloque contenedor (para width) o de su alto (para height)
Unidades de viewport100vh, 50vw, 100dvhDe la ventana del navegador
min-contentwidth: min-contentLo más angosto posible, decide la palabra más larga
max-contentwidth: max-contentTan ancho como el contenido en una sola línea
fit-contentwidth: fit-contentComo max-content, pero nunca más ancho que el contenedor

Por qué height: 100% no hace nada

Una height en porcentaje necesita un padre con una altura definida del cual ser porcentaje. Cuando la altura del padre es auto, que es el caso normal, el height: 100% del hijo también se comporta como auto.

El primer hijo solo mide lo que su texto. El segundo ocupa todo su padre porque el padre tiene una altura. Para que una página entera funcione con porcentajes, todos los ancestros hasta html y body necesitan una altura, y por eso la mayoría de los layouts usan flexbox o grid: sus hijos se estiran para ocupar el espacio sin ningún porcentaje.

min-height y max-width: tamaños que se adaptan

Los tamaños fijos se rompen con facilidad: una altura fija se desborda cuando el texto es más largo de lo esperado, y un ancho fijo es demasiado ancho para un teléfono. Las propiedades min- y max- definen límites en lugar de tamaños exactos.

PropiedadSignificado
min-widthNunca más angosto que esto
max-widthNunca más ancho que esto
min-heightNunca más bajo que esto, pero puede crecer
max-heightNunca más alto que esto (el contenido extra se desborda)

En una pantalla de menos de 360px, como la de un teléfono, las tarjetas se encogen con ella, porque max-width es solo un techo.

Cuando se aplican a la vez un tamaño y un límite, ganan los límites: max-width le gana a width, y min-width le gana a max-width.

width: auto vs width: 100%

En un elemento de bloque, dejar width en auto es casi siempre lo que quieres. auto hace caber toda la caja, padding y borde incluidos, en el contenedor. 100% hace que el contenido sea tan ancho como el contenedor y luego suma el padding y el borde por encima:

width: 100% sigue siendo útil en elementos que por defecto no son bloques (un <input>, un <img>, un inline-block), idealmente junto con box-sizing: border-box.

Ajustar el tamaño al contenido: fit-content

Para que un bloque sea solo tan ancho como su texto, sin cambiarlo a inline-block, usa fit-content:

fit-content con margin-inline: auto centra una etiqueta o un bloque tipo botón que mantiene exactamente el ancho de su texto.

Secciones de altura completa y unidades de viewport

vh es el 1% de la altura del viewport y vw el 1% de su ancho. En los teléfonos, la barra de direcciones del navegador crece y se encoge al desplazarte, así que 100vh puede ser más alto que lo que ves. La unidad dinámica dvh sigue el área visible, y svh usa la altura visible más pequeña:

.hero {
  min-height: 100vh;  /* fallback */
  min-height: 100dvh; /* follows mobile toolbars */
}

Usa min-height, no height, para las secciones de pantalla completa, así una pantalla pequeña con mucho texto sigue teniendo una sección que crece. Una altura fija con contenido que no cabe hace que se desborde, y de eso se encarga la página de overflow en CSS.

Errores comunes

  • height: 100% dentro de un padre sin altura. Actúa como auto. Dale una altura al padre o usa flex o grid.
  • width: 100% más padding. El elemento se sale de su contenedor. Deja los anchos de bloque en auto, o usa box-sizing: border-box.
  • Alturas fijas en contenedores de texto. Usa min-height para que un texto más largo o una fuente más grande no se desborde.
  • width en un elemento inline. <span> y <a> ignoran width y height; hazlos inline-block o block.
  • width: 1200px en el contenedor de la página. Genera desplazamiento lateral en todos los teléfonos. Usa max-width: 1200px.

Preguntas frecuentes

¿Por qué no funciona height: 100%?

Una altura en porcentaje es un porcentaje de la altura del padre, y solo funciona cuando esa altura está definida. Si la altura del padre es auto (depende de su contenido), el porcentaje se trata como auto. Dale una altura al padre, o usa flexbox o grid, que estiran a los hijos sin porcentajes.

¿Qué diferencia hay entre width: 100% y width: auto?

En un elemento de bloque, auto ocupa el contenedor incluidos su padding y su borde. width: 100% hace que el ancho del contenido sea igual al del contenedor, así que con el box-sizing: content-box por defecto cualquier padding o borde hace que el elemento se desborde.

¿Qué hace min-height en CSS?

Define la altura mínima que puede tener un elemento y le sigue permitiendo crecer con su contenido. min-height: 200px le da 200px a una tarjeta vacía, y una tarjeta con más texto se vuelve más alta en lugar de desbordarse, algo que una height fija no permitiría.

¿Qué diferencia hay entre width y max-width?

width define un tamaño exacto. max-width define un límite superior: el elemento puede ser más angosto, por ejemplo en un teléfono, pero nunca más ancho. width: 100%; max-width: 600px; ocupa las pantallas pequeñas y se detiene en 600px en las grandes.

¿Cómo hago que un elemento ocupe toda la altura de la pantalla?

Usa min-height: 100vh (o 100dvh para tener en cuenta las barras del navegador en el celular). min-height en lugar de height permite que la sección crezca si su contenido es más alto que la pantalla.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR