HTML Anker („Sprungmarken“) sind ja so etwas wie das Urgestein des Webdesign. Damit lassen sich einfach direkt Positionen innerhalb eines HTML-Dokuments ansteuern. Klickt man auf einen Anker-Link, springt die geladene Seite direkt zum angesteuerten Bereich.
Seit einiger Zeit sind einseitige Layouts, sogn. One-Pager ja recht populär. Alle, oder zumindest die wichtigsten Inhalte werden dabei auf nur einer Seite dargestellt. Und mit den One-Pagern erleben Sprungmarken / Anker-Links gerade ein gewisses Comeback. Gerade für die Darstellung auf mobile Geräten (Smartphones) bietet die Kombination aus One-Pager und Anker-Navigation unter Umständen gewisse Vorteile. Vor allem: die Webseite muss nicht neu geladen werden.
Was aber, wenn man am oberen Fensterrand eine fixierte Navigationsleiste hat? Oder die Sprungmarke aus anderen Gründen verschoben werden soll? Dann muss der Sprung zum Anker gegebenenfalls korrigiert werden.
Für ein Projekt musste ich neulich genau so eine Anpassung machen. Es gab nicht nur eine fixierte Navigationsleiste, sondern auch einen Weißraum oberhalb des Inhalts, der aus Design-Gründen nicht angeschnitten werden sollte. Der angesprungene Inhalte sollte also freistehend zu sehen sein und nicht am oberen Browserrand kleben. Insgesamt ging es um ein Offset von 100 Pixeln zwischen der Position der Sprungmarke und der eigentlich gewünschten Position.
Sprungmarke verschieben – Anchor-Offset in CSS
Mithilfe eines kleinen Tricks kann man sich da behelfen: der Anker-Punkt wird als freistehendes Element vor den Inhalt desetzt, den man eigentlich ansteuern möchte. Dann wird der Anker-Punkt innerhalb des angesteuerten Elements absolut positioniert (position: absolute;) und per CSS beliebig weit nach oben verschoben. Hier beispielhaft ein entsprechender Code-Schnippsel für ein Anchor-Offset von 100 Pixeln:
<div style="position:relative;">
<div class="anchor" id="jump123" style="position:absolute; top:-100px;"></div>
<div class = "mein_text">I should be 100px below where I currently am!</div>
</div>
HTML Anker in Masonry setzen
Ursprünglich benötigte ich die gute alte Sprungmarke für eine Bilder-Galerie, die die Bilder mithilfe des jQuery-Plugins Masonry organisiert. Die gute Nachricht: der oben beschrieben Trick funktioniert ganz reibungslos mit dem jQuery-Skript Masonry. Man setzt den Anker einfach in ein (leeres / unsichtbares) div-Element innerhalb des jeweiligen Containers (item) und verlagert die Position dann wie oben beschrieben um die gewünschte Pixelanzahl nach oben. Schon wird das angesteuerte Element beispielsweise ‚mittig‘ geladen. Die eigentliche Position kann je Bildschirmgröße und gewähltem Pixelabstand natürlich variieren.
SUPER!! Genau das habe ich mir vor ein paar Tagen augedacht, aber dachte mir das es nicht gehen würde… aber doch!!! Ich liebe DICH! 😀
oh! Vielen Dank für die freundliche Rückmeldung! mfG, tb
Vielen Dank für den Tipp, hat mir sehr weitergeholfen!
Besten Dank! Hat mir Arbeit für eigene Knobelei gespart.
Danke für den super Tipp mit dem CSS Anker!
Hab das gerade tausend Mal erfolglos probiert, bis mir aufgefallen ist, dass da noch px hin muss 🙈
Danke für den Tipp!!!
hat super geklappt, vielen Dank für den tollen Tipp!
Ganz viel liebe!
Ich habe mehrere Ankerpunkte die aber alle einen anderen Bereich überlappen (position: relative; top: -116px;)
Mit deinem „Fix“ geht es einwandfrei.
Danke!