Support » Allgemeine Fragen » Alle Menü-Hover gleichzeitig aktiv

  • Gelöst Marco

    (@marco27)


    Hallo,

    ich erstelle zur Zeit eine Webseite die als Onepager aufgebaut ist. Beim Anlegen der Navigation ist mir anhand des „Hovereffekts“ aufgefallen, das anscheinend alle Menüpunkte gleichzeitig aktiviert sind. Anhand der Menüpunkte kann man sich jedoch ganz normal auf der Seite bewegen. Ich habe die Menü-Struktur nur durch custom-links aufgebaut. Liegt da vllt der Fehler? Die Seiten-Option bei der Menü-Struktur hat zu keiner Veränderung geführt.

    PS: Ich nutze das Avada Theme. Wenn ich dort Buttons für die Menüpunkte anlege, gibt es diesen Fehler nicht. Handelt es sich also um ein grundsätzliches Problem oder ist es Themeabhängig?

    Grüße
    Marco

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 25)
  • Zu gekauften Themes können wir dir hier nicht weiterhelfen, weil sie uns nicht für Tests zur Verfügung stehen. Wie lautet denn die URL der Links auf deinem Onepager?

    Thread-Starter Marco

    (@marco27)

    Hallo,

    danke für die Antwort. Die Seite ist noch Under Construction deshalb möchte ich diese hier nicht unbedingt veröffentlichen.
    Jedoch habe ich den Fehler bereits gefunden. Ich hatte bei den Custom Links die gesamte Seiten-URL eingefügt. Es wird jedoch nur die ID eingetragen die für den Container vergeben wurde.

    Mir ging es eigentlich auch mehr darum, dass du dir nochmal die Links anschaust.
    Ob „nur die ID eingetragen“ die optimale Lösung ist? Vermutlich hast du Datenschutzterklärung und Impressum auf eigenen Seiten, von denen dann das Hauptmenü nicht funktioniert.

    Thread-Starter Marco

    (@marco27)

    Guten Abend,

    du hast recht. Von den Unterseiten Impressum und Datenschutz kommt man mit der oben genannten Methode nicht zurück ins Hauptmenü. Stattdessen bleibt man anscheinend im Verzeichnis Impressum, was dann so aussieht: http://wordpress.xxxxxxxx.webspaceconfig.de/impressum/#leistungen

    Dabei spielt es keine Rolle ob ich Impressum und Datenschutz im Footer verknüpfe oder als Menüpunkt der Hauptnavigation hinzufüge.

    Und nun?

    WordPress fügt dem Menüeintrag einer aktuell angezeigten Seite eine CSS-Klasse current-menu-item hinzu, wobei nicht unterschieden wird zwischen https://example.com/about-us, htts://example.com/about-us#section-one und htts://example.com/about-us#footer – alle drei bekommen die CSS-Klasse current-menu-item zugewiesen und werden je nach CSS-Regeln optisch hervorgehoben.

    Wenn du möchtest, dass nur der Link des zuletzt aufgerufenen Ankers hervorgehoben wird, musst du dem Menüeintrag beim Anklicken eine eigene CSS-Klasse zufügen. Ich habe das auf meiner Seite mit jQuery gelöst:

    jQuery( document ).ready( function( $ ) {
    	// On Click
    	$( 'a[href*="#"]' ).on( 'click', function( e ){
    		const linktHref = this.href.split( '#' );
    		const href = $( '#' + linktHref[1] );
    
    		toggleClass( this );
    
    		/*
    		 * Smooth scroll animation
    		 */
    		$( 'html, body' ).animate( {
    			scrollTop: $( href ).offset().top
    		}, 'slow', 'linear' );
    		e.preventDefault();
    	} );
    
    	// Scroll Animation
    	$( function () {
    		// Set our scroll state after dom ready
    		$( window ).scroll();
    	} );
    
    	$( window ).scroll( function() {
    		// Get the current vertical position of the scroll bar
    		const position = $( this ).scrollTop();
    		const offset = 150;
    
    		$( '#top-menu a[href*="#"]' ).each( function () {
    			const menuItem = this.href.split( '#' );
    			const menuHref = '#' + menuItem[1];
    			const target = $( menuHref ).offset().top;
    			if ( position >= target - offset ) toggleClass( this );
    		} );
    	});
    
    	/*
    	 * Remove class .active from links,
    	 * than reapply to clicked menu item
    	 */
    	function toggleClass( node ) {
    		$( '#top-menu a[href*="#"]' ).removeClass( 'active' );
    		$( node ).addClass( 'active' );
    	}
    
    } );
    

    Hallo,

    ich mache meine ersten Gehversuche mit WordPress. Als Theme verwende ich „Radiate“. Ich habe genau das gleiche Problem wie Marco. Wenn ich in der Navigation „Testseite“ anklicke, erscheint auch der Link zum Anker auf der Testseite, als „Testsprung“ als aktiv. Ich kann natürlich auch den Link „Testsprung“ also dem Link zum Anker auf der Testseite anklicken, dann erscheint auch „Testseite“ und „Testsprung“ im Menü als aktiv.

    Habe mal ein Screenshot beigefügt Screenshot

    Wenn Dein jQuery die Lösung ist, dann schreib mir mal bitte wie ich das umsetze.

    Vielen Dank,
    Sigi

    Hallo Sigi,

    ich habe das jetzt mit ein paar kleinen Änderungen in ein Plugin gepackt, dass du dir hier herunterladen kannst:

    https://github.com/pixolin/onepager-highlight/archive/master.zip

    Bitte lies dir vor Installation die Anleitung durch. Evtl. willst du in Design > Customizer > Zusätzliches CSS noch hinzufügen:

    .main-navigation li.current-menu-initial.current-menu-item a {
        background: none;
        color: #444444;
    }

    Zuerst einmal Danke für das Plugin. War bestimmt eine Menge Arbeit. Hut ab und Danke.

    Es funktioniert bei mir leider nicht richtig.

    Habe

    .main-navigation li.current-menu-initial.current-menu-item a {
        background: none;
        color: #ff0000;
    }

    als zusätzliches CSS hinzugefügt. Also als Testfarbe mal rot. Das funktioniert auch soweit, bis ich auf die Seite mit den beiden Ankern klicke. In diesem Fall der Link „Testseite“. Dadurch wird nun die Schrift des Linkes „Testseite“, aber auch die zu den beiden Ankern, also „Testsprung“ und „Testsprung1“ rot angezeigt.

    Richtig wäre aber hier, das nur „Testseite“ in roter Schrift angezeigt werden darf.

    Klicke ich dann auf den Link zum ersten Anker, also „Testsprung“ wird dieser dann in der Hover Background-Farbe angezeigt. Die Background-Farbe ist ohne Dein Plugin übrigens auch die Farbe des aktiven Links. Gleicher Fehler bei klick auf den zweiten Anker, also „Testsprung1“.

    Ist vielleicht etwas kompliziert erklärt. Daher hier der Link zur Seite:

    Link zur Test-Homepage

    Kannst Du da mal drauf schauen? Vielleicht findest Du ja da den Fehler.

    Bereits jetzt vielen Dank für Deine Hilfe.

    Viele Grüße,
    Sigi

    In diesem Fall der Link „Testseite“. Dadurch wird nun die Schrift des Linkes „Testseite“, aber auch die zu den beiden Ankern, also „Testsprung“ und „Testsprung1“ rot angezeigt.

    Richtig, es werden ja auch alle drei Links aktuell angezeigt. Wenn du das nicht möchtest, setzt du die Farbe auf den Farbwert der übrigen Menüeinträge:

    .main-navigation li.current-menu-initial.current-menu-item a {
        background: none;
        color: #444444;
    }

    Richtig wäre aber hier, das nur „Testseite“ in roter Schrift angezeigt werden darf.
    Das ist ein zusätzliches Feature, das ich noch einfügen kann. Muss mal schauen, wann ich dazu komme.

    Dein Theme verwendet außerdem eine Style-Regel für .current-page-item, um den Link https://example.com/testseite (also ohne Anker) farbig zu hinterlegen. Das müsstest du mit einer eigenen CSS-Regel aufheben:

    .main-navigation ul li.current_page_item a {
      background: none;
      color: #444444
    }

    (Fügst du statt dessen einen individuellen Link https://example.com/testseite# ein, brauchst du keine zusätzliche CSS-Regel. Ich verstehe aber auch nicht ganz den Sinn, zusätzlich zu den Links der Seitenabschnitte auch noch den Link zur Seite einzufügen.)

    Wenn wir es jetzt „richtig“ machen wollen, fügst du unter Issues noch eine kurze Problem-Beschreibung ein, z.B. „Bei Aufruf der Seite soll nur der erste Link mit Status .current-menu-item hervorgehoben werden.“ … nur wenn du magst. 🙂

    Mein Denkfehler war der gewesen, allen Seitenabschnitte einen Anker zu vergeben. Also auch direkt einen ganz am Anfang der Testseite, wo ja bereits zwei Anker gesetzt waren. Einer zu erreichen über den Menülink „Testsprung“ und einer zu erreichen über den Menülinkg „Testsprung1“. Jetzt habe ich noch einen dritten Anker direkt am Anfang der Seite „Testseite“ gesetzt.

    Nun springen alle drei Menülinks zu den entsprechenden Ankern.

    Damit alles richtig im Menü angezeigt wird habe ich mich für die individuelle Verlinkung nach dem Muster:

    https://meinedomain.de/testseite/#start

    entschieden. Dadurch brauche ich tatsächlich kein zusätzliche CSS-Regel.

    Schön wäre es, wenn wir es „richtig“ machen. Also werde ich gleich unter Deinem hinterlegtem Link die Problembeschreibung posten.

    Wie kriege ich mit, wenn das Problem gefixt ist?

    Dir noch einmal vielen Dank für die tolle Hilfe.

    Viele Grüße,
    Sigi

    Wenn du eine Seite mit der Titelform (Slug) testseite hast und auf einen Anker start verlinken möchtest, ist der richtige Link
    https://example.com/testseite#start

    Wenn du auf den Anfang der Seite verlinken möchtest, kannst du auch einen leeren Anker verwenden:
    https://example.com/testseite#

    (Nachtrag: Je nach Permalink-Einstellungen ändert WordPress den Link in z.B. https://example.com/testseite/#start – das war mir bisher nicht bewusst, macht aber Sinn.)

    Ich schau mir das andere Problem noch an, vielen Dank für den „Issue-Report“ auf GitHub. Wenn’s fertig ist, melde ich mich hier im Forum.

    • Diese Antwort wurde geändert vor 5 Jahren, 7 Monaten von Bego Mario Garde. Grund: Nachtrag

    https://example.com/testseite#

    ging leider nicht. Habe es wieder auf:

    https://example.com/testseite/#start

    geändert.

    Viele Grüße,
    Sigi

    Bekomme gerade eine Mail, dass das Problem, welche ich auf GitHub gepostet habe gefixed ist. Habe gesehen, dass es Änderungen in der onepager.js gab. Habe die Änderungen übernommen und nun funktioniert es, so wie es sein sollte.

    Tausend Dank!

    Viele Grüße,
    Sigi

    • Diese Antwort wurde geändert vor 5 Jahren, 7 Monaten von siegbert.
    • Diese Antwort wurde geändert vor 5 Jahren, 7 Monaten von siegbert.
    • Diese Antwort wurde geändert vor 5 Jahren, 7 Monaten von siegbert.

    So, ich habe jetzt ein wenig im Plugin geändert.

    Nehmen wir an, du hast ein Navigationsmenü mit mehreren Links zu verschiedenen Abschnitten der gleichen Webseite:
    https://example.com/testseite/#eins
    https://example.com/testseite/#zwei
    https://example.com/testseite/#drei
    https://example.com/testseite/#vier

    Per jQuery wird in allen Links bis auf den ersten die CSS-Klasse .current-menu-item entfernt. Klickst du auf einen anderen Link, wird (ausschließlich) diesem Link die CSS-Klasse .current-menu-item zugewiesen.

    Was noch fehlt ist eine Funktion, die beim Scrollen automatisch die CSS-Klasse dem Link des aktuell angezeigten Bereichs der Webseite zuweist.

    Da das Plugin nicht im WordPress-Repository ist, solltest du die alte Version in deiner WordPress-Installation löschen und dann die neue Version aus GitHub herunterladen und dann wie üblich wieder installieren solltest.

    Erzähl mal, ob du damit zurecht kommst.

    Hatte ein paar Mal meinen letzten Beitrag geändert. Also final ist es so, dass ich lediglich die geänderte onepager.js neu hochgeladen habe. Ich komme sehr gut zurecht.

    Danach konnte ich alle Links zu den verschiedenen Abschnitten auch ohne die Domaine ins Menü eintragen. Also hier im Beispiel:

    /testseite/#eins
    /testseite/#zwei
    /testseite/#drei
    /testseite/#vier

    Einfach super. Wenn jetzt noch wie Du ja selber schon schreibst, beim Srollen automatisch die CSS-Klasse dem Link des aktuell angezeigten Bereiches der Webseite zugewiesen wird, wäre es perfekt.

    Viele Grüße,
    Sigi

Ansicht von 15 Antworten - 1 bis 15 (von insgesamt 25)
  • Das Thema „Alle Menü-Hover gleichzeitig aktiv“ ist für neue Antworten geschlossen.