Solo quiero agregar: la mayoría de las otras respuestas funcionaron bien para mí; ¡Sin embargo, les llevó mucho tiempo hacer que funcionaran!
¡Esto se debe a que la configuración height: 100%
solo recoge la altura del div padre!
Entonces, si todo su html (dentro del cuerpo) tiene el siguiente aspecto:
<div id="holder">
<header>.....</header>
<div id="body">....</div>
<footer>....</footer>
</div>
Entonces lo siguiente estará bien:
html,body{
height: 100%
}
#holder{
min-height: 100%;
position:relative;
}
#body{
padding-bottom: 100px; /* height of footer */
}
footer{
height: 100px;
width:100%;
position: absolute;
left: 0;
bottom: 0;
}
... como "titular" recogerá su altura directamente del "cuerpo".
Felicitaciones a My Head Hurts, ¡cuya respuesta fue la que terminé poniendo a trabajar!
Sin embargo. Si su html está más anidado (porque es solo un elemento de la página completa, o está dentro de una determinada columna, etc.), entonces debe asegurarse de que cada elemento que lo contiene también se haya height: 100%
establecido en el div. De lo contrario, la información sobre la altura se perderá entre "cuerpo" y "titular".
Por ejemplo, lo siguiente, donde he agregado la clase de "altura completa" a cada div para asegurarme de que la altura llegue hasta nuestros elementos de encabezado / cuerpo / pie de página:
<div class="full-height">
<div class="container full-height">
<div id="holder">
<header>.....</header>
<div id="body">....</div>
<footer>....</footer>
</div>
</div>
</div>
Y recuerde establecer la altura en la clase de altura completa en el CSS:
#full-height{
height: 100%;
}
Eso solucionó mis problemas!
position:fixed
, aunque esa no será exactamente la mejor manera de hacerlo