Wir haben heute ein wirklich einfaches Konzept, Leute! Eine Seitenleiste, die beim Scrollen einer Seite "folgt". Es gibt verschiedene Möglichkeiten, dies zu erreichen. Wir werden zwei behandeln: CSS und JavaScript (jQuery) mit einem Bonus-CSS-Trick.

Demo anzeigen Dateien herunterladen
CSS
Der einfachste Weg, dies zu handhaben, ist die Verwendung der CSS-Fixed-Positionierung. Unsere Seitenleiste befindet sich in einem div mit der ID #page-wrap mit relativer Positionierung, sodass die Seitenleiste dort platziert wird. Dann verschieben wir sie mit einem Margin an die richtige Stelle.
#page-wrap {
width: 600px;
margin: 15px auto;
position: relative;
}
#sidebar {
width: 190px;
position: fixed;
margin-left: 410px;
}
Mit dieser Technik bleibt die Seitenleiste beim Scrollen auf der Seite fest an ihrem Platz.
jQuery
Wenn wir JavaScript verwenden, können wir messen, wie weit der Benutzer das Fenster heruntergescrollt hat, nachdem ein Fenster.scroll-Ereignis ausgelöst wurde. Wenn dieser Abstand größer ist als die anfängliche obere Position der Seitenleiste, können wir den oberen Rand der Seitenleiste anpassen, um sie in den sichtbaren Bereich zu schieben.
Optimiert von Doug Neiner
$(function() {
var $sidebar = $("#sidebar"),
$window = $(window),
offset = $sidebar.offset(),
topPadding = 15;
$window.scroll(function() {
if ($window.scrollTop() > offset.top) {
$sidebar.stop().animate({
marginTop: $window.scrollTop() - offset.top + topPadding
});
} else {
$sidebar.stop().animate({
marginTop: 0
});
}
});
});
Hier gibt es keinen besonderen Vorteil, außer dem coolen animierten Effekt, der sicherlich Aufmerksamkeit erregt.
Bonus „Reveal“-Technik
Auf Tim Van Dammes Maxvoltar.com haben einzelne Blogbeiträge eine spezielle Seitenleiste mit einem unterhaltsamen „Reveal“-Effekt, wenn die Seite nach unten gescrollt wird.

Der Trick besteht darin, einen Header-Bereich mit einem einfarbigen Hintergrund über der Seitenleiste zu haben, die darunter gezogen wird. Sie könnten dafür einen negativen oberen Rand verwenden oder dentopPositionierungswert anpassen. Dann wird ein transparentes weißes Verblassungsbild oben auf der Seitenleiste platziert und ebenfalls per z-index darübergelegt. Wenn sich die Oberseite der Seitenleiste, die vom Header verdeckt wird, nach unten in Sichtweite schiebt, „enthüllt“ das weiße Verblassungsbild sie.
/* Negative top margin on sidebar pulls up header under title-area */
#sidebar {
width: 190px;
position: fixed;
margin: -135px 0 0 410px;
}
/* Title area kept above all with z-index */
#title-area {
background: white;
position: relative;
z-index: 3000;
}
/* white-fade image */
#reveal {
position: absolute;
right: 0;
bottom: -20px;
}

Bedenken
Bei all diesen Techniken haben wir es im Wesentlichen mit fester Positionierung zu tun. Eine „echte“ feste Positionierung von Inhalten (im Gegensatz zu z. B. einem Hintergrundbild) ist ein leicht gefährliches Gebiet. Wir müssen sehr sicher sein, dass die Inhalte, die wir mit fester Positionierung versehen, niemals höher sind als der sichtbare Bereich selbst eines sehr kleinen Monitors. Wenn die Höhe diesen sichtbaren Bereich überschreitet, wären sie vollständig verborgen und unzugänglich, über den Rand des Browserfensters hinaus. Bei Elementen, die nicht fest positioniert sind, würde dieser Überhang eine Scrollleiste auslösen, feste Positionierungselemente tun dies nicht.
Cross-Browser Hoo-Hah
Das sollte in „allen“ Browsern funktionieren. Für IE 6 und IE 7 habe ich einige bedingte Kommentare für zusätzliches CSS hinzugefügt, damit sie sich richtig verhalten. Schauen Sie sich gerne den Quellcode in der Demo an, um das zu überprüfen. Dies ist eine nette Demo als Referenz für feste Positionierung in IE 6 (im Grunde müssen Sie einen zusätzlichen äußeren Container für die Seite haben und absolute Positionierung verwenden, um es zu simulieren).
MooTools
David Walsh beschäftigt sich mit einer MooTools-Version der Scrolling Sidebar.
jQuery-Plugin
Es gibt auch ein jQuery-Plugin im Repository, das dasselbe tut, mit dem zusätzlichen coolen Feature, dass es vor dem Footer stoppt.
Dieser Link ist jetzt defekt, aber hier ist eine große Zusammenfassung von jQuery-Plugins, die die gleiche Art von Ding tun.
Ich wusste, dass ich etwas Ähnliches schon mal gesehen hatte
Floating Menüs
schöner Effekt
Al
Persönlich habe ich diese Art von Effekt oft als störend empfunden und für Werbung und Anmeldungen genutzt. Es ist wie eine Biene, die einen auf einem schönen Spaziergang nicht in Ruhe lässt. Ich denke, dieser Effekt tauchte erstmals Mitte der 1990er Jahre auf Geocities auf.
Da stimme ich Ihnen zu, ich hasse es, wenn es für Werbung verwendet wird. Es kann jedoch auch gut eingesetzt werden, wie das Beispiel von maxvoltar.com zeigt.
Ich bevorzuge die CSS-Methode, die sich „fester“ anfühlt als die JS-Methode, die sich bewegt und ablenkend sein kann. Aber auch das kann seine Verwendung haben.
Alles in allem eine gute Technik, die man im Werkzeugkasten haben sollte.
Mein Favorit ist immer noch das reine CSS! Aber das Reveal ist auch cool! :-)
Toller Beitrag, ich habe schon seit einiger Zeit nach einer JavaScript-Lösung für diesen Effekt gesucht. Sie können einen ähnlichen Effekt auf der Website von BlackEstate sehen.
Danke für das Teilen in jedem Fall :)
Ich war nie ein Fan von den folgenden Menüs/Anzeigen an den Seiten von Websites. Aber wenn es mit Bedacht eingesetzt wird, kann es für das Design Ihrer Website sehr effektiv sein. Ich habe versucht, es ein paar Mal zu verwenden, einmal für eine Bildergalerie, bei der 5/6 Bilder über die Seite verteilt waren und beim Scrollen die Thumbnails für die nächste Seite folgten, was ganz gut funktionierte. Man kann damit einige großartige Dinge schaffen. Versuchen Sie, ein Bild eines Bungee-Jumpers an der Seite zu haben und jedes Mal, wenn Sie nach unten scrollen, fällt er weiter haha. Ich bin sicher, es gibt eine Möglichkeit, jQuery zu verwenden, um auch eine Art Bounce-Effekt hinzuzufügen?!
Vor ein paar Wochen schrieb Remy Sharp einen ähnlichen Beitrag über jQuery für Designer. Er nannte den Effekt „fixed floating elements“. In seinem Beispiel behebt er den Ruck-Effekt beim Scrollen, wie Damian Web anmerkte.
Ich stimme dem Ruck-Effekt zu. Er lenkt zu sehr ab, wenn man beim Lesen eines Textblocks scrollt.
Ich bin ein großer Fan der „Reveal“-Technik, besonders für Widgets, die ihren Inhalt horizontal scrollen. Habe sie noch nie auf diese Weise verwendet gesehen – sehr cool.
Geniale Technik und Aufschlüsselung :-) Werde sie für zukünftige Projekte verwenden~!
Danke für den Leitfaden.
Wow! Toller Artikel Chris, kommen bald HTML5-Artikel?
Ich habe diesen Artikel geliebt, genau das, wonach ich gesucht habe. Ich bin auf ein Problem gestoßen, die mitgelieferte jQuery-Bibliothek von WordPress funktionierte bei mir nicht, ich musste Googles jQuery-Bibliothek aufrufen. Jetzt suche ich nach Code, um die enthaltene Datei aus wp_head zu entfernen oder die wp_head-Funktion zu ersetzen, um die Google-Bibliothek stattdessen aufzurufen, mit functions.php, irgendwelche Vermutungen???
Wow!! Nett!!!
Du hörst nie auf zu beeindrucken oder mich lernen zu lassen, da ich mich gefragt habe, wie ich das angehen soll, wirklich tolle Aufbereitung!
Ich schätze deine Zeit & dein Engagement für all das Designen, Codieren & Schreiben/Bloggen, das du so viel tust!
Mach weiter so, häufiger Besucher, nicht nur für Inhalte, sondern auch zum Anpassen neuer Fähigkeiten :)
Ich wünschte nur, du würdest viel mehr posten!!! Schade, dass du kein Roboter bist… oder bist du es!? haha, nur Spaß
Nett! Ich werde versuchen, die „jQuery“-Version in meinem nächsten Projekt zu verwenden.
Frage: Ist es möglich, sie stoppen zu lassen?
Ich meine, wenn ich sie in der Seitenleiste auf einer Seite mit einem langen Footer (oder auf einem winzigen Bildschirm) habe. Sie wird den Footer einfach nach unten schieben, so dass man den gesamten Footer nicht sehen kann.
Ich hoffe, jemand versteht mein Problem! Danke!
Ich hatte dasselbe Problem.
Wenn jemand weiß, wie man mit einem festen Footer umgeht?
Bevor ich danke für die Weitergabe* sage
Ich bin auf dasselbe Problem mit einem hohen Footer gestoßen, aber ich bin nicht erfahren genug in .js, um herauszufinden, wie ich es stoppen kann. Irgendwelche Ideen?
Hat jemand jemals eine Lösung dafür gefunden?
Sehr gute Technik!
Guter Beitrag, an die jQuery-Variante habe ich nicht gedacht. Ich liebe die window scrollTop-Funktion (wusste nicht, dass sie existiert).
Ich stelle mir vor, man könnte so etwas tun, um den Effekt wie bei dafont (.com) mit dem Werbebanner auf der linken Seite zu erzielen.
Unglaublich, ich habe gestern gerade daran gedacht, dies auf unserer Website für alle Social-Media-Icons auf den Blog-Seiten zu tun.
Sie haben mir gerade Zeit gespart, vielen Dank.
Steve
Ich wollte schon immer wissen, wie das geht!
Wow, das war ein toller Trick, das Reveal war super!
Wie wäre es mit einer JavaScript-Version ohne den „Bounce“? Wie auf der Website store.apple.com, wenn man einen Computer konfiguriert?
Ich habe bereits erwähnt, Remy Sharp hat einen Beitrag über jQuery for Designers geschrieben. Er nannte den Effekt „fixed floating elements“. Er behebt den „Bounce“ vollständig. Ich habe den Link beim ersten Mal kaputt gemacht.
Fantastisch. Danke für die Tricks. ^_^
Toller Effekt, Danke
Danke für diesen Artikel. Besonders die animierte jQuery-Version war für mich sehr hilfreich!
Ich suche nach einem Code wie der Facebook-Seitenleiste. Das kommt dem sehr nahe, aber was ist, wenn die Seitenleiste höher ist als die Bildschirmgröße. Beispiel: Melden Sie sich auf Ihrer Facebook-Profilseite an und scrollen Sie nach unten. Wenn die linken Widgets am Ende fertig sind, beginnen sie, Ihrer Scrollbewegung zu folgen, und tun dasselbe in umgekehrter Richtung.
Kann dieser Beitrag für so etwas bearbeitet werden…?
Ist es möglich, eine „Schließen“-Funktion hinzuzufügen, damit die Leute das schwebende Ding schließen und öffnen können, wenn sie es nicht mehr sehen wollen?
Danke, das hat sehr geholfen, obwohl ich festgestellt habe, dass sich die Seitenleiste nach links oder rechts bewegte, wenn die Größe des Browserfensters geändert wurde. Stattdessen habe ich „position: fixed“ auf den Widget-Bereich innerhalb der Seitenleiste angewendet, was dasselbe Ergebnis erzielte, ohne die unerwünschte seitliche Bewegung. Danke für den Beitrag.
Es gibt jetzt „position:sticky“, das es Ihnen ermöglicht, das zu tun. Es wird in Firefox (Beta, glaube ich) und Webkit-Browsern unterstützt.
Ich musste eine ähnliche Sidebar-Navigation in ein Projekt implementieren, also habe ich ein Plugin dafür erstellt: https://github.com/fillswitch/Jquery-Sidebar-Page-Navigation
Ich hoffe, das hilft anderen in Zukunft!
Auf jeden Fall jedes Mal (bei onscroll-Ereignis) den Offset berechnen.
und sogar
$(function() {
Ist es möglich, eine „Schließen“-Funktion hinzuzufügen, damit die Leute das schwebende Ding schließen und öffnen können, wenn sie es nicht mehr sehen wollen? Und es geschlossen bleiben lassen, wenn der Benutzer von Seite zu Seite wechselt, bis er auf „Öffnen“ klickt.
Hallo Chris, der Link zum JQuery-Plugin ist defekt, Sie möchten das vielleicht oder vielleicht auch nicht beheben.
Mit einem neuen Link behoben.
Ihre jQuery-Lösung hier hat mir in einer dynamischen AngularJS-Anwendung den Hintern gerettet. Vielen Dank!!