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 in einem Scroll-Container. Sie werden auf Scroll-Containern generiert, wenn ihr content-Wert nicht none ist. Die Scrollrichtung wird durch den Parameterwert bestimmt.

Syntax

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

Parameter

<scroll-button-direction>

Ein Wert, der angibt, welche Scrollrichtung Sie auswählen möchten. Die folgenden Werte sind verfügbar:

*

Wählt alle Scroll-Buttons des Ursprungselements aus und ermöglicht so das Anwenden von Stilen auf jeden von ihnen in einer einzigen Regel.

down

Wählt den Button aus, der den Inhalt nach unten scrollt.

left

Wählt den Button aus, der den Inhalt nach links scrollt.

Wählt den Button aus, der den Inhalt nach rechts scrollt.

up

Wählt den Button aus, der den Inhalt nach oben scrollt.

block-end

Wählt den Button aus, der den Inhalt in Block-End-Richtung scrollt.

block-start

Wählt den Button aus, der den Inhalt in Block-Start-Richtung scrollt.

inline-end

Wählt den Button aus, der den Inhalt in Inline-End-Richtung scrollt.

inline-start

Wählt den Button aus, der den Inhalt in Inline-Start-Richtung scrollt.

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

Beschreibung

Die ::scroll-button() Pseudo-Elemente werden innerhalb eines Scroll-Containers nur dann generiert, wenn ihre content Eigenschaften auf einen anderen Wert als none gesetzt sind. Sie werden als Geschwister der untergeordneten DOM-Elemente des Scroll-Containers generiert, unmittelbar vor ihnen und vor jedem ::scroll-marker-group, das auf dem Container generiert wurde.

Sie können bis zu vier Scroll-Buttons pro Scroll-Container generieren, die den Inhalt in Richtung des Starts und Endes der Block- und Inline-Achsen scrollen. Das Argument des Selektors gibt an, welche Scrollrichtung ausgewählt ist. Sie können auch einen Wert von * angeben, um alle ::scroll-button() Pseudo-Elemente anzusprechen und alle Buttons in einer einzigen Regel zu gestalten.

Die generierten Buttons verhalten sich wie normale <button>-Elemente, einschließlich der gemeinsamen Standardstile des Browsers. Sie sind fokussierbar, zugänglich und können wie normale Buttons aktiviert werden. Wenn ein Scroll-Button gedrückt wird, wird der Inhalt des Scroll-Containers in die angegebene Richtung um eine "Seite" gescrollt, ungefähr der Dimension des Scroll-Containers, ähnlich wie das Drücken der Tasten Bild auf und Bild ab.

Es wird empfohlen, CSS Scroll-Snapping auf dem Scroll-Container einzurichten und jedes einzelne Element des Inhalts, das Sie scrollen möchten, als Snap-Ziel festzulegen. In diesem Fall bewirkt das Aktivieren eines Scroll-Buttons, dass der Inhalt zum Snap-Ziel gescrollt wird, das eine "Seite" entfernt ist. Auch wenn die Scroll-Buttons ohne Scroll-Snapping funktionieren, könnte das Ergebnis nicht wie gewünscht sein.

Wenn es nicht möglich ist, in eine bestimmte Scrollrichtung eines Scroll-Buttons weiter zu scrollen, wird der Button automatisch deaktiviert, andernfalls ist er aktiviert. Sie können die Scroll-Buttons in ihren aktivierten und deaktivierten Zuständen mit den Pseudo-Klassen :enabled und :disabled gestalten.

Beispiele

Siehe Erstellen von CSS-Karussells für weitere Karussell-Beispiele.

Erstellen von Scroll-Buttons

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

HTML

Wir haben eine einfache 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

Styling des Karussells

Wir wandeln unser <ul> in ein Karussell um, indem wir das display auf flex setzen, um eine einzige, nicht umbrochene Reihe von <li>-Elementen zu erstellen. Die overflow-x Eigenschaft wird auf auto gesetzt, was bedeutet, dass der Inhalt horizontal scrollt, wenn die Elemente ihren Container auf der x-Achse überlaufen. Wir wandeln das <ul> dann in einen Scroll-Snap-Container um, wodurch sichergestellt wird, dass die Elemente immer 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 gestalten wir die <li>-Elemente, indem wir die flex Eigenschaft verwenden, um sie auf 100% der Breite des Containers einzustellen. Der scroll-snap-align Wert von start bewirkt, dass die linke Seite des am weitesten links sichtbaren Elements an der linken Kante des Containers einrastet, 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;
}
Erstellen der Scroll-Buttons

Zuerst werden alle Scroll-Buttons mit einigen grundlegenden Stilen sowie Styling basierend auf verschiedenen Zuständen angesprochen. Es ist wichtig, :focus Stile für Tastaturnutzer zu setzen. Da Scroll-Buttons automatisch auf disabled gesetzt werden, wenn in dieser Richtung keine weitere Scrollen möglich ist, verwenden wir die :disabled Pseudo-Klasse, um diesen Zustand zu erfassen.

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 es deutlicher zu machen, dass sie interaktiv sind (eine Verbesserung sowohl für die allgemeine UX als auch für die kognitive Barrierefreiheit), und setzen ihn zurück, wenn die Scroll-Buttons :disabled sind.

Als nächstes wird ein geeignetes Symbol auf den linken und rechten Scroll-Buttons über die content-Eigenschaft gesetzt, die auch die Scroll-Buttons generiert:

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

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

Wir müssen keinen alternativen Text für die Symbole auf dem content setzen, da der Browser automatisch geeignete zugängliche Namen bereitstellt.

Ergebnis

Beachten Sie, wie die Scroll-Buttons unten links im Karussell erstellt werden. Versuchen Sie, sie zu drücken, um zu sehen, wie sie den Inhalt scrollen lassen.

Positionierung der Scroll-Buttons

Das vorherige Beispiel funktioniert, aber die Buttons sind nicht ideal platziert. In diesem Abschnitt fügen wir etwas CSS hinzu, um sie mit Ankerpositionierung zu positionieren.

CSS

Zunächst wird ein Referenz-anchor-name auf das <ul> gesetzt, um es als benannten Anker zu definieren. Als nächstes erhält jeder Scroll-Button seine position auf absolute und seine position-anchor-Eigenschaft wird auf den anchor-name der Liste gesetzt, um die beiden miteinander zu assoziieren.

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;
}

Dann setzen wir Werte auf ihre Insets-Eigenschaften, um die horizontale Positionierung zu bearbeiten. 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 Buttonrand und dem Karussellrand 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