Navigationsmenü beim scrollen oben fixieren

  • Hallo Leute,

    ich bin im Netz bereits öfter über (WordPress)Seiten gestolpert, bei denen das Menü horizontal unter einer Headergrafik liegt und mit hochschrollt, dann aber am oberen Bildrand fixiert wird und so immer sicht- und klickbar ist. Wie wird das umgesetzt? Mit reinem CSS? Oder braucht man da JS für?

    Auf der Seite, auf ich das gerne umsetzen würde, müsste ich wohl den div#header-menu-wrap ansprechen, wenn euch das hilft. Diese ID finde ich im CSS 3x:


    Das ist der Theme-Standard, bei dem das Menü oben aus dem Bild verschwindet.

    Wenn ihr mir verraten könnt, wie ich das Menü im sichtbaren Bereich halte, wäre das eine feine Sache.

    LG,
    Markus aka Cowboy

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • bring mal einen Link zum Blog!

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • Das wird für gewöhnlich per JS bzw. jQuery umgesetzt.

    Mit Javascript sähe das so in etwa aus

    PHP
    $(document).ready(function() {
      var top = $('#header-menu-wrap').offset().top;
      $(window).scroll(function() {
          if($(this).scrollTop() > top) {
            $('#header-menu-wrap').addClass('holdontop')
          } else {
            $('#header-menu-wrap').removeClass('holdontop');
          }
        });
      });


    Sobald der Div oben angekommen ist, bekommt der Div eine zusätzliche Class, die dann per CSS gestyled werden kann ( z. B. mit position:fixed; )

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

  • Eine Frage noch, SirEctor, kommt der Code in den Header der Seite? Also vor </head>? Oder könnte man das auch in den Footer packen? Genau so, wie es oben steht, erfüllt es zumindest im Header seine Funktion nicht.

    Code
    .sticky-menu {
        top: 0;
        position: fixed;
        z-index: 1000;
    }

    Danke und LG,
    Markus aka Cowboy

  • Nun gut, ein bisschen ergänzt und mit jQuery, schon funktioniert es:

    PHP
    jQuery(document).ready(function($) {
            var stickyHeaderTop = $('#nav').offset().top;
            $(window).scroll(function(){ /*header-menu-wrap*/
                if( $(window).scrollTop() > stickyHeaderTop ) {
                $('#nav').addClass("sticky-menu");
                } else {
                $('#nav').removeClass("sticky-menu");
                }
            });
    });
    Code
    div.sticky-menu {
        top: 0;
        position: fixed;
        width: 960px;
        z-index: 1000;
    }

    Ich habe auch festgestellt, dass die anzusprechende ID #nav ist, die im CSS aber auch auf die Breite festgelegt werden muss. Das Script rufe ich im Footer auf. Bis hier her schon mal Danke für die Denkanstöße.

    Was mich noch stört: Die Navigation verschwindet bei angemeldeten Usern hinter der Adminbar. Wie lässt sich das einstellen, dass die Navigation unter der Adminbar hängen bleibt? Trotz des Wissen, dass ich im PHP mit is_admin_bar_showing() die Anzeige der Adminbar abfragen kann, fehlt mir die Idee...

    LG,
    Markus aka Cowboy

  • Na prima. Und ich will meins wegbringen und es gelingt nicht. Wer kann mir einen Tipp geben, wo ich das Menü verschwinden lassen kann?
    Theme: Zerif Lite
    Link: https://www.ghostwriter-arbeiten.de/


    Einmal editiert, zuletzt von maxe (27. Februar 2016 um 14:20)


  • Was mich noch stört: Die Navigation verschwindet bei angemeldeten Usern hinter der Adminbar. Wie lässt sich das einstellen, dass die Navigation unter der Adminbar hängen bleibt? Trotz des Wissen, dass ich im PHP mit is_admin_bar_showing() die Anzeige der Adminbar abfragen kann, fehlt mir die Idee...

    Soweit ich weiß bekommt die wp admin-bar einen z-index von 99999, also müsstest du deinen z-index dementsprechend anpassen.

    [size=10]Bitte immer zuerst die Forensuche nutzen und erst danach Deine Fragen hier im Forum stellen, denn sehr vieles wurde schon mehrfach beantwortet. Bitte dabei auch die Forenregeln beachten.
    Kein Support per PN - Fragen gehören ins Forum.[/SIZE]
    [size=8]Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)[/SIZE]

  • […] dass ich im PHP mit is_admin_bar_showing() die Anzeige der Adminbar abfragen kann, fehlt mir die Idee...

    Noch einfacher. Wenn dein Theme die WP body_class eingebunden hat, hat <body> bei eingeloggten Benutzern zusätzlich die Klasse .logged-in.
    Also kannst du dein css entsprechend ergänzen. Die Definition für nicht eingeloggte Benutzer bleibt stehen. Und drunter kommt die genauere Definition für die eingeloggten:

    Code
    .logged-in div.sticky-menu {
        top: xzpx;
    }

    wobei xz für die Höhe der Adminbar steht. Weiß nicht auswenig, wieviel das ist, kann sein, 80px.

    Gruß
    helix

    dbeyer14: kannst du für deine Frage bitte einen Extra-Thread aufmachen? Wird hier sonst sehr unübersichtlich. Danke.

  • Super! Das war genau das Richtige, helix. Vielen Dank!

    Die Höhe der Adminbar ist übrigens 32px.

    maxe: Wenn ich mich nicht irre, würde ich mit einem angepassten z-index das Menü über die Adminbar legen. Das ist jedoch nicht gewünscht, weil auch unerfahrene Benutzer an der Seite mitarbeiten und irritiert wären, wenn diese Leiste da oben (würden die sagen :-o) plötzlich nicht mehr da ist.

    LG,
    Markus aka Cowboy

  • Ich blende mir die Admin-Leiste immer direkt aus und würde mich wundern, warum das Menü nicht ganz oben sitzt. Mit der Lösung wundert sich also immer jemand, aber ich denke für euren Bereich ist das vertretbar.

    Das Geheimnis des Könnens liegt im Wollen!
    [size=12]Bitte keine Hilfegesuche per PN (auch keine "privaten" Links). Das ist ein öffentliches Forum.[/SIZE]

  • Grins. Ja, ich hatte mir überlegt, ob ich empfehlen soll, die Adminbar generell fürs Frontend auszublenden (geht über die functions.php). Aber irgendwie hatte ich den Eindruck, dass das in dem Fall (noch weitere User beteiligt) zu Irritation führen könnte.

    Evtl. wäre noch auszuchecken welche Kombination von body-classes eigentlich ausgegeben wird, wenn jemand in seinem User-Profil die Adminbar ausgeblendet hat. Falls welche von den unerfahreneren Benutzern überraschend schnell Erfahrung sammelt – was ja prinzipiell wünschenswert wäre …

    Gruß
    helix

    Ergänzung: und danke für die 32 Pixel. 80 wäre wohl etwas mächtig …

  • Das ist das schöne an WordPress, es gibt viele Möglichkeiten. Derzeit wird niemand der Benutzer die Adminbar ausblenden, was künftig wird, keine Ahnung. Ich persönlich nutze sie gern.

    Der Frage, welche Klassen WP setzen, sollte man in der Tat mal nachgehen.

    LG,
    Markus aka Cowboy

  • Hab mir mal den erzeugten Seitenquelltext angesehen. Bei eingeblendeter Adminbar bekommt der Body auch die Klasse "admin-bar", also wähle ich diese aus, statt "logged-in". Damit ist die Eventualität, dass jemand die Adminbar ausblendet, auch abgedeckt.

    LG,
    Markus aka Cowboy

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!