Ich bin mir nicht sicher, wie ich diese Frage am besten stellen / suchen kann:
Wenn Sie auf einen Ankerlink klicken, gelangen Sie zu dem Abschnitt der Seite mit dem verknüpften Bereich, der sich jetzt ganz oben auf der Seite befindet. Ich möchte, dass der Ankerlink mich zu diesem Teil der Seite schickt, aber ich möchte oben etwas Platz. Wie in, ich möchte nicht, dass es mich zu dem verknüpften Teil damit an der SEHR TOP schickt, ich möchte dort ungefähr 100 Pixel Platz.
Macht das Sinn? Ist das möglich?
Bearbeitet, um Code anzuzeigen - es ist nur ein Ankertag:
<a href="#anchor">Click me!</a>
<p id="anchor">I should be 100px below where I currently am!</p>
javascript
html
css
anchor
Damon
quelle
quelle
Antworten:
Auf diese Weise kann der Browser für uns zum Anker springen und diese Position zum Versetzen verwenden.
EDIT 1:
Wie von @erb hervorgehoben, funktioniert dies nur, wenn Sie sich auf der Seite befinden, während der Hash geändert wird. Das Aufrufen der Seite mit einer
#something
bereits in der URL enthaltenen Funktion funktioniert mit dem obigen Code nicht. Hier ist eine andere Version, um das zu handhaben:HINWEIS: Um jQuery zu verwenden, können Sie einfach ersetzen
window.addEventListener
mit$(window).on
in den Beispielen. Danke @Neon.EDIT 2:
Wie bereits von einigen erwähnt, schlägt das oben Gesagte fehl, wenn Sie zweimal oder mehrmals hintereinander auf denselben Ankerlink klicken, da kein
hashchange
Ereignis vorhanden ist, um den Versatz zu erzwingen.Diese Lösung ist eine geringfügig modifizierte Version des Vorschlags von @Mave und verwendet der Einfachheit halber jQuery-Selektoren
JSFiddle für dieses Beispiel ist hier
quelle
example.com/#anchor
ausexample.com/about/
.$('a[href^="#"]').on('click', function() { offsetAnchor(); });
. Auf diese Weise rufen Sie dieselbe Funktion auf , wenn dashref
einesa
Elements mit a beginnt#
.$(window).on("hashchange",
mitwindow.addEventListener("hashchange",
Wenn Sie nur mit CSS arbeiten, können Sie dem verankerten Element einen Abstand hinzufügen (wie in der obigen Lösung). Um unnötige Leerzeichen zu vermeiden, können Sie einen negativen Rand mit derselben Höhe hinzufügen:
Ich bin mir nicht sicher, ob dies auf jeden Fall die beste Lösung ist, aber es funktioniert gut für mich.
quelle
position: relative
CSS-Eigenschaft tun . So wäre es wieposition: relative; top: -50px;
Noch bessere Lösung:
Positionieren Sie das
<a>
Tag einfach mit absoluter Position innerhalb eines relativ positionierten Objekts.Funktioniert beim Eingeben der Seite oder durch eine Hash-Änderung innerhalb der Seite.
quelle
href="#anchor"
darin darauf zeigt. anstatt<p>
direkt auf das Element zu zeigen. Aber eine Warnung: Verwenden Sieid
anstelle vonname
in HTML5, siehe: stackoverflow.com/questions/484719/html-anchors-with-name-or-idHier ist die Antwort für 2020:
Weil es weit verbreitet ist !
quelle
Beste Lösung
quelle
Dies funktioniert ohne jQuery und beim Laden der Seite.
quelle
Um eine Verknüpfung zu einem Element herzustellen und dieses Element dann mit reinem CSS in einem beliebigen Abstand vom oberen Rand der Seite zu positionieren, müssen Sie es verwenden
padding-top
. Auf diese Weise befindet sich das Element immer noch am oberen Rand des Fensters, aber es scheint sichtbar in einiger Entfernung von der Oberseite des Sichtfensters positioniert zu sein, zum Beispiel:CSS:
JS Fiddle Demo .
So verwenden Sie einen einfachen JavaScript-Ansatz:
JS Fiddle Demo .
quelle
Das sollte funktionieren:
Ändern Sie einfach die .top-49 so, dass sie zu Ihrem Ankerlink passt.
quelle
Wenn Sie explizite Ankernamen verwenden, wie z.
dann können Sie in CSS einfach einstellen
Dies funktioniert so lange, wie Ihre HREF-Ankertags kein NAME-Attribut angeben
quelle
Erics Antwort ist großartig, aber du brauchst diese Auszeit wirklich nicht. Wenn Sie jQuery verwenden, können Sie einfach warten, bis die Seite geladen ist. Daher würde ich vorschlagen, den Code zu ändern in:
Dies befreit uns auch von diesem willkürlichen Faktor.
quelle
Versuchen Sie diesen Code, es hat bereits eine glatte Animation, wenn Sie auf den Link klicken.
quelle
Die einfachste Lösung:
CSS
HTML
quelle
Eine Variante der Lösung von Thomas: CSS- Element> Element- Selektoren können hier nützlich sein:
CSS
HTML
Durch Klicken auf den Link wird die Bildlaufposition auf 100 Pixel über dem Element mit einer Klasse von verschoben
paddedAnchor
befindet.Unterstützt in Nicht-IE-Browsern und in IE ab Version 9. Für die Unterstützung in IE 7 und 8
<!DOCTYPE>
muss a deklariert werden.quelle
Ich habe gerade eine einfache Lösung für mich gefunden. Hatte einen Rand von 15px
HTML
CSS
quelle
Verwenden Sie nur CSS und haben Sie zuvor keine Probleme mit abgedeckten und nicht anklickbaren Inhalten (der Punkt dabei sind die Zeigerereignisse: keine):
CSS
HTML
quelle
Setzen Sie dies in Stil:
und verwenden Sie diese Klasse in einem separaten
div
Tag vor den Links, Beispiel:oder benutze diesen PHP-Code für das Echo Link Tag:
quelle
Ich weiß, dass dies etwas spät ist, aber ich habe etwas sehr Wichtiges gefunden, das Sie in Ihren Code einfügen können, wenn Sie Bootstraps Scrollspy verwenden. ( http://getbootstrap.com/javascript/#scrollspy )
Das hat mich stundenlang verrückt gemacht.
Der Versatz für den Bildlaufspion MUSS mit dem window.scrollY übereinstimmen, sonst besteht die Gefahr, dass:
quelle
Basierend auf der @ Eric Olson- Lösung ändern Sie nur ein wenig, um das Ankerelement einzuschließen , auf das ich speziell eingehen möchte
quelle
Ich habe nur das gleiche Problem. Ich habe ein Navi pixiert und ich möchte, dass der Angkor unter dem Navi startet. Die Lösung
window.addEventListener...
funktioniert bei mir nicht, weil ich meine Seitescroll-behavior:smooth
so eingestellt habe, dass sie den Versatz einstellt. Scrollen Sie stattdessen zum Angkor. diesetTimeout()
Arbeit, wenn die Zeit ausreicht, um bis zum Ende zu scrollen, aber es sieht immer noch nicht gut aus. Meine Lösung bestand also darin, ein gesetztes absolutes Div im Angkor mitheight:[the height of the nav]
und hinzuzufügenbottom:100%
. In diesem Fall endete dieses Div oben im Angkor-Element und begann an der Position, zu der Sie das Angkor scrollen möchten. Jetzt setze ich nur noch den Angkor-Link zu diesem absoluten Div und die Arbeit erledigt :)quelle
Ich war mit dem ähnlichen Problem konfrontiert und habe es mithilfe des folgenden Codes gelöst
quelle
quelle