Eklablog
Editer l'article Suivre ce blog Administration + Créer mon blog

Fixer un menu au défilement

Pour fixer simplement votre menu, vous pouvez utiliser la propriété "position: fixed;" en CSS. En revanche, si votre menu est par exemple placé sous le header, vous voudriez pouvoir le fixer seulement une fois qu'il se trouve en haut de la page.
Pour cela, il faut utiliser du JavaScript.

/!\ Le JS doit être activé sur votre blog

Commencez par créer votre menu en HTML (définissez le par un ID) , et placez le dans un module simple.

<div id="menuNavigation">MON MENU, AVEC DU TEXTE, DES LIENS ET DES IMAGES</div>

Grâce au css, vous allez pouvoir le placer où vous voulez sur votre page, et modifier sont apparence. Dans cet exemple, je vais le placer sous mon #header, d'une hauteur de 250px.
Placez le en "position: absolute;"
=> [Tuto] Contenu hors des articles

#menuNavigation { position: absolute;
      top: 250px; /*hauteur du header*/
      width: 800px; /*largeur du menu*/
      left: 50%; /*place le bord gauche au centre*/
      margin-left: -400px; /*décale la moitié du menu vers la gauche pour le placer au centre*/
      propriété : valeur;
}

Nous avons maintenant besoin de définir sont apparence quand il doit être "fixe". Je vais donc simplement ajouter une classe à mon id, et le définir en "position:fixed" (pour le fixer), ainsi qu'en "top: 0px;" pour le coller en haut de la page. Vous pouvez bien sûr ajouter d'autres propriétés pour changer sont apparence.

#menuNavigation.fixe { position: fixed;
      top: 0px;
      propriété : valeur;
}

Maintenant, passons au javascript, que vous placez dans le même module que votre menu.
Un script JS se place toujours entre les balises <script> JS </script>
Nous allons utiliser window.onload pour exécuter notre script à la fin du chargement de la page.

Commençons par définir nos variables : nous auront besoin bien évidemment de notre #menu, et si vous ne voulez pas vous embêter à calculer quand il doit se fixer, nous allons également récupérer #header.

window.onload=function(){
      var menu = document.querySelector("#menuNavigation");
      var header = document.querySelector("#header");
}

Nous devons ensuite récupérer la taille de la fenêtre du client, et savoir de combien il a "scrollé" la page.

function scrolled(){
      var windowHeight = document.body.clientHeight,
      currentScroll = document.body.scrollTop || document.documentElement.scrollTop;
}

Sachant cela, nous pouvons changer la classe de notre menu si la page a été "scrollée" de la hauteur du header. Toujours dans la fonction "scrolled" on ajoute l'instruction suivant :

menu.className = (currentScroll >= header.offsetHeight) ? "fixe" : "";

menu, c'est la variable représentant notre #menu.
className est une commande JS permettant de modifier la classe d'un élément. Ici, nous ajoutons la classe .fixe à #menuNavigation
currentScroll est le défilement de la page (scroll)
header est la variable représentant #header
offsetHeight est une commande permettant de récupérer la hauteur d'un élément (ici #header)

Pour traduire cela, si le défilement de la page est supérieur ou égal à la hauteur du #header, la classe de #menuNavigation devient .fixe
Notre menu prend donc les paramètres de #menu.fixe

Pour finir ce code, nous devons ajouter un EventListener, sans quoi nous ne pouvons pas récupérer le défillement (scroll) de la page.

addEventListener("scroll", scrolled, false);

Voici le JS complet

<script>// <![CDATA[
window.onload=function(){
      var menu = document.querySelector("#menuNavigation");
      var header = document.querySelector("#header");
      function scrolled(){
            var windowHeight = document.body.clientHeight,
            currentScroll = document.body.scrollTop || document.documentElement.scrollTop;

            menu.className = (currentScroll >= header.offsetHeight) ? "fixe" : "";
      }
      addEventListener("scroll", scrolled, false);
}
// ]]></script>

L'exemple ici est de fixer un menu en fonction du défilement de la page, mais vous pouvez utiliser cette technique pour modifier n'importe quel élément en fonction de votre position sur la page ;)

Retour à l'accueil
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
K
Salut! J'ai lu sur ton tuto des flèches que l'on pouvait utiliser ce code pour que les flèches n'apparaissent qu'après le header. J'ai beau essayé, ça ne fonctionne pas. Il y a rien qui bouge. Je dois sûrement pas comprendre le fonctionnement du code. Est-ce que ça serait possible de m'aider stp? Merci.
Répondre
H
Sa devait donner sa?<br /> http://jaimepaslespatesblanche.eklablog.com/
Répondre
A
Merci pour ce tuto, j'attends l'activation du Javascript sur mon blog de test de thème pour voir si cela marche. :)
Répondre
J
Hey merci ! C'est exactement ce que je recherche, mais après plusieurs essais, je n'arrive pas à le faire :(
Répondre
L
La lecture pourrait être super intéressante mais vous avez une pub qui cache toute une partie ^_^<br />  <br /> Bonne continuation ^_^
Répondre