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?
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 div
s se chevauchent. Regardez la propriété position
ici: http://reference.sitepoint.com/css/position
.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>
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;
}
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;
}
});
})();
});
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>
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 .