Sticky footer
Cette recette a été publiée le
Cas d'usage étudié
Placer le footer en bas de l’écran lorsque le contenu du site n’est pas suffisant pour remplir tout le viewport, ou en dessous de la ligne de flottaison si le contenu du site est plus grand que le viewport.
Solution proposée
Nous vous recommandons d’utiliser Flexbox, pour son côté moderne et flexible. Nous partons avec les hypothèses suivantes :
- L’élément
html
a uneheight
à100%
(ou100vh
). - L’élément
body
a unemin-height
à100%
, afin de prendre au moins toute la hauteur de l’écran. - L’élément
body
est l’élément qui contient à la fois leheader
, lefooter
, et le contenu principal du site (regroupé sous un seul élément avec pour idcontent
).
Pour répondre à notre objectif, il faudra :
- Ajouter les propriétés
display: flex
etflex-direction: column
à l’élémentbody
- Permettre au contenu principal du site d’occuper tout l’espace restant disponible grâce à la propriété
flex-grow: 1
sur la div avec l’idcontent
.
html {
height: 100%;
width: 100%;
}
body {
display: flex;
flex-direction: column;
min-height: 100%;
margin: 0;
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
header {
padding: 20px;
font-size: 3rem;
background-color: powderblue;
}
footer {
padding: 20px;
background-color: peachpuff;
text-align: center;
}
#content {
flex-grow: 1;
padding: 20px;
text-align: center;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Sticky footer</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<header>
Hello there
</header>
<div id="content">
Welcome to my cool website
</div>
<footer>
<div>Copyright</div>
<div>Privacy</div>
<div>Terms of use</div>
<div>Sitemap</div>
</footer>
</body>
</html>
Autres solutions
Il existe d'autres manières de placer le footer
en bas de l’écran, avec parfois leurs contraintes :
display: grid
: si vous avez également des colonnes à agencerposition: absolute
ouposition: fixed
: à éviter sauf si votre footer doit rester en permanence en bas de viewport et donc éventuellement au-dessus du contenu du site. Prévoir unpadding-bottom
au moins égal à la hauteur dufooter
sur l'élément parent.display: table
: seulement si vous êtes repartis dans les années 90 ou 2000 avec support de très vieux navigateurs ne supportant pas le flexbox.