Voglio solo aggiungere - la maggior parte delle altre risposte ha funzionato bene per me; tuttavia, ci è voluto molto tempo per farli funzionare!
Questo perché l'impostazione height: 100%
prende solo l'altezza del div del genitore!
Quindi, se l'intero HTML (all'interno del corpo) è simile al seguente:
<div id="holder">
<header>.....</header>
<div id="body">....</div>
<footer>....</footer>
</div>
Quindi andrà bene:
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;
}
... come "titolare" prenderà la sua altezza direttamente da "corpo".
Complimenti a My Head Hurts, la cui risposta è stata quella che ho finito per mettermi al lavoro!
Però. Se il tuo html è più nidificato (perché è solo un elemento dell'intera pagina, o è all'interno di una determinata colonna, ecc.) Allora devi assicurarti che ogni elemento contenente sia height: 100%
impostato anche sul div. Altrimenti, le informazioni sull'altezza andranno perse tra "corpo" e "supporto".
Ad esempio, in cui ho aggiunto la classe "full height" a ogni div per assicurarmi che l'altezza scenda fino ai nostri elementi header / body / footer:
<div class="full-height">
<div class="container full-height">
<div id="holder">
<header>.....</header>
<div id="body">....</div>
<footer>....</footer>
</div>
</div>
</div>
E ricorda di impostare l'altezza sulla classe a tutta altezza nel CSS:
#full-height{
height: 100%;
}
Ciò ha risolto i miei problemi!
position:fixed
, anche se non sarà esattamente il modo migliore per farlo