Ratgeber: "Webdesign" Navigieren mit Responsive Design
© Internet Magazin
Hier erfahren Sie...
...welche Methoden das Responsive Design für sinnvolle Navigationsmenüs bereithält
...wie Sie diese umsetzen
...wie ein ideales Navigations-Icon aussehen könnte
Mit der Navigation ist es schwieriger, denn dabei sind zwei Dinge für Smartphones zu beachten: Die Buttons dürfen nicht zu klein werden, damit sie sich auch auf einem Touchscreen bedienen lassen – schließlich sind Finger größer als der Mauszeiger. Außerdem ist es wichtig, dass auf den einzelnen Seiten auch Inhalt zu sehen ist. In einer einfachen Variante würde man aus einer horizontalen Navigation einfach eine vertikale machen.
Dann sieht man auf der Seite aber nur den Kopfbereich und die Navigation; die eigentlichen Inhalte, um die es geht, erreicht man erst durch Scrollen. Das mag für den Startbildschirm noch akzeptabel sein, weil es an die Listenmenüs von Apps erinnert; es ist aber störend, wenn es auf allen Seiten auftritt. Denn der Benutzer hat zum einen zu wenig Orientierung, wo er sich befindet, und zum anderen muss er immer erst zu den eigentlichen Inhalten hinscrollen. Glücklicherweise gibt es mehrere Lösungen für dieses Problem. Drei ausgewählte führt der Workshop am praktischen Beispiel vor.
Anpassungen sind nicht immer Notwendig
Bevor wir uns an die Lösungen für dieses Problem machen: Nicht immer ist es notwendig, Hand an die Navigation anzulegen. Wenn die Navigation einfach gestrickt ist und nur drei oder vier Menüpunkte enthält, können Sie diese horizontal darstellen – das passt sowohl für die Desktop- als auch für die Smartphone-Variante. Das geht jedoch nur, wenn die horizontale Navigation auch auf 320 Pixeln Platz hat. Häufig soll die Navigation jedoch aus mehr Buttons bestehen.
Variante 1: Ankerlinks im Fußbereich
Die erste mögliche Lösung ist typischerweise mit dem Mobile-first-Ansatz verknüpft – dabei wird zuerst die mobile Variante erstellt und dann die Desktop- Version davon abgeleitet. Diese Methode ist technisch sehr einfach und involviert nur HTML und CSS. Im HTML-Code wird die Navigation nach dem Inhaltsbereich platziert. Zusätzlich gibt es am Anfang einen internen Link zur Navigation.
Damit ist das Grundlayout schon optimiert für kleine Bildschirme und folgt dem laut Luke Wroblewski für mobile Geräte wichtigen Content-first-Prinzip. Der Inhalt ist oben, die Navigation unten, aber die Navigation ist direkt über einen Link erreichbar. Mit CSS können Sie das Aussehen verbessern, also zum einen den Sprunglink mit einer Button-Optik versehen und zum anderen die Navigation unten auf der Seite zu Buttons oder Ähnlichem ausbauen. Wichtig dabei ist, dass die Navigationspunkte großzügig genug angelegt sind, damit sie sich bequem mit den Fingern bedienen lassen.
Für die Desktop-Variante ist etwas mehr Aufwand notwendig, denn hier soll die Navigation wie gewohnt oberhalb des Inhaltsbereichs als horizontale Leiste erscheinen. Das lässt sich über mehrere CSS-Befehle umsetzen:
- Der umfassende Bereich benötigt position: relative, um den Bezugspunkt für die Positionierung bilden zu können. Außerdem müssen Sie beim umfassenden Element einen Innenabstand oben (padding-top) angeben, in dem die Navigation Platz findet.
- Die Navigation wird über position: absolute in Relation zum Container oben angeordnet.
- Der interne Sprunglink zur Navigation wird nicht mehr benötigt und kann ausgeblendet werden.
Diese Formatierungen sollen nur gelten, wenn genügend Platz zur Verfügung steht, also beispielsweise ab 760 Pixeln Breite, was die folgende @media-Regel bewirkt:
Im Beispiel sehen Sie außerdem, dass die Navigationspunkte über float nebeneinander angeordnet werden – sonst wäre es keine horizontale Navigation. Diese grundlegenden Formatierungen können dann verfeinert werden. Der Vorteil an dieser Lösung ist ihre Geradlinigkeit und ihre bestechende Einfachheit.
Variante 2: Auswahlliste
Beim nächsten Ansatz bleibt die Navigation oben – sowohl bei der Desktop-Version als auch bei der mobilen Variante. Ist jedoch weniger Platz vorhanden, wird das Menü in eine Auswahlliste umgewandelt. Das heißt, bei viel verfügbarem Platz haben Sie eine normale, ungeordnete Liste:
Bei weniger Platz gibt es hingegen eine Auswahlliste:
Bei der Auswahlliste müssen Sie mit Javascript dafür sorgen, dass die jeweiligen Unterseiten automatisch nach einem Wechsel in der Auswahlliste aufgerufen werden.Die Umwandlung von ungeordneter Liste in Auswahlliste geht ebenfalls am besten per Javascript. Sie können so etwas mit jQuery selbst programmieren – oder für eine einfache, schnelle Lösung das jQuery-Plug-in „Responsive Menu” verwenden. Dafür müssen Sie zunächst jQuery und das Plug-in im Kopfbereich einbinden.
Das Plug-in aktivieren Sie über den Befehl mobileMenu(). Vorher geben Sie an, welche geordneten oder ungeordneten Listen umgewandelt werden sollen – im Beispiel das ul-Element innerhalb des Elements mit id="navigation":
Responsive Menu bietet noch mehrere Konfigurationsoptionen: switchWidth bestimmt, ab welcher Breite die Umwandlung in die Auswahlliste stattfinden soll; topOptionText ist der Text, der als erstes in der Auswahlliste angezeigt wird. Wenn Sie null als Wert zuweisen, dann gibt es keinen ersten Punkt, sondern nur die Navigationspunkte, wie im folgenden Beispiel. Bei diesem ist außerdem festgelegt, dass der Wechsel in der Darstellung ab 760 Pixeln und kleiner stattfinden soll.
Das jQuery-Plug-in ist an manchen Stellen noch verbesserungsfähig. Sein Vorteil ist, dass man so rasch zu einem Ziel kommt und dass es außerdem auch verschachtelte Navigationen unterstützt.
Variante 3: Dynamisches Einblenden
Eine schöne, wenn auch etwas aufwändigere Lösung ist es, die Navigation dynamisch ein- und auszublenden.
- Bei schmalem Bildschirm soll die Navigation standardmäßig ausgeblendet sein. Ein Klick auf einen entsprechenden Button macht sie sichtbar.
- Standardmäßig eingeblendet ist die Navigation hingegen bei viel verfügbarem Platz, sie lässt sich allerdings auch hier durch einen Klick auf den Menü-Button oder einen zusätzlichen Schließen-Button ausblenden.
Javascript benutzbar ist. Außerdem ist es empfehlenswert, nur so wenig wie möglich über Javascript zu erledigen und sich ansonsten mit CSS zu behelfen.
Es gibt verschiedene Lösungsansätze. Die Filamentgroup hat einige davon bei Github veröffentlicht. Die im Workshop geschilderte Lösung nimmt die dritte der dort vorgestellten Lösungen als Grundlage, weicht aber in verschiedenen Details ab – unter anderem, um das Beispiel so einfach wie möglich zu halten. Der HTML-Part ist relativ klar – und die Garantie dafür, dass Website und Navigation bei deaktiviertem Javascript benutzbar sind. Es gibt ein umfassendes Element, einen Inhaltsbereich und eine Navigation. Innerhalb des Inhaltsbereichs steht ein Link zur Navigation, die unterhalb des Inhalts angeordnet ist.
Der Javascript-Code ist hauptsächlich für das dynamische Zuweisen der richtigen Klassen zuständig:
- Ist Javascript aktiviert, wird dem HTML-Element die Klasse js zugewiesen. Auf diese Art können Sie eigene Formatierungen bei aktiviertem Javascript schreiben.
- In der Navigation wird ein Schließen-Button ergänzt. Da dieser nur bei aktiviertem Javascript eine Funktion hat, ist es sinnvoll, ihn erst mit Javascript zu erstellen.
- Außerdem wird abwechselnd bei Klick auf den Schließen- oder den Menü-Button die Navigation ein- oder ausgeblendet. Das eigentliche Ein- und Ausblenden erledigt CSS. Javascript bereitet diese Formatierungen vor, indem beim HTML-Start-Tag bei aktivierter Navigation die Klasse nav-spalte ergänzt wird; diese Klasse wird bei deaktivierter Navigation entfernt.
- Ab einem gewissen verfügbaren Platz soll die Navigation immer angezeigt werden, dafür wird der verfügbare Platz mit Javascript ermittelt und ab einer bestimmten Größe die Klasse nav-spalte beim HTML-Start-Tag ergänzt.
Zuerst wird jQuery eingebunden:
Dann folgt der Javascript-Code, der erst ausgeführt werden soll, wenn das Dokument vollständig geladen ist.
Sofern Javascript unterstützt wird, ergänzen wir beim HTML-Element die Klasse js.
Außerdem wird der Schließen-Button hinzugefügt und am Anfang der Navigation platziert.
Jetzt kommt der entscheidende Teil: Beim Klick auf den Menü- oder Schließen-Button soll die Navigation abwechselnd ein- und ausgeblendet werden. Dafür ergänzen wir die Klasse nav-spalte beim HTML-Element – und entfernen sie wieder. Für das wechselnde Ergänzen und Entfernen sorgt toggleClass():
Ab 100 Pixel verfügbarem Platz soll die Navigation immer angezeigt werden: