Styling Scrollable Areas

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Die Scrollbalken von Browserfenstern werden nicht von der Website selbst oder generell vom Browser gestylt. Sie stammen vom Betriebssystem selbst.

Der Wunsch, das Aussehen dieser Scrollbalken anzupassen, ist stark. Wenn man anfängt, fühlt es sich an, als sollte man das mit CSS machen können. Komplizierter wird es, wenn man nach CSS sucht, um Scrollbalken zu ändern/anzupassen, findet man wahrscheinlich etwas. Das Problem ist, dass es in IE 5.5 proprietäre Browser-Erweiterungen gab, um das Aussehen Ihrer Scrollbalken mit Attributen wie "scrollbar-face-color" zu ändern. IE 5.5 ist lange verschwunden, und das Konzept, eine solche Kontrolle in CSS zu ermöglichen, ist mit ihm verschwunden.

Es gibt jedoch Situationen, in denen Sie sich stark wünschen würden, die Kontrolle über das Aussehen eines Scrollbalkens zu haben. Zum Beispiel, wenn der Scrollbalken nicht für das gesamte Browserfenster ist. Sie haben einen kleinen Bereich auf Ihrer Seite, dessen Höhe Sie kontrollieren müssen, der aber Inhalte enthält, die den Container überlaufen. Sie können den Überlauf dieses Containers auf "auto" setzen und erhalten Ihren Standard-Scrollbalken. Je nach Design der Website kann dieser Scrollbalken seltsam und überhaupt nicht wünschenswert aussehen.

Glücklicherweise können wir die erstaunlichen Fähigkeiten von JavaScript nutzen, um dieses Problem zu lösen und uns wieder vollständige Designkontrolle über unsere Scrollbalken zu verschaffen. Die Grundidee ist, dass wir den scrollbaren Bereich in ein neues Element mit VERBORGENEM Überlauf einpacken, dann entfernen wir den Überlauf vom inneren Element, damit es so hoch sein kann, wie es sein muss. Dann fügen wir einen eigenen Scrollbalken hinzu und beobachten Mausereignisse darauf. Wenn wir ihn nach oben und unten ziehen, passt er den relativen Top-Wert des inneren Containers an und repliziert perfekt das Scrollen.

Um uns die Arbeit zu erleichtern, verwenden wir ein bereits vorhandenes jQuery-Plugin: jScrollPane.

Demo anzeigen Dateien herunterladen

 

Getestet und es funktioniert in Fx3, Safari 4, IE 6. Opera 9.52 funktionierte, löste aber in einigen Fällen seltsamerweise einen regulären Body-Scrollbalken aus.

Schritt 1: Das Markup

<body>

	<div id="page-wrap">

	<div class="scroll-pane">
 		
	</div>
	
	<img src="images/bottomshadow.png" alt="" class="bottomshadow" />
	
	</div>

</body>

Der einzige Grund, warum wir hier ein Pagewrap haben, ist, dass wir unseren kleinen scrollbaren Bereich zentrieren. Da das Plugin das Div mit der Klasse "scroll-pane" in ein weiteres Div einpackt, wird jede Zentrierung, die wir darauf anwenden, es nur innerhalb dieses neuen Wraps zentrieren, nicht am Body selbst. Anstatt uns damit herumzuschlagen, packen wir es also einfach wieder in einen Page-Wrap, um unsere grundlegende Positionierung und Zentrierung vorzunehmen. Wir können diesem Wrap auch eine relative Positionierung zuweisen, die es uns ermöglicht, die Schatten-Grafik darin zu platzieren und sie genau dort absolut zu positionieren, wo wir sie unten haben wollen.

Schritt 2: Das CSS

*					{ margin: 0; padding: 0; }
body				{ font-size: 12px; line-height: 30px; font-family: Georgia, serif; 
					  background: url(../images/clown.jpg) top left no-repeat #fbfbfb; }

#page-wrap			{ width: 244px; margin: 50px auto; position: relative; }

.scroll-pane 		{ width: 234px; overflow: auto; padding-right: 10px; height: 400px; }

.bottomshadow 		{ position: absolute; top: 375px; left: -47px; z-index: 9999; }

.jScrollPaneContainer 	{ position: relative; overflow: hidden; z-index: 1; }

.jScrollPaneTrack 		{ position: absolute; cursor: pointer; right: 0; top: 0; height: 100%;
						  background: url(../images/bar.jpg) top center repeat-y; padding: 3px; }

.jScrollPaneDrag	{ position: absolute; background: url(../images/ball.png) center center no-repeat;
					  cursor: pointer; overflow: hidden; }

Wir haben hier bereits den Großteil der Theorie abgedeckt. Von Interesse sind jScrollPaneTrack und jScrollPaneDrag. Hier können Sie kontrollieren, wie der Scrollbalken und der Scroll-Griff aussehen. Ich habe eine ziemlich zerklüftete Linie als Bahn und eine kleine zerklüftete Kugel als Griff angewendet.

Schritt 3: JavaScript aktivieren

Typische Plugin-Aktivierung hier. Fügen Sie jQuery auf Ihrer Seite ein, dann das Plugin, dann rufen Sie die neue Funktion des Plugins mit den benötigten Parametern auf. In unserem Fall ist die Kugel 12 Pixel breit, also müssen wir das beim Aufruf der Funktion angeben. So funktioniert diese Funktion eben.

<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="js/jScrollPane.js"></script>
<script type="text/javascript">
	$(function(){
		$('.scroll-pane').jScrollPane({
			scrollbarWidth: 12
		});
	});
</script>

Schritt 4: Usability und Barrierefreiheit berücksichtigen

Wenn Sie den Standard-Scrollbalken auf diese Weise entfernen, entziehen Sie den Benutzern Konsistenz und Konvention. Menschen gewöhnen sich so sehr an Benutzeroberflächenkonventionen wie Scrollbalken, dass sie möglicherweise über Ihren angepassten Scrollbalken hinwegsehen und ihn nicht einmal als Scrollbalken erkennen. Das ist offensichtlich ein Problem. Sie sollten sich ganz sicher sein, dass Ihr Scrollbalken stark als Scrollbalken erkennbar ist, wenn Sie möchten, dass die Leute ihn tatsächlich benutzen (das Beispiel in diesem Artikel könnte in dieser Hinsicht dramatisch verbessert werden). Ich verehre Jakob Nielsen sicherlich nicht (besonders seine gottlosen Websites), aber er hat einen ziemlich guten Artikel über Scrollbalken-Standards und was bei benutzerdefinierten Scrollbalken funktioniert und was nicht.

Seien Sie sich auch bewusst, dass die Standard-Scrollbalken einige integrierte Barrierefreiheitsfunktionen mit sich bringen, die Ihre neuen benutzerdefinierten nicht haben. Meistens ist dieser Plugin-Ansatz solide. Wenn JavaScript deaktiviert ist, erhalten Sie einfach normale Scrollbalken. Wenn CSS deaktiviert ist, sehen Sie all Ihre Inhalte problemlos. Wenn beides aktiviert ist, erhalten Sie Ihren schicken neuen Scrollbalken, verlieren aber die Möglichkeit, diesen Bereich mit herkömmlichen Methoden zu scrollen (wie dem Scrollrad Ihrer Maus).

Berücksichtigen Sie all dies, bevor Sie sich für einen benutzerdefinierten Ansatz entscheiden. Ich denke, es kann in vielen Designsituationen die richtige Antwort sein, bei denen ein Standard-Scrollbalken des Betriebssystems ein Design ruinieren kann.