Je connais généralement bien la technique de vidage d'un pied de page à l'aide de CSS.
Mais j’ai un peu de mal à faire fonctionner cette approche pour le bootstrap sur Twitter, probablement en raison du fait que le bootstrap sur Twitter est de nature réactive. Utilisation de Twitter bootstrap Je ne parviens pas à faire glisser le pied de page au bas de la page en utilisant l'approche décrite dans l'article de blog ci-dessus.
Trouvé les extraits ici fonctionne vraiment bien pour bootstrap
Html:
<div id="wrap">
<div id="main" class="container clear-top">
<p>Your content here</p>
</div>
</div>
<footer class="footer"></footer>
CSS:
html, body {
height: 100%;
}
#wrap {
min-height: 100%;
}
#main {
overflow:auto;
padding-bottom:150px; /* this needs to be bigger than footer height*/
}
.footer {
position: relative;
margin-top: -150px; /* negative value of footer height */
height: 150px;
clear:both;
padding-top:20px;
}
Source: Démo et Didacticiel (n'est plus disponible; RIP )
Ceci est maintenant inclus avec Bootstrap 2.2.1.
Bootstrap 3.x
Utilisez le composant navbar et ajoutez la classe .navbar-fixed-bottom
:
<div class="navbar navbar-fixed-bottom"></div>
Bootstrap 4.x
<div class="navbar fixed-bottom"></div>
N'oubliez pas d'ajouter body { padding-bottom: 70px; }
sinon le contenu de la page pourrait être couvert.
Docs: http://getbootstrap.com/components/#navbar-fixed-bottom
Un exemple de travail pour Twitter bootstrap NOT STICKY FOOTER
<script>
$(document).ready(function() {
var docHeight = $(window).height();
var footerHeight = $('#footer').height();
var footerTop = $('#footer').position().top + footerHeight;
if (footerTop < docHeight)
$('#footer').css('margin-top', 10+ (docHeight - footerTop) + 'px');
});
</script>
#footer
Si vous ne voulez pas que la barre de défilement si le contenu s'adapte à l'écran, changez simplement la valeur de 10 à 0
La barre de défilement apparaîtra si le contenu ne correspond pas à l'écran.
Voici comment implémenter ceci depuis la page officielle:
http://getbootstrap.com/2.3.2/examples/sticky-footer.html
Je viens de le tester maintenant et ça marche très bien! :)
HTML
<body>
<!-- Part 1: Wrap all page content here -->
<div id="wrap">
<!-- Begin page content -->
<div class="container">
<div class="page-header">
<h1>Sticky footer</h1>
</div>
<p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p>
</div>
<div id="Push"></div>
</div>
<div id="footer">
<div class="container">
<p class="muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p>
</div>
</div>
</body>
Le code CSS pertinent est le suivant:
/* Sticky footer styles
-------------------------------------------------- */
html,
body {
height: 100%;
/* The html and body elements cannot have any padding or margin. */
}
/* Wrapper for page content to Push down footer */
#wrap {
min-height: 100%;
height: auto !important;
height: 100%;
/* Negative indent footer by it's height */
margin: 0 auto -30px;
}
/* Set the fixed height of the footer here */
#Push,
#footer {
height: 30px;
}
#footer {
background-color: #f5f5f5;
}
/* Lastly, apply responsive CSS fixes as necessary */
@media (max-width: 767px) {
#footer {
margin-left: -20px;
margin-right: -20px;
padding-left: 20px;
padding-right: 20px;
}
}
Pour Sticky Footer nous utilisons deux DIV's
dans le code HTML pour obtenir un effet de base sticky footer. Écrivez comme ceci:
HTML
<div class="container"></div>
<div class="footer"></div>
CSS
body,html {
height:100%;
}
.container {
min-height:100%;
}
.footer {
height:40px;
margin-top:-40px;
}
Exemple officiel beaucoup plus simple: http://getbootstrap.com/examples/sticky-footer-navbar/
html {
position: relative;
min-height: 100%;
}
body {
margin-bottom: 60px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
height: 60px;
background-color: #f5f5f5;
}
Eh bien, j'ai trouvé un mélange de navbar-inner
et de navbar-fixed-bottom
<div id="footer">
<div class="navbar navbar-inner navbar-fixed-bottom">
<p class="muted credit"><center>ver 1.0.1</center></p>
</div>
</div>
Cela semble bon et fonctionne pour moi
Voir exemple dans Fiddle
Cela a fonctionné pour moi parfaitement.
Ajoutez cette classe navbar-fixed-bottom à votre pied de page.
<div class="footer navbar-fixed-bottom">
Je l'ai utilisé comme ça:
<div class="container-fluid footer navbar-fixed-bottom">
<!-- start footer -->
</div>
Et il se met en bas sur toute la largeur.
Edit: Ceci va mettre le pied de page sur toujours visible, c'est quelque chose que vous devez prendre en compte.
Vous devez envelopper votre .container-fluid
div pour que votre pied de page collant fonctionne, il vous manque également des propriétés dans votre classe .wrapper
. Essaye ça:
Supprimez le padding-top:70px
de votre balise body
et incluez-le dans votre .container-fluid
à la place, comme suit:
.wrapper > .container-fluid {
padding-top: 70px;
}
Nous devons faire cela parce que pousser la body
pour adapter la barre de navigation finit par pousser le pied de page un peu plus loin (70 pixels plus loin) au-delà de la fenêtre d'affichage pour obtenir une barre de défilement. Nous obtenons de meilleurs résultats en poussant le .container-fluid
div à la place.
Ensuite, nous devons supprimer la classe .wrapper
en dehors de votre .container-fluid
div et envelopper votre #main
div avec elle, comme suit:
<div class="wrapper">
<div id="main" class="container-fluid">
<div class="row-fluid">...</div>
<div class="Push"></div>
</div>
</div>
Votre pied de page doit bien sûr être en dehors du .wrapper
div, alors supprimez-le du `.wrapper div et placez-le à l'extérieur, comme suit:
<div class="wrapper">
....
</div>
<footer class="container-fluid">
....
</footer><!--END .row-fluid-->
Une fois que tout est terminé, rapprochez votre pied de page de votre classe .wrapper
en utilisant une marge négative, comme suit:
.wrapper {
min-height: 100%;
height: auto !important; /* ie7 fix */
height: 100%;
margin: 0 auto -43px;
}
Et cela devrait fonctionner, bien que vous deviez probablement modifier quelques autres choses pour que cela fonctionne lorsque l'écran est redimensionné, comme réinitialiser la hauteur de la classe .wrapper
, comme ceci:
@media (max-width:480px) {
.wrapper {
height:auto;
}
}
HenryW réponse est bon, même si j'avais besoin de quelques ajustements pour le faire fonctionner comme je le voulais. En particulier, ce qui suit gère également:
Voici ce qui a fonctionné pour moi avec ces réglages:
HTML:
<div id="footer" class="invisible">My sweet footer</div>
CSS:
#footer {
padding-bottom: 30px;
}
JavaScript:
function setFooterStyle() {
var docHeight = $(window).height();
var footerHeight = $('#footer').outerHeight();
var footerTop = $('#footer').position().top + footerHeight;
if (footerTop < docHeight) {
$('#footer').css('margin-top', (docHeight - footerTop) + 'px');
} else {
$('#footer').css('margin-top', '');
}
$('#footer').removeClass('invisible');
}
$(document).ready(function() {
setFooterStyle();
window.onresize = setFooterStyle;
});
C’est la bonne façon de le faire avec Twitter Bootstrap et la nouvelle classe navbar-fixed-bottom: (vous n’avez aucune idée du temps que j’ai passé à chercher cela)
CSS:
html {
position: relative;
min-height: 100%;
}
#content {
padding-bottom: 50px;
}
#footer .navbar{
position: absolute;
}
HTML:
<html>
<body>
<div id="content">...</div>
<div id="footer">
<div class="navbar navbar-fixed-bottom">
<div class="navbar-inner">
<div class="container">
<ul class="nav">
<li><a href="#">Menu 1</a></li>
<li><a href="#">Menu 2</a></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Dans le dernière version of bootstrap 4-alpha, j'ai pu le faire avec la classe .fixed-bottom
.
<div class="fixed-bottom"></div>
Voici comment je l'utilise avec le pied de page:
<footer class="footer fixed-bottom container">
<hr>
<p>© 2017 Company, Inc.</p>
</footer>
Vous trouverez plus d'informations dans la documentation placementici .
Utilisez le composant navbar et ajoutez la classe .navbar-fixed-bottom:
<div class="navbar navbar-fixed-bottom"></div>
ajouter du corps
{ padding-bottom: 70px; }
pour gérer les dispositions de contrainte de largeur, utilisez ce qui suit pour éviter les angles arrondis et pour que la barre de navigation soit alignée sur les côtés de l'application.
<div class="navbar navbar-fixed-bottom">
<div class="navbar-inner">
<div class="width-constraint clearfix">
<p class="pull-left muted credit">YourApp v1.0.0</p>
<p class="pull-right muted credit">©2013 • CONFIDENTIAL ALL RIGHTS RESERVED</p>
</div>
</div>
</div>
alors vous pouvez utiliser css pour remplacer les classes d'amorçage afin d'ajuster la hauteur, la police et la couleur
.navbar-fixed-bottom {
font-size: 12px;
line-height: 18px;
}
.navbar-fixed-bottom .navbar-inner {
min-height: 22px;
}
.navbar-fixed-bottom .p {
margin: 2px 0 2px;
}
Vous pouvez utiliser jQuery pour gérer ceci:
$(function() {
/**
* Read the size of the window and reposition the footer at the bottom.
*/
var stickyFooter = function(){
var pageHeight = $('html').height();
var windowHeight = $(window).height();
var footerHeight = $('footer').outerHeight();
// A footer with 'fixed-bottom' has the CSS attribute "position: absolute",
// and thus is outside of its container and counted in $('html').height().
var totalHeight = $('footer').hasClass('fixed-bottom') ?
pageHeight + footerHeight : pageHeight;
// If the window is larger than the content, fix the footer at the bottom.
if (windowHeight >= totalHeight) {
return $('footer').addClass('fixed-bottom');
} else {
// If the page content is larger than the window, the footer must move.
return $('footer').removeClass('fixed-bottom');
}
};
// Call when this script is first loaded.
window.onload = stickyFooter;
// Call again when the window is resized.
$(window).resize(function() {
stickyFooter();
});
});
Testé avec Bootstrap 3.6.6
.
HTML
<div class="container footer navbar-fixed-bottom">
<footer>
<!-- your footer content here -->
</footer>
</div>
CSS
.footer {
bottom: 0;
position: absolute;
}
La technique la plus simple consiste probablement à utiliser Bootstrap navbar-static-bottom
conjointement avec la définition de la div du conteneur principal avec height: 100vh
(nouveau CSS3 pourcentage du port de vue ). Cela videra le pied de page vers le bas.
<main class="container" style="height: 100vh;">
some content
</main>
<footer class="navbar navbar-default navbar-static-bottom">
<div class="container">
<p class="navbar-text navbar-left">© Footer4U</p>
</div>
</footer>
D'après exemple de Bootstrap 4. , au cas où vous perdriez votre santé mentale, voici comment cela fonctionne:
height: 100%
(h-100
)display: flex
(d-flex
class)margin-top: auto
(mt-auto
class)Le problème est que, dans les frameworks front-end modernes, nous avons souvent des wrappers supplémentaires autour de ces éléments.
Par exemple, dans mon cas, avec Angular, j'ai composé la vue à partir d'une racine d'application, d'un composant d'application principal et d'un composant de pied de page distincts, qui ont tous ajouté leur élément personnalisé au DOM.
Donc, pour que cela fonctionne, j'ai dû ajouter des classes à ces éléments d'emballage: un h-100
supplémentaire, déplaçant le d-flex
d'un niveau vers le bas, et le mt-auto
d'un niveau vers le haut du pied de page (Donc en fait, ce n'est plus sur la classe de pied de page, mais sur mon élément personnalisé <app-footer>
).
Le seul qui a fonctionné pour moi !:
html {
position: relative;
min-height: 100%;
padding-bottom:90px;
}
body {
margin-bottom: 90px;
}
footer {
position: absolute;
bottom: 0;
width: 100%;
height: 90px;
}
Utilisez les utilitaires flex intégrés à Bootstrap 4! Voici ce que je propose en utilisant principalement les utilitaires Bootstrap 4.
<div class="d-flex flex-column" style="min-height: 100vh">
<header></header>
<div class="container flex-grow-1">
<div>Some Content</div>
</div>
<footer></footer>
</div>
.d-flex
pour faire de la division principale un conteneur flexible.flex-column
sur le div principal pour organiser vos articles flex dans une colonnemin-height: 100vh
à la div principale, avec un attribut de style ou dans votre css, pour remplir la fenêtre de visualisation verticalement.flex-grow-1
sur l'élément conteneur pour que le conteneur de contenu principal occupe tout l'espace restant dans la hauteur de la fenêtre.#wrap {
min-height: 100%;
height: auto !important;
height: 100%;
width: 100%;
/*Negative indent footer by its height*/
margin: 0 auto -60px;
position: fixed;
left: 0;
top: 0;
}
La hauteur du pied de page correspond à la taille du retrait inférieur de l'élément d'enveloppement.
.footer {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 60px;
}
Rester simple.
footer {
bottom: 0;
position: absolute;
}
Vous devrez peut-être également décaler la hauteur du pied de page en ajoutant un margin-bottom
équivalent à la hauteur du pied de page à la body
.
Voici comment bootstrap le fait:
http://getbootstrap.com/2.3.2/examples/sticky-footer.html
Il suffit d’utiliser le code source de la page et vous devriez pouvoir le voir. Ne pas oublier le <div id="wrap">
en haut.
Voici un exemple utilisant css3:
CSS:
html, body {
height: 100%;
margin: 0;
}
#wrap {
padding: 10px;
min-height: -webkit-calc(100% - 100px); /* Chrome */
min-height: -moz-calc(100% - 100px); /* Firefox */
min-height: calc(100% - 100px); /* native */
}
.footer {
position: relative;
clear:both;
}
HTML:
<div id="wrap">
<div class="container clear-top">
body content....
</div>
</div>
<footer class="footer">
footer content....
</footer>
Vous trouverez ici l'approche dans HAML ( http://haml.info ) avec barre de navigation en haut et pied de page en bas de la page:
%body
#main{:role => "main"}
%header.navbar.navbar-fixed-top
%nav.navbar-inner
.container
/HEADER
.container
/BODY
%footer.navbar.navbar-fixed-bottom
.container
.row
/FOOTER
Utilisez la classe ci-dessous pour la placer sur la dernière ligne de la page et la placer au centre de celle-ci . Si vous utilisez la page Ruby on Rails HAML, vous pouvez utiliser le code ci-dessous .%footer.card.text-center
Pls ne pas oublier d'utiliser Twitter bootstrapp
Voici une solution pour la dernière version de Bootstrap (4.3 au moment de la rédaction) utilisant Flexbox.
HTML:
<div class="wrapper">
<div class="content">
<p>Content goes here</p>
</div>
</div>
<footer class="footer"></footer>
CSS:
html, body {
height: 100%;
}
body {
display: flex;
flex-direction: column;
}
.wrapper {
flex-grow: 1;
}
Et un exemple de code: https://codepen.io/tillytoby/pen/QPdomR
une autre solution possible, en utilisant simplement des requêtes de médias
@media screen and (min-width:1px) and (max-width:767px) {
.footer {
}
}
/* no style for smaller or else it goes weird.*/
@media screen and (min-width:768px) and (max-width:991px) {
.footer{
bottom: 0;
width: 100%;
position: absolute;
}
}
@media screen and (min-width:992px) and (max-width:1199px) {
.footer{
bottom: 0;
width: 100%;
position: absolute;
}
}
@media screen and (min-width:1120px){
.footer{
bottom: 0;
width: 100%;
position: absolute;
}
}
Il semble que height:100%
'chaîne' soit cassée à div#main
. Essayez d’ajouter height:100%
et cela vous rapprocherait de votre objectif.