Nach einer langen Zeit der Erforschung mobiler responsiver Layouts habe ich einige Zeit damit verbracht, mit verschiedenen UI-Designs zu experimentieren. Ein wichtiger Hotspot auf der Seite ist häufig die Hauptnavigation der Website. Benutzer möchten einen schnellen Zugriff auf Ihre Inhaltsseiten. Dies ist immer der Fall, entweder auf einem vollständigen Monitor oder auf einem kleineren Bildschirm für die mobile Reaktion.
In diesem Tutorial möchte ich Ihnen zeigen, wie Sie eine Kombination aus CSS3-Medienabfragen zusammen mit jQuery verwenden können, um ein gleitendes Navigationsmenü zu verwalten. Die Links erscheinen im Frontend normal, werden jedoch nach der Größenänderung unter 600px in einem verborgenen Menü angezeigt. Stattdessen sehen wir ein kleines Menü-Pulldown-Symbol, das bei Befehl geöffnet und geschlossen wird.
Live Demo - Quellcode herunterladen
Dokument einstellen
Der obere Überschriftenbereich enthält eine kleine Auswahl von Dateien, die wir benötigen, um diesen Effekt zu erzeugen. Ich füge ein benutzerdefiniertes Stylesheet zusammen mit einer Kopie der neuesten von Google gehosteten jQuery-Bibliothek bei. Alle benutzerdefinierten JS-Funktionen werden in einer externen Datei mit dem Namen menu.js gespeichert.
Der größte Teil der Seitenmarkierung ist abgesehen vom Kopfzeilenbereich ziemlich unwichtig. Ich habe versucht, alles auf einer festen Höhe zu halten, aber der Header kann keine feste CSS-Eigenschaft verwenden. Andernfalls wird die Seite nicht erweitert, wenn das Menü geöffnet und geschlossen wird. Die Überschrift und die Navigationslinks werden also von eingerichtet Zeilenhöhe
Werte in CSS.
Die Seite h1
title passt am besten als letztes Element, sodass die Kopfzeile immer die konstante Höhe behält. Direkt neben der Überschrift befindet sich ein Ankerlink mit der ID #navbtn
und dieses enthält das verschiebbare Menü-Link-Symbol. Es wird nur mit CSS angezeigt, wenn die Breite einen bestimmten Schwellenwert unterschreitet.
Markup-Positionen in CSS
Normalerweise denke ich nicht daran, jQuery zu verwenden, wann immer es möglich ist. Das einzige Problem beim Umschalten von Menüs ist, dass wir dies in CSS nicht effizient ausführen können. Die jQuery-Methoden wenden Inline-CSS-Stile an, die das Standard-Stylesheet überschreiben. Es kommt also darauf an, die Elemente mit CSS zu positionieren und sie mit JavaScript richtig zu animieren.
Meine Standard-CSS-Browser-Reset-Einstellungen enthalten einen Satz benutzerdefinierter Codes für die Seitentypografie. Auch unsere Hintergrundkachel für den Körper ist PS Neutral vor subtilen Mustern gespeichert. Ich musste den Wrapper-Container und den Body-Container in 2 Divs aufteilen, da wir links und rechts Seitenauffüllung verwenden, um zu verhindern, dass die Seite auf 100% Breite wächst. Hinzufügen von Randwerten zum Marge: 0 auto;
Diese Eigenschaft führt zum Verlust der zentrierten Positionierung.
Indem man das Innere stylt
Element behalten wir die Kontrolle über die Kopfleiste. Indem wir die Position auf absolut setzen, kontrollieren wir, wie weit die Navigationslinks nach der Titelüberschrift folgen werden. Beachten Sie, wie die #navbtn
wird ausgeblendet, bis die Größe mit Medienabfragen unter 560px geändert wird. Alles andere wird eingestellt, einschließlich Höhe, Breite und Positionierung.
Responsive Styles
Es gibt nur eine kleine Anzahl von Änderungen, die ich vorgenommen habe, wenn die Browsergröße kleiner als 560px ist. Ich denke nicht, dass dies eine magische Zahl ist, es ist einfach ein netter Bereich, wenn die Standardnavigation gegen den Logotext stößt. In diesem Fall müssen wir das Nav-Menü ausblenden und das Symbol zum Umschalten anzeigen.
Es bedeutet auch, die absolute Positionierung aus dem Nav-Element zu entfernen, damit es als statischer Block dargestellt wird. Die Nav-Ankerverknüpfungen werden als vollständige Zeilen mit 100% Breite angezeigt, um beim Tippen auf einen mobilen Bildschirm schneller zu erreichen. Auch die inneren Seitenkopfzeilen + Absätze werden etwas verkleinert und mit angepassten Zeilenhöhenwerten gekoppelt.
Interaktionen mit JavaScript
Das letzte Code-Stück in menu.js könnte auch direkt in das HTML-Dokument eingefügt werden. Da wir jedoch mehr als eine einzige Toggle-Methode verwenden müssen, ist es sauberer und effizienter, die Markierung von dynamischen Effekten zu trennen. Ich werde diese Datei in Abschnitte unterteilen, damit sie einfacher zu lesen ist.
Der erste große Brocken ist wohl der verwirrendste. Es handelt sich um kleinere Fehler beim Ändern der Größe von Browsern von "responsive" auf "responsive" und sollte keine Auswirkungen auf Smartphones haben. Wir fügen einen Event-Handler an das Fenster, um die Größenänderung von .on () zu überprüfen. Die beiden unterschiedlichen Logikanweisungen prüfen die Variable, die auf das Element "nav" der Kopfzeile abzielt, sowie den Link zum Umschalten des Navigationsmenüs.
Wenn der Browser reagiert und der Benutzer das Menü öffnet / schließt, wird eine Inline angehängt Stil
Attribut. Dies hat Vorrang vor allem, was im Stylesheet geschrieben ist. Es ist ein Problem, nachdem das Menü geöffnet und geschlossen wurde. Das Navi wird einen permanenten Stil haben Anzeige: keine;
selbst nach einer Größenänderung von mehr als 560px.
Dies ist, worauf die 2nd if {} -Anweisung prüft. Wenn sowohl die Navigationsschaltfläche als auch die Menüschaltfläche ausgeblendet sind, reagierte das Layout, der Benutzer öffnete / schloss das Menü und vergrößerte seine Größe wieder in der normalen Ansicht. Wir müssen also nur das Nav wieder anzeigen, aber es gibt ein Problem. Die show () -Methode von jQuery fügt auch Stile inline hinzu, dh, wenn Sie die Größe des Reaktionsbereichs ändern, bleibt das Nav-Menü dauerhaft geöffnet. Um dies zu beheben, füge ich eine Klasse hinzu .keep-nav-closed
. Dies wird nur hinzugefügt, wenn das Navi geschlossen und dann in der Größe vergrößert wird. Wenn das Navi offen bleibt, bleibt es geöffnet, wenn es größer und wieder verkleinert wird.
Nun sollte die andere if {} -Anweisung sinnvoll sein, warum wir nach dieser Klasse suchen. Es erscheint erst nach dem 2. Mal, wenn die Größe geändert und das Nav geöffnet wird. Daher wissen wir, dass die Klasse stattdessen auf diese Weise entfernt wird, wenn sie auf eine reaktive Breite zurückgesetzt wird. Es ist ein seltsamer Fehler, und ich muss noch eine kleinere oder schnellere Lösung für die Handhabung der Inline-jQuery-Stile finden, als das Attribut insgesamt zu entfernen (was immer noch Probleme verursacht). Lassen Sie uns nun weitergehen und einen Blick auf das letzte Segment von JavaScript werfen.
Beide Event-Handler suchen nach Klickereignissen für verschiedene Ziele. Der erste ist für alle verschiedenen Ankerverknüpfungen in den Kopfzeilen- und Fußzeilenbereichen gesperrt. Die href-Werte sind Hash-Symbole (#), die nicht irgendwo hingehen, also habe ich sie so eingestellt, dass sie nichts laden. Dies ist ähnlich, wenn Sie auf die Navigationsschaltfläche klicken, da kein Hash in die Seiten-URL geladen werden soll. Stattdessen wird das responsive hidden nav Menü bei 350 Millisekunden geöffnet und geschlossen, wobei der href-Wert ignoriert wird.
Live Demo - Quellcode herunterladen