¿Cómo forzar que el div hijo sea el 100% de la altura del div padre sin especificar la altura del padre?

Tengo un sitio con la siguiente estructura:

<div id="header"></div>

<div id="main">
  <div id="navigation"></div>
  <div id="content"></div>
</div>

<div id="footer"></div>

La navegación está a la izquierda y el contenido div es a la derecha. La información para el contenido div se tira a través de PHP, por lo que & #39; s diferente cada vez.

¿Cómo puedo escalar la navegación verticalmente para que su altura sea la misma que la del div de contenido, independientemente de la página que se cargue?

Solución

NOTA: Esta respuesta es aplicable a los navegadores antiguos sin soporte para el estándar Flexbox. Para un enfoque moderno, véase: https://stackoverflow.com/a/23300532/1155721


Te sugiero que eches un vistazo a Columnas de igual altura con CSS para todos los navegadores y sin trucos.

Básicamente, hacer esto con CSS de forma compatible con los navegadores no es trivial (pero sí lo es con las tablas), así que búscate una solución preempaquetada adecuada.

Además, la respuesta varía en función de si quieres una altura del 100% o una altura igual. Por lo general, es la misma altura. Si se trata de una altura del 100%, la respuesta es ligeramente diferente.

Comentarios (2)

Si no le importa que el div de navegación sea recortado en caso de un div de contenido inesperadamente corto, hay al menos una manera fácil:

#main {
position: relative;
}

#main #navigation {
position: absolute;
top: 0;
left: 0;
bottom: 0;
width: 10em; /* or whatever */
}

#main #content {
margin: 0;
margin-left: 10em; /* or whatever width you set for #navigation */
}

De lo contrario, existe la técnica de

Comentarios (4)

[Refiriéndose al código de Dmity's Less en otra respuesta] ¿Supongo que esto es algún tipo de "pseudocódigo"?

Por lo que tengo entendido, intente utilizar la técnica de las falsas columnas, que debería funcionar.

http://www.alistapart.com/articles/fauxcolumns/

Espero que esto ayude :)

Comentarios (2)