Approche 1 - flexbox
Il fonctionne parfaitement pour les éléments de hauteur connue et inconnue. Assurez-vous de définir la div extérieure à height: 100%;
et réinitialiser les paramètres par défaut margin
en body
. Voir le Tableaux de support des navigateurs .
jsFiddle
html, body {
height: 100%;
margin: 0;
}
.wrapper {
height: 100%;
display: flex;
flex-direction: column;
}
.header, .footer {
background: silver;
}
.content {
flex: 1;
overflow: auto;
background: pink;
}
<div class="wrapper">
<div class="header">Header</div>
<div class="content">
<div style="height:1000px;">Content</div>
</div>
<div class="footer">Footer</div>
</div>
Approche 2 - Tableau CSS
Pour les éléments de hauteur connue et inconnue. Il fonctionne également dans les anciens navigateurs, y compris IE8.
jsFiddle
html, body {
height: 100%;
margin: 0;
}
.wrapper {
height: 100%;
width: 100%;
display: table;
}
.header, .content, .footer {
display: table-row;
}
.header, .footer {
background: silver;
}
.inner {
display: table-cell;
}
.content .inner {
height: 100%;
position: relative;
background: pink;
}
.scrollable {
position: absolute;
left: 0; right: 0;
top: 0; bottom: 0;
overflow: auto;
}
<div class="wrapper">
<div class="header">
<div class="inner">Header</div>
</div>
<div class="content">
<div class="inner">
<div class="scrollable">
<div style="height:1000px;">Content</div>
</div>
</div>
</div>
<div class="footer">
<div class="inner">Footer</div>
</div>
</div>
Approche 3 - calc()
Si l'en-tête et le pied de page ont une hauteur fixe, vous pouvez utiliser le CSS calc()
.
jsFiddle
html, body {
height: 100%;
margin: 0;
}
.wrapper {
height: 100%;
}
.header, .footer {
height: 50px;
background: silver;
}
.content {
height: calc(100% - 100px);
overflow: auto;
background: pink;
}
<div class="wrapper">
<div class="header">Header</div>
<div class="content">
<div style="height:1000px;">Content</div>
</div>
<div class="footer">Footer</div>
</div>
Approche 4 - % pour tous
Si la hauteur de l'en-tête et du pied de page est connue, et qu'elle est également exprimée en pourcentage, il suffit de faire le calcul simple pour qu'ils aient tous deux une hauteur de 100 %.
html, body {
height: 100%;
margin: 0;
}
.wrapper {
height: 100%;
}
.header, .footer {
height: 10%;
background: silver;
}
.content {
height: 80%;
overflow: auto;
background: pink;
}
<div class="wrapper">
<div class="header">Header</div>
<div class="content">
<div style="height:1000px;">Content</div>
</div>
<div class="footer">Footer</div>
</div>
jsFiddle
1 votes
Même question avec ces qualificatifs : angulaire, matérialiser ...
0 votes
Même question mais avec une barre latérale ET où le pied de page n'apparaît pas avant que l'on fasse défiler la chaîne vers le bas ET où l'on ne se retrouve pas avec deux barres de défilement sur le côté droit