J'ai la structure suivante:
<body>
<div id="main-wrapper">
<header>
</header>
<nav>
</nav>
<article>
</article>
<footer>
</footer>
</div>
</body>
Je charge dynamiquement le contenu dans le <article>
javascript. Pour cette raison, la hauteur du <article>
bloc peut changer.
Je veux que le <footer>
bloc soit en bas de la page lorsqu'il y a beaucoup de contenu, ou en bas de la fenêtre du navigateur lorsqu'il n'y a que quelques lignes de contenu.
Pour le moment, je peux faire l'un ou l'autre ... mais pas les deux.
Alors, est-ce que quelqu'un sait comment je peux faire cela - faites en sorte que le <footer>
reste du bas de la page / du contenu ou du bas de l'écran, selon celui qui est le plus bas.
Réponses:
Le pied de page collant de Ryan Fait est très agréable, mais je trouve que sa structure de base fait défaut *.
Version Flexbox
Si vous avez la chance d'utiliser flexbox sans avoir à prendre en charge les anciens navigateurs, les pieds de page collants deviennent trivialement faciles et prennent en charge un pied de page de taille dynamique.
L'astuce pour que les pieds de page collent au fond avec flexbox est d'avoir d'autres éléments dans le même conteneur fléchis verticalement. Tout ce qu'il faut, c'est un élément wrapper pleine hauteur avec
CSS:display: flex
et au moins un frère avec uneflex
valeur supérieure à0
:Afficher l'extrait de code
Si vous ne pouvez pas utiliser flexbox, ma structure de base de choix est:
Ce qui n'est pas si loin de:
L'astuce pour faire coller le pied de page consiste à ancrer le pied de page au rembourrage inférieur de son élément conteneur. Cela nécessite que la hauteur du pied de page soit statique, mais j'ai constaté que les pieds de page sont généralement de hauteur statique.
HTML: CSS:Afficher l'extrait de code
Avec le pied de page ancré à
CSS:#main-wrapper
, vous devez maintenant avoir#main-wrapper
au moins la hauteur de la page, sauf si ses enfants sont plus longs. Cela se fait en faisant#main-wrapper
avoir unmin-height
fichier100%
. Vous avez également de se rappeler que ses parents,html
etbody
doivent être aussi grand que la page ainsi.Afficher l'extrait de code
Bien sûr, vous devriez remettre en question mon jugement, car ce code force le pied de page à tomber du bas de la page, même en l'absence de contenu. La dernière astuce consiste à changer le modèle de boîte utilisé par le
CSS:#main-wrapper
afin que lemin-height
de100%
inclut le100px
remplissage.Afficher l'extrait de code
Et là vous l'avez, un pied de page collant avec votre structure HTML d'origine. Assurez-vous simplement que le
footer
'sheight
est égal à#main-wrapper
' spadding-bottom
, et vous devriez être défini.* La raison pour laquelle je trouve à redire à la structure de Fait est qu'elle définit les éléments
.footer
et.header
sur différents niveaux hiérarchiques tout en ajoutant un.push
élément inutile .la source
#main-wrapper *:first-child { margin-top: 0; }
, sinon la page serait trop longue par la marge supérieure du premier enfant (provoquant une barre de défilement inutile sur les pages courtes).Le pied de page collant de Ryan Fait est une solution simple que j'ai utilisée à plusieurs reprises dans le passé.
HTML de base :
CSS :
Traduire ceci pour être similaire à ce que vous avez déjà des résultats avec quelque chose du genre:
HTML :
CSS:
N'oubliez pas de mettre à jour le négatif sur la marge du wrapper pour qu'il corresponde à la hauteur de votre pied de page et appuyez sur div. Bonne chance!
la source
Je cherchais à résoudre ce problème sans ajouter de balisage supplémentaire, alors j'ai fini par utiliser la solution suivante:
Vous devez connaître les hauteurs d'en-tête, de navigation et de pied de page pour pouvoir définir la hauteur minimale de l'article. De cette manière, si l'article ne contient que quelques lignes de contenu, le pied de page restera en bas de la fenêtre du navigateur, sinon il ira en dessous de tout le contenu.
Vous pouvez trouver ceci et d'autres solutions publiées ci-dessus ici: https://css-tricks.com/couple-takes-sticky-footer/
la source