How to make div not take full height?

Controlando Alturas en Web: Guía Esencial

03/01/2018

Valoración: 4.94 (8100 votos)

En el fascinante mundo del diseño web, lograr que cada elemento se vea exactamente como lo imaginas es clave. Y uno de los retos más comunes, similar a encontrar el tono de base perfecto, es conseguir que tus contenedores, especialmente los div, tengan la altura justa. A veces necesitas que llenen toda la pantalla, otras que se ajusten a lo que hay dentro, y a veces una mezcla de ambos. Entender cómo manejar la propiedad height en CSS es fundamental para crear diseños web flexibles y que se vean bien en cualquier dispositivo.

Vamos a desglosar las técnicas más importantes para controlar la altura de tus elementos, abordando tanto la necesidad de que un div ocupe el 100% del espacio disponible como la de que simplemente se adapte a su contenido.

How to make a div take full height?
This solution uses JavaScript to calculate the available height of the viewport using window. innerHeight and then sets a CSS custom variable of 1% of the available height. The custom variable can be used to set the height of a div to 100% of the available viewport.15 mar 2023

¿Cómo Hacer que un Elemento Llene la Altura Completa?

Uno de los deseos más frecuentes es que un div, o cualquier otro elemento de bloque, ocupe toda la altura visible de la ventana del navegador. Esto es ideal para secciones de bienvenida (hero sections), fondos a pantalla completa o mapas interactivos. Para lograrlo, tenemos dos herramientas principales: las unidades de porcentaje (%) y las unidades de viewport (vh).

Utilizando Unidades de Viewport (vh)

La forma más directa y moderna de hacer que un elemento ocupe el 100% de la altura de la ventana visible (el viewport) es usando la unidad vh. La unidad vh equivale al 1% de la altura del viewport. Por lo tanto, si quieres que tu div tenga exactamente la misma altura que la ventana del navegador, simplemente le aplicas:

height: 100vh;

¡Así de sencillo! Esta propiedad le dice al navegador que el elemento debe tomar el 100% de la altura disponible en la ventana.

Es importante notar que, por defecto, los navegadores suelen añadir un pequeño margen o relleno al elemento body. Esto puede hacer que tu elemento con height: 100vh; cause un pequeño scroll indeseado. Una práctica común para evitar esto es resetear los márgenes y rellenos por defecto en tu CSS global, a menudo usando el selector universal * o aplicándolo específicamente al body y html:

* { margin: 0; padding: 0; box-sizing: border-box; }

O de forma más específica:

html, body { margin: 0; padding: 0; height: 100%; }

Aunque 100vh es increíblemente útil y fácil de usar en la mayoría de los casos, especialmente en escritorio, puede presentar un pequeño desafío en dispositivos móviles. La interfaz de usuario de los navegadores móviles (barras de navegación, etc.) a menudo se oculta o muestra a medida que el usuario se desplaza, lo que cambia dinámicamente la altura real del viewport. Esto puede hacer que un elemento con height: 100vh; sea ligeramente más alto de lo esperado cuando las barras están visibles, o que su tamaño cambie sutilmente al hacer scroll. Existe una solución más compleja que involucra JavaScript para calcular la altura disponible en tiempo real, pero para la mayoría de los casos, 100vh es una excelente opción.

Utilizando Porcentajes (100%)

Otra forma de especificar la altura de un elemento es usando porcentajes. Cuando estableces height: 100%;, le estás diciendo al elemento que tome el 100% de la altura de su elemento padre directo. Aquí es donde la cosa se pone interesante, ya que el comportamiento de height: 100%; depende directamente de si su padre tiene una altura definida.

Cuando el Padre Tiene una Altura Estática

Si tu div está dentro de un contenedor padre que tiene una altura fija (por ejemplo, height: 300px;), al aplicar height: 100%; al div hijo, este simplemente adoptará la altura del padre, es decir, 300px.

.padre { height: 300px; } .hijo { height: 100%; /* Será 300px */ }

El hijo está restringido por la altura de su padre.

How to get 100% height in CSS?
To set an element's height equal to the screen's height, set its height value to 100vh. It's easy to break your layout doing this, and you'll need to be aware of which other elements will be impacted, but the viewport is by far the most direct way to set an element's height to 100% of the screen.

Cuando el Padre Tiene una Altura en Porcentaje

Si tanto el padre como el hijo tienen su altura definida en porcentajes, el hijo tomará el 100% de la altura calculada del padre. Si el padre tiene height: 50%; y el hijo tiene height: 100%;, el hijo tendrá efectivamente el 50% de la altura del abuelo (o del elemento que sí tenga una altura definida más arriba en la jerarquía).

.abuelo { height: 600px; } .padre { height: 50%; /* Será 300px */ } .hijo { height: 100%; /* Será 300px */ }

En este caso, el hijo tendrá el 100% de los 300px de su padre.

Cuando el Padre No Tiene Altura Definida

Aquí está la clave y a menudo la fuente de confusión. Si un elemento hijo tiene height: 100%; pero su padre no tiene una altura explícitamente definida (ni en píxeles, ni en porcentajes, ni en otras unidades fijas), el navegador buscará hacia arriba en la jerarquía de elementos hasta encontrar un ancestro que sí tenga una altura definida. Si llega hasta el elemento <body> (y este tampoco tiene una altura definida, lo cual es el comportamiento por defecto en muchos casos), el navegador finalmente usará la altura del viewport como referencia.

html, body { height: 100%; /* Crucial para que 100% funcione hacia arriba */ } .padre { /* Sin altura definida */ } .hijo { height: 100%; /* Ahora sí ocupará el 100% del body/viewport */ }

Para que height: 100%; en un elemento anidado funcione como el 100% de la ventana, todos sus ancestros hasta el <html> deben tener height: 100%; o una altura definida. Si algún padre en la cadena no tiene altura definida, el height: 100%; del hijo no tendrá un "valor base" sobre el cual calcular su porcentaje y se comportará de forma similar a height: auto; en muchos casos.

Altura al 100% vs. Altura del Viewport (100vh)

Aunque a veces height: 100%; puede terminar ocupando el 100% de la altura de la ventana, la forma en que llegan a ese resultado es fundamentalmente diferente. Comprender esta diferencia es vital para elegir la propiedad correcta para cada situación.

Aquí tienes una tabla comparativa para clarificar:

Característicaheight: 100%height: 100vh
Base de CálculoAltura del *elemento padre* directo.Altura del *Viewport* (ventana visible del navegador).
DependenciaDepende de que los ancestros tengan altura definida.Independiente de la altura de los padres.
Comportamiento sin Altura PadrePuede no funcionar como se espera (se comporta como auto o busca ancestro con altura).Siempre se basa en la altura del viewport.
Ideal ParaElementos que deben llenar un contenedor específico cuya altura ya está controlada.Secciones que deben llenar la pantalla inicial o el espacio vertical disponible de la ventana.
Problemas ComunesRequiere que toda la cadena de padres tenga altura definida (a menudo height: 100%; desde html, body).Comportamiento potencialmente inconsistente en dispositivos móviles debido a las barras de navegador dinámicas.

En resumen: usa 100vh cuando quieras que un elemento llene la pantalla visible, sin importar el tamaño de su padre. Usa 100% cuando quieras que un elemento llene la altura de su padre, pero asegúrate de que el padre (y sus ancestros si es necesario) tengan una altura definida.

How to make div height fit content?
The height: auto; property allows a div to automatically adjust its height based on the content inside it. This is the most straightforward way to create a responsive container that grows or shrinks with the content.

¿Cómo Hacer que un Elemento Ajuste su Altura a su Contenido?

La mayoría de las veces, lo que realmente quieres es que tu div simplemente sea lo suficientemente alto como para mostrar todo lo que contiene, sin dejar espacio extra ni cortar contenido. Quieres que su altura sea flexible, que se expanda o contraiga automáticamente según el tamaño de su contenido (texto, imágenes, otros elementos anidados).

La buena noticia es que este es el comportamiento por defecto para los elementos de bloque en CSS. La propiedad que controla esto es height: auto;.

height: auto;

Cuando aplicas height: auto; (o simplemente no defines la propiedad height, ya que auto es el valor inicial por defecto), el navegador calcula la altura del elemento basándose en el espacio vertical que necesitan sus elementos hijos para mostrarse completamente, incluyendo cualquier padding o border del propio contenedor. Es la forma más sencilla y robusta de asegurar que tu contenido nunca se desborde por la parte inferior del contenedor.

¿Por qué es Importante height: auto;?

  • Flexibilidad: Permite que tus contenedores se adapten automáticamente a contenidos de tamaño variable, lo cual es esencial en sitios dinámicos o con contenido gestionado.
  • Diseño Responsive: Asegura que tus layouts funcionen bien en diferentes tamaños de pantalla, ya que los contenidos se reorganizarán y los contenedores se ajustarán a ellos.
  • Mantenimiento Simplificado: Reduce la necesidad de calcular y ajustar alturas manualmente, haciendo tu código más limpio y fácil de mantener.

Otras propiedades relacionadas con la altura que has visto en la tabla de valores de la propiedad height incluyen:

  • length: Define una altura fija usando unidades como px, em, rem, etc. Útil cuando necesitas un tamaño exacto, pero menos flexible.
  • initial: Restaura la propiedad a su valor por defecto, que para height es auto.
  • inherit: Hace que el elemento herede la altura calculada de su padre. Esto puede ser útil en escenarios específicos donde quieres que un hijo tenga exactamente la misma altura que su padre, incluso si el padre no tiene una altura fija sino que también es auto o 100%.

En la práctica, height: auto; es la propiedad que usarás la mayor parte del tiempo para los contenedores de contenido principal. Es la base de muchos layouts flexibles.

Consideraciones Adicionales y Preguntas Frecuentes

Dominar la altura de los elementos requiere práctica y entender cómo interactúan las propiedades height, el modelo de caja de CSS (padding, border) y el flujo del documento. Aquí respondemos algunas dudas comunes:

¿Por qué mi div con height: 100% no llena la pantalla?

Lo más probable es que uno o más de sus elementos padre (incluyendo <body> y <html>) no tengan una altura definida explícitamente. Para que height: 100% funcione hasta el viewport, necesitas que toda la cadena de ancestros hasta <html> tenga también height: 100%; o una altura fija.

¿Cuál es la mejor opción: height: 100% o height: 100vh?

Depende de tu objetivo. Si quieres que el elemento ocupe el 100% de la ventana visible (el viewport), usa 100vh. Si quieres que el elemento ocupe el 100% de su contenedor padre, usa 100%, asegurándote de que el padre tenga una altura definida.

How do you make a div take up the remaining screen height?
Answer: Use the CSS3 flexbox Layout You can simply use the CSS3 flexbox layout to make a

to fill or cover the height of the remaining screen space. CSS3 flexbox is supported in all major modern browsers.

¿Cómo hago que un div se ajuste automáticamente a su contenido?

Usa height: auto;. Este es el comportamiento por defecto de los elementos de bloque en CSS y hace que el contenedor crezca para acomodar todo lo que hay dentro.

¿Funciona 100vh igual en todos los dispositivos?

Funciona consistentemente en escritorio, pero en móviles puede haber pequeñas variaciones debido a la interfaz de usuario dinámica del navegador que oculta o muestra barras de navegación al hacer scroll. Para la mayoría de los casos de uso, sigue siendo una excelente opción.

¿Puedo combinar height: auto con otras propiedades?

Sí. Por ejemplo, puedes usar min-height: 100vh;. Esto le dice al elemento que tenga *al menos* la altura del viewport, pero si el contenido es mayor, el elemento crecerá automáticamente gracias al comportamiento implícito de height: auto (si no se define height explícitamente con otro valor). Esto es muy útil para asegurar que una sección ocupe al menos toda la pantalla inicial, pero pueda seguir creciendo si el contenido lo requiere.

Entender la diferencia entre height: 100%, height: 100vh y height: auto es un paso crucial para tener un control preciso sobre el diseño de tus páginas web. Cada propiedad tiene su propósito y su escenario de uso ideal.

Conclusión

Manejar la altura de los elementos en CSS no tiene por qué ser complicado una vez que entiendes la lógica detrás de las unidades relativas y absolutas, y cómo interactúan con el modelo de caja y la jerarquía del documento. Para llenar la altura de la ventana, height: 100vh; es tu mejor aliado (con la salvedad de los móviles). Para llenar la altura del contenedor padre, height: 100%; es la propiedad correcta, siempre y cuando el padre tenga una altura definida. Y para que un elemento simplemente se ajuste perfectamente a su contenido, confía en el valor por defecto height: auto;.

Practicar con estas propiedades y observar cómo se comportan en diferentes estructuras HTML te dará la intuición necesaria para construir layouts sólidos, flexibles y responsive. ¡Ahora tienes las herramientas para que tus elementos se ajusten a la perfección, como un maquillaje bien aplicado!

Si quieres conocer otros artículos parecidos a Controlando Alturas en Web: Guía Esencial puedes visitar la categoría Maquillaje.

Subir