Menu fixe en Javascript

position : fixed

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous !
Me revoilà avec un problème que j’ai depuis le début, il s’agit de mon menu.
J’ai fait une fonction JS afin que lorsqu’on scroll, le menu reste en haut de ma page et visible. Le problème est que mon menu de base est centré sur la page avec margin : 0 auto; et des que la fonction JS applique mon autre class la position : fixed m’installe mon menu a gauche, le margin : 0 auto; n’étant pas pris en compte.
Voici mon bout de code :

        <ul class="menu cf">
            <li><a class="btn" href="index.php"><img class="home" src="img/logo.png"></a></li>
            <li><a class="btn" href="solutions_dce.php">Solutions DCE</a></li>
            <li><a class="btn" href="achat_revente.php">Achat / Revente</a></li>
            <li><a class="btn" href="pack_opening.php">Pack Opening</a></li>        
            <li><a class="btn" href="review.php">Review</a></li>
            <li><a class="btn" href="themes_draft.php">Draft à thèmes</a></li>
            <li><a class="btn" href="note_equipes_abos.php">Je note vos équipes</a></li>
            <li><a class="btn" href="resume_futchampions.php">Résumé Fut Champions</a></li>
            <li><a class="btn" href="calendrier_fut_septembre.php"><i class="far fa-calendar-alt" title="Calendrier Fut"></i></a></li>
            <li><a class="btn" href="fifa21.php">Fifa 21</a></li>

        </ul>

voici mon script J§ :

$(function(){
    // On recupere la position du bloc par rapport au haut du site
    var position_top_raccourci = $(".menu").offset().top;
    
    //Au scroll dans la fenetre on déclenche la fonction
    $(window).scroll(function () {
    
    //si on a defile de plus de 150px du haut vers le bas
    if ($(this).scrollTop() > position_top_raccourci) {
    
    //on ajoute la classe "fixNavigation" a <div id="navigation">
    $('.menu').addClass("fixNavigation"); 
    } else {
    
    //sinon on retire la classe "fixNavigation" a <div id="navigation">
    $('.menu').removeClass("fixNavigation");
    }
    });
    });

et enfin voici mon code css :

.menu{			
  margin: 0 auto;
  width: -moz-fit-content;
  width: -webkit-fit-content;
  width: fit-content;	
  padding: 15% 0 0 0;
}
.menu > li {
  float: left;
  position: relative;
}
.menu a {
  display: inline-block;
  color: #C50101;
  text-transform: uppercase;
  text-decoration: none ;
  font-family: 'bolsterbold', cursive;
  font-size: 1vw;
  border: 1px solid rgba(65, 63, 63, 0.61);
  border-radius: 5px;
  background: rgba(255, 255, 255, 0.767);
  margin-right: 1px;
  vertical-align: sub;
}		
.menu a:hover{
color:#0566ab;
}
.menu > li > a {
  padding: 5px 10px;
}
.fixNavigation{
z-index: 9999;
position:fixed;
padding: 0;
transform-origin: 50% 50%;

/* Mise en forme */
}
.fixNavigation a{
  background: rgba(255, 255, 255);

}

Je ne comprends pas, donc je le centre avec un left : 10% mais en fonction de l’écran cela fait très moche.
En espérant que vous pourrez m’aider. Merci d’avance.

Hello, tu as deux solutions :

  • Tu estimes globalement la marge qu’il te faut à gauche et à droite ; du coup ton margin-left/right: auto saute. Je sous-entend l’utilisation des pourcentages.
  • Tu englobes ton menu d’une div d’une hauteur fixe de 1px en position: fixed, ton menu tu le gardes en margin: 0 auto et roule. Faudra juste faire attention aux différents retours de contenu que tu pourrais avoir. Cette méthode en soit n’est pas très propre étant donné que ton menu va déborder de la div parente mais … ça fonctionne !

Sinon garde en tête qu’un ul utilisé comme menu en HTML5 est englobé dans une nav (donc div > nav > ul si tu appliques la 2ème solution).

+0 -0

Merci pour vos messages. Pour l’instant je n’ai pas trouvé la solution. Afin d’avoir une idée plus concrète, voici le lien : [(https://www.fut4fun.fr/)] Effectivement, j’ai utilisé > position: sticky et cela ne fonctionne pas.
Merci par avance

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte