web-dev-qa-db-fra.com

Comment garder l'en-tête statique, toujours au top lors du défilement?

Comment pourrais-je éviter de faire défiler mon header avec le reste de la page? J'ai pensé à utiliser frame-sets and iframes, se demandant simplement s’il existe un moyen plus simple et plus convivial, quelle serait la meilleure pratique pour le faire?

60
David

Utilisation position: fixed sur le div qui contient votre en-tête, avec quelque chose comme

#header {
  position: fixed;
}

#content {
  margin-top: 100px;
}

Dans cet exemple, lorsque #content commence à 100px en dessous de #header, mais lorsque l'utilisateur fait défiler, #header reste en place. Bien sûr, il va sans dire que vous voudrez vous assurer que #header a un arrière-plan de sorte que son contenu soit réellement visible lorsque les deux divs se chevauchent. Regardez la propriété position ici: http://reference.sitepoint.com/css/position

72
Yi Jiang
.header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 88px;
  z-index: 10;
  background: #eeeeee;
  -webkit-box-shadow: 0 7px 8px rgba(0, 0, 0, 0.12);
  -moz-box-shadow: 0 7px 8px rgba(0, 0, 0, 0.12);
  box-shadow: 0 7px 8px rgba(0, 0, 0, 0.12);
}

.header__content-text {
  text-align: center;
  padding: 15px 20px;
}

.page__content-container {
  margin: 100px auto;
  width: 975px;
  padding: 30px;
}
<div class="header">
  <h1 class="header__content-text">
    Header content will come here
  </h1>
</div>
<div class="page__content-container">
  <div style="height:600px;">
    <a href="http://imgur.com/k9hz3">
      <img src="http://i.imgur.com/k9hz3.jpg" title="Hosted by imgur.com" alt="" />
    </a>
  </div>
  <div style="height:600px;">
    <a href="http://imgur.com/TXuFQ">
      <img src="http://i.imgur.com/TXuFQ.jpg" title="Hosted by imgur.com" alt="" />
    </a>
  </div>
</div>
7
Suresh Pattu

Si vous pouvez utiliser bootstrap3, vous pouvez utiliser css "navbar-fixed-top" et vous devez également ajouter css ci-dessous pour pousser le contenu de votre page vers le bas.

body{

   margin-top:100px;
}
4
richpalsingh

en voici une avec la solution css + jquery (javascript).

voici le lien de démonstration Démo

//html

<div id="uberbar">
    <a href="#top">Top of Page</a>
    <a href="#bottom">Bottom of Page</a>

</div>

//css 

#uberbar    { 
    border-bottom:1px solid #eb7429; 
    background:#fc9453; 
    padding:10px 20px; 
    position:fixed; 
    top:0; 
    left:0; 
    z-index:2000; 
    width:100%;
}

//jquery

$(document).ready(function() {
    (function() {
        //settings
        var fadeSpeed = 200, fadeTo = 0.5, topDistance = 30;
        var topbarME = function() { $('#uberbar').fadeTo(fadeSpeed,1); }, topbarML = function() { $('#uberbar').fadeTo(fadeSpeed,fadeTo); };
        var inside = false;
        //do
        $(window).scroll(function() {
            position = $(window).scrollTop();
            if(position > topDistance && !inside) {
                //add events
                topbarML();
                $('#uberbar').bind('mouseenter',topbarME);
                $('#uberbar').bind('mouseleave',topbarML);
                inside = true;
            }
            else if (position < topDistance){
                topbarME();
                $('#uberbar').unbind('mouseenter',topbarME);
                $('#uberbar').unbind('mouseleave',topbarML);
                inside = false;
            }
        });
    })();
});
4
Pramendra Gupta

Après avoir parcouru toutes les réponses, j’ai trouvé une méthode légèrement différente avec un minimum de CSS et aucun JS. Seule la hauteur de l’en-tête doit être définie correctement dans #content, dans ce cas 60px

CSS:

#header {
  position: fixed;
  width: 100%;
  top: 0;
  z-index: 10;
}
#content {
  margin-top: 60px;
  z-index:1;
}

HTML:

<body>
  <div id="header" style="background-color:GRAY; text-align:center; border-bottom:1px SOLID BLACK; color:WHITE; line-height:50px; font-size:40px">
     My Large Static Header
  </div>
  <div id="content">
     <!-- All page content here -->
  </div>
</body>
2
ChrisAdmin

Au lieu de travailler avec le positionnement et le remplissage/marge et sans connaître la taille de l'en-tête, il existe un moyen de conserver l'en-tête fixe en jouant avec le défilement.

Voir le ce plunker avec un en-tête fixe:

<html lang="en" style="height: 100%">
<body style="height: 100%">
<div style="height: 100%; overflow: hidden">
  <div>Header</div>
  <div style="height: 100%; overflow: scroll">Content - very long Content...

La clé ici est un mélange de height: 100% avec overflow.

Voir une question spécifique sur la suppression du parchemin de l'en-tête ici et répondre ici .

1
AlikElzin-kilaka