Benutzerdefinierte Scrollbalken in WebKit

Avatar of Chris Coyier
Chris Coyier am

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

Früher konnte man Scrollbalken in IE (z.B. v5.5) mit nicht standardmäßigen CSS-Eigenschaften wie scrollbar-base-color anpassen, die man auf dem scrollenden Element (wie dem <body>) verwendete und damit total coole Dinge machen konnte. IE hat das eingestellt.

Heute sind benutzerdefinierte Scrollbalken wieder da, aber diesmal in WebKit. Es ist mittlerweile etwas besser, da die Eigenschaften Vendor-Präfixe (z.B. ::-webkit-scrollbar) haben und das „Shadow DOM“ verwenden. Das gibt es schon seit einigen Jahren. David Hyatt hat es im Blog Anfang 2009 vorgestellt.

Die Grundlagen

Die verschiedenen Teile

Das sind die Pseudo-Elemente selbst. Die tatsächlichen Teile der Scrollbalken.

::-webkit-scrollbar              { /* 1 */ }
::-webkit-scrollbar-button       { /* 2 */ }
::-webkit-scrollbar-track        { /* 3 */ }
::-webkit-scrollbar-track-piece  { /* 4 */ }
::-webkit-scrollbar-thumb        { /* 5 */ }
::-webkit-scrollbar-corner       { /* 6 */ }
::-webkit-resizer                { /* 7 */ }

Die verschiedenen Zustände

Das sind die Pseudo-Klassen-Selektoren. Sie ermöglichen eine spezifischere Auswahl der Teile, z.B. wenn sich der Scrollbalken in verschiedenen Zuständen befindet.

:horizontal
:vertical
:decrement
:increment
:start
:end 
:double-button
:single-button
:no-button
:corner-present
:window-inactive

Ich werde diesen Abschnitt aus Davids Blogbeitrag im WebKit-Blog übernehmen, da er jeden Teil gut erklärt.

:horizontal – Die horizontale Pseudo-Klasse wird auf alle Scrollbalkenteile angewendet, die eine horizontale Ausrichtung haben.

:vertical – Die vertikale Pseudo-Klasse wird auf alle Scrollbalkenteile angewendet, die eine vertikale Ausrichtung haben.

:decrement – Die Dekrement-Pseudo-Klasse wird auf Buttons und Track-Teile angewendet. Sie gibt an, ob der Button oder das Track-Teil die Position der Ansicht beim Gebrauch verringert (z.B. nach oben bei einem vertikalen Scrollbalken, nach links bei einem horizontalen Scrollbalken).

:increment – Die Inkrement-Pseudo-Klasse wird auf Buttons und Track-Teile angewendet. Sie gibt an, ob ein Button oder das Track-Teil die Position der Ansicht beim Gebrauch erhöht (z.B. nach unten bei einem vertikalen Scrollbalken, nach rechts bei einem horizontalen Scrollbalken).

:start – Die Start-Pseudo-Klasse wird auf Buttons und Track-Teile angewendet. Sie gibt an, ob das Objekt vor dem Thumb platziert ist.

:end – Die End-Pseudo-Klasse wird auf Buttons und Track-Teile angewendet. Sie gibt an, ob das Objekt nach dem Thumb platziert ist.

:double-button – Die Double-Button-Pseudo-Klasse wird auf Buttons und Track-Teile angewendet. Sie wird verwendet, um zu erkennen, ob ein Button Teil eines Button-Paares ist, das sich am selben Ende eines Scrollbalkens befindet. Bei Track-Teilen gibt sie an, ob das Track-Teil an ein Button-Paar angrenzt.

:single-button – Die Single-Button-Pseudo-Klasse wird auf Buttons und Track-Teile angewendet. Sie wird verwendet, um zu erkennen, ob sich ein Button allein am Ende eines Scrollbalkens befindet. Bei Track-Teilen gibt sie an, ob das Track-Teil an einen einzelnen Button angrenzt.

:no-button – Wird auf Track-Teile angewendet und gibt an, ob das Track-Teil bis zum Rand des Scrollbalkens reicht, d.h. ob sich an diesem Ende des Tracks kein Button befindet.

:corner-present – Wird auf alle Scrollbalkenteile angewendet und gibt an, ob eine Scrollbalkenecke vorhanden ist.

:window-inactive – Wird auf alle Scrollbalkenteile angewendet und gibt an, ob das Fenster, das den Scrollbalken enthält, gerade aktiv ist. (In neueren Nightly-Builds gilt diese Pseudo-Klasse auch für ::selection. Wir planen, sie auf beliebigen Inhalt zu erweitern und als neue Standard-Pseudo-Klasse vorzuschlagen.)

Alles zusammen

Diese Pseudo-Elemente und Pseudo-Klassen-Selektoren arbeiten zusammen. Hier sind einige zufällige Beispiele.

::-webkit-scrollbar-track-piece:start {
   /* Select the top half (or left half) or scrollbar track individually */
}

::-webkit-scrollbar-thumb:window-inactive {
   /* Select the thumb when the browser window isn't in focus */
}

::-webkit-scrollbar-button:horizontal:decrement:hover {
   /* Select the down or left scroll button when it's being hovered by the mouse */
}

Sehr einfaches Beispiel

Um einen wirklich einfachen benutzerdefinierten Scrollbalken zu erstellen, könnten wir Folgendes tun:

::-webkit-scrollbar {
    width: 12px;
}
 
::-webkit-scrollbar-track {
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); 
    border-radius: 10px;
}
 
::-webkit-scrollbar-thumb {
    border-radius: 10px;
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); 
}

In dem wir diesen Effekt auf einem einfachen Div mit vertikal überfließendem Text erhalten würden.

In Aktion

Schauen Sie sich die sehr dezenten und schönen Scrollbalken auf dem Blog von Tim Van Damme an, Maxvoltar (Update September 2012: Tim's Website verwendet dieses Design nicht mehr)

Das besonders Schöne hierbei ist, dass sich der Scrollbalken auf dem Body-Element befindet, aber der Scrollbalken nicht oben, unten oder rechts am Browserfenster klebt, wie es normalerweise bei Scrollbalken der Fall ist. Ich habe eine Testseite mit kopier- und einfügbarem Code erstellt, um einen ähnlichen Effekt zu erzielen.

Demo ansehen

Auf Forrst verwenden sie benutzerdefinierte Scrollbalken für Code-Snippets, die ebenfalls ziemlich gut aussehen. Sie sind weniger visuell aufdringlich und kämpfen daher nicht so sehr mit der Code-Hervorhebung.

Verwandt