Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

::scroll-button()

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Das ::scroll-button() CSS Pseudo-Element repräsentiert einen Button zur Steuerung des Scrollens eines Scroll-Containers. Diese werden auf Scroll-Containern erzeugt, wenn ihr content-Wert nicht none ist. Die Richtung des Scrollens wird durch den Parameterwert bestimmt.

Syntax

css
::scroll-button(<scroll-button-direction>) {
  /* ... */
}

Parameter

<scroll-button-direction>

Ein Wert, der angibt, welche Richtung des Scroll-Buttons ausgewählt werden soll. Folgende Werte stehen zur Verfügung:

*

Wählt alle Scroll-Buttons des ursprünglichen Elements aus und ermöglicht es, Stile für jeden von ihnen in einer einzigen Regel anzuwenden.

down

Wählt den Button, der den Inhalt nach unten scrollen wird.

left

Wählt den Button, der den Inhalt nach links scrollen wird.

Wählt den Button, der den Inhalt nach rechts scrollen wird.

up

Wählt den Button, der den Inhalt nach oben scrollen wird.

block-end

Wählt den Button, der den Inhalt in der Blockende-Richtung scrollen wird.

block-start

Wählt den Button, der den Inhalt in der Blockstart-Richtung scrollen wird.

inline-end

Wählt den Button, der den Inhalt in der Inlineende-Richtung scrollen wird.

inline-start

Wählt den Button, der den Inhalt in der Inlinestart-Richtung scrollen wird.

Die Spezifikation definiert auch zwei weitere Werte — next und prev — aber diese werden derzeit in keinem Browser unterstützt.

Beschreibung

Die ::scroll-button() Pseudo-Elemente werden nur dann innerhalb eines Scroll-Containers erzeugt, wenn deren content-Eigenschaften auf einen Wert ungleich none gesetzt sind. Sie werden als Geschwister der Kind-DOM-Elemente des Scroll-Containers erzeugt, unmittelbar vor ihnen und allen auf dem Container erzeugten ::scroll-marker-group.

Sie können bis zu vier Scroll-Buttons pro Scroll-Container erzeugen, die den Inhalt zu den Anfängen und Enden der Block- und Inline-Axen scrollen. Das Argument des Selektors gibt an, welche Scroll-Richtung ausgewählt ist. Sie können auch einen Wert von * angeben, um alle ::scroll-button() Pseudo-Elemente zu adressieren und Stile für alle Buttons in einer einzigen Regel bereitzustellen.

Die erzeugten Buttons verhalten sich wie reguläre <button>-Elemente, einschließlich der gemeinsamen Standardbrowserstile. Sie sind fokussierbar, zugänglich und können wie reguläre Buttons aktiviert werden. Wenn ein Scroll-Button gedrückt wird, wird der Inhalt des Scroll-Containers in die angegebene Richtung um eine "Seite" gescrollt oder ungefähr um die Dimension des Scroll-Containers, ähnlich wie beim Drücken der Tasten PgUp und PgDn.

Es wird empfohlen, CSS-Scroll-Snapping auf dem Scroll-Container einzurichten und jedes einzelne Inhaltsstück, das Sie scrollen möchten, als Snap-Ziel zu setzen. In diesem Fall wird durch Aktivierung eines Scroll-Buttons der Inhalt zu dem Snap-Ziel gescrollt, das eine "Seite" entfernt ist. Während die Scroll-Buttons auch ohne Scroll-Snapping funktionieren, erzielen Sie möglicherweise nicht den gewünschten Effekt.

Wenn es nicht mehr möglich ist, in der spezifischen Scroll-Richtung eines Scroll-Buttons weiter zu scrollen, wird der Button automatisch deaktiviert, andernfalls ist er aktiviert. Sie können die Scroll-Buttons in ihrem aktivierten und deaktivierten Zustand mithilfe der :enabled und :disabled Pseudo-Klassen stylen.

Beispiele

Weitere Karussell-Beispiele finden Sie unter Erstellen von CSS-Karussells.

Scroll-Buttons erstellen

In diesem Beispiel zeigen wir, wie man Scroll-Buttons auf einem CSS-Karussell erstellt.

HTML

Wir haben eine grundlegende HTML-<ul>-Liste mit mehreren <li>-Listenelementen.

html
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
  <li>Item 6</li>
  <li>Item 7</li>
  <li>Item 8</li>
</ul>

CSS

Das Karussell stylen

Wir konvertieren unser <ul> in ein Karussell, indem wir das display auf flex setzen und eine einzelne, nicht umgebrochene Reihe von <li>-Elementen erstellen. Die overflow-x Eigenschaft ist auf auto gesetzt, was bedeutet, dass, wenn die Elemente ihren Container auf der x-Achse überlaufen, der Inhalt horizontal scrollt. Wir konvertieren dann das <ul> in einen Scroll-Snap-Container und stellen sicher, dass die Elemente immer in Position einrasten, wenn der Container mit einem scroll-snap-type Wert von mandatory gescrollt wird.

css
ul {
  display: flex;
  gap: 4vw;
  padding-left: 0;
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
}

Als nächstes stylen wir die <li>-Elemente, indem wir die flex-Eigenschaft verwenden, um sie 100 % der Breite des Containers einzunehmen. Der scroll-snap-align-Wert von start bewirkt, dass die linke Seite des am weitesten links sichtbaren Elements an den linken Rand des Containers schnellt, wenn der Inhalt gescrollt wird.

css
li {
  list-style-type: none;
  background-color: #eeeeee;
  flex: 0 0 100%;
  height: 100px;
  padding-top: 20px;
  scroll-snap-align: start;
  text-align: center;
}
Scroll-Buttons erstellen

Zuerst werden alle Scroll-Buttons mit einigen rudimentären Stilen und entsprechend unterschiedlichen Zuständen adressiert. Es ist wichtig, :focus-Stile für Tastaturnutzer einzurichten. Da Scroll-Buttons automatisch auf disabled gesetzt sind, wenn kein weiteres Scrollen in dieser Richtung möglich ist, verwenden wir die :disabled Pseudo-Klasse, um diesen Zustand anzusprechen.

css
ul::scroll-button(*) {
  border: 0;
  font-size: 2rem;
  background: none;
  color: black;
  opacity: 0.7;
  cursor: pointer;
}

ul::scroll-button(*):hover,
ul::scroll-button(*):focus {
  opacity: 1;
}

ul::scroll-button(*):active {
  translate: 1px 1px;
}

ul::scroll-button(*):disabled {
  opacity: 0.2;
  cursor: unset;
}

Hinweis: Wir setzen auch einen cursor Wert von pointer auf den Scroll-Buttons, um deutlicher zu machen, dass sie interagierbar sind (eine Verbesserung für sowohl die allgemeine UX als auch die kognitive Zugänglichkeit), und setzen ihn zurück, wenn die Scroll-Buttons :disabled sind.

Anschließend wird ein passendes Symbol auf den linken und rechten Scroll-Buttons über die content-Eigenschaft gesetzt, die auch dafür verantwortlich ist, dass die Scroll-Buttons erzeugt werden:

css
ul::scroll-button(left) {
  content: "◄";
}

ul::scroll-button(right) {
  content: "►";
}

Wir müssen keinen alternativen Text für die Symbole im content festlegen, da der Browser automatisch sorgt für passende barrierefreie Namen.

Ergebnis

Beachten Sie, wie die Scroll-Buttons unten links auf dem Karussell erstellt werden. Versuchen Sie, diese zu drücken, um zu sehen, wie sie den Inhalt verschieben.

Die Scroll-Buttons positionieren

Das vorherige Beispiel funktioniert, aber die Buttons sind nicht optimal platziert. In diesem Abschnitt fügen wir einige CSS hinzu, um sie mit Anker-Positionierung zu positionieren.

CSS

Zuerst wird ein Referenz-anchor-name auf das <ul> gesetzt, um es als benannten Anker zu definieren. Als nächstes wird bei jedem Scroll-Button die position auf absolute gesetzt und die position-anchor Eigenschaft auf den anchor-name der Liste, um die beiden zu verknüpfen.

css
ul {
  anchor-name: --my-carousel;
}

ul::scroll-button(*) {
  position: absolute;
  position-anchor: --my-carousel;
}

Um jeden Scroll-Button tatsächlich zu positionieren, setzen wir zuerst einen align-self-Wert von anchor-center auf beide, um sie vertikal im Karussell zu zentrieren:

css
ul::scroll-button(*) {
  align-self: anchor-center;
}

Wir setzen dann Werte auf ihren Einsetz-Eigenschaften, um die horizontale Positionierung zu handhaben. Wir verwenden anchor()-Funktionen, um die angegebenen Seiten der Buttons relativ zu den Seiten des Karussells zu positionieren. In jedem Fall wird die calc()-Funktion verwendet, um etwas Abstand zwischen dem Rand des Buttons und dem Rand des Karussells hinzuzufügen. Zum Beispiel wird der rechte Rand des linken Scroll-Buttons 45 Pixel rechts vom linken Rand des Karussells positioniert.

css
ul::scroll-button(left) {
  right: calc(anchor(left) - 45px);
}

ul::scroll-button(right) {
  left: calc(anchor(right) - 45px);
}

Ergebnis

Spezifikationen

Specification
CSS Overflow Module Level 5
# scroll-buttons

Browser-Kompatibilität

Siehe auch