Hello tout le monde đ
Jâutilise un hamburger menu en plein Ă©cran (100svh) sur tous mes breakpoints, y compris sur desktop.
Je souhaite désactiver le scroll du body quand le menu est ouvert.
Voici ce que jâutilise :body:has(.nav_wrap .w-nav-button.w--open) {
overflow: hidden;
}
Ăa fonctionne, mais jâobtiens un shift du layout Ă cause de la disparition de la barre de scroll.
Jâai tentĂ© ce contournement, mais la nav bar bouge toujours :html {
scrollbar-gutter: stable;
}
Au final, je pense Ă lâappliquer au mobile uniquement et laisser le scroll sur desktop.
Auriez-vous une meilleure idée?
Merci dâavance pour votre aide đ
Hello Sylvain !
Pas certain de pouvoir tâaider sur ton approche mais jâavais sauvegardĂ© cette vidĂ©o fs qui rĂ©sous ce problĂšme :) https://youtu.be/nNx1vBSWTeY?si=N24btZa0MUQbPXEO
Hello Jean,
Merci pour ta rĂ©ponse et le lien ! Jâai testĂ©, mais malheureusement, jâobtiens le mĂȘme rĂ©sultat : tout le body se dĂ©cale vers la droite lorsque la barre de scroll disparaĂźt.
Si tu as dâautres idĂ©es ou astuces, je suis preneur !
Merci encore pour ton aide đ
Merci Valentin pour ton idée de rendre la barre de scroll invisible.
Pour le body, mon CSS faisait déjà le job et la scrollbar disparaissait bien, mais la navbar se décalait toujours (car elle est en position fixed).
Au final, jâai trouvĂ© une solution complĂšte en JavaScript pour gĂ©rer correctement le scroll du body et empĂȘcher la navbar de bouger.
Jâavais besoin de calculer la largeur exacte de la scrollbar (pas possible en CSS).
Je vĂ©rifie encore quâil nây a aucun bug et je partagerai le code demain.
Encore merci pour vos retours đ
Hello tout le monde!
Comme promis, je pose mon code ici.
Petit rappel sur son utilitĂ© : DĂ©sactive le dĂ©filement de la page lorsquâun hamburger menu est ouvert (en mode desktop) et empĂȘche le dĂ©placement du body et de la navbar vers la droite aprĂšs la disparition de la barre de dĂ©filement.
Une version de base et une version qui gĂšre aussi les liens vides et les liens dâancrage (#id)
let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; $(".w-nav-button").on("click", function () { $(this).toggleClass("is-open"); if ($(this).hasClass("is-open")) { $("html, body").css("overflow", "hidden"); $(".w-nav, body").css({ "padding-right": scrollbarWidth + "px" }); } else { $("html, body").css("overflow", ""); $(".w-nav, body").css("padding-right", ""); } });
let scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; $(".w-nav-button").on("click", function () { $(this).toggleClass("is-open"); if ($(this).hasClass("is-open")) { $("html, body").css("overflow", "hidden"); $(".w-nav, body").css({ "padding-right": scrollbarWidth + "px" }); } else { restoreScroll(); } }); $(".w-nav a, .w-nav button").on("click", function () { if (!$(this).is(".w-nav-button")) { $(".w-nav-button").removeClass("is-open"); restoreScroll(); } }); function restoreScroll() { $("html, body").css("overflow", ""); $(".w-nav, body").css("padding-right", ""); }