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-marker CSS pseudo-element

Eingeschränkt verfügbar

Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.

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

Das ::scroll-marker CSS Pseudoelement kann in jedem Element erzeugt werden und repräsentiert dessen Scroll-Marker. Alle Elemente können ein ::scroll-marker-Pseudoelement haben, das in die ::scroll-marker-group des nächstliegenden Scroll-Containers-Vorfahrs gesetzt wird. Ein Scroll-Marker verhält sich wie ein Anker (<a> Element), dessen Scroll-Ziel das Ursprungselement des Markers ist — und scrollt den Scroll-Container zu diesem Element, wenn es aktiviert wird.

Syntax

css
::scroll-marker {
  /* ... */
}

Beschreibung

Ein ::scroll-marker wird auf einem Element erzeugt, wenn die content-Eigenschaft des ::scroll-marker-Pseudoelements auf einen Wert ungleich none gesetzt wird und es in einem Scroll-Container-Vorfahren mit einem nicht-none scroll-marker-group-Eigenschaftswert vorhanden ist (was bedeutet, dass es ein ::scroll-marker-group-Pseudoelement erzeugen wird).

Das ::scroll-marker-group-Pseudoelement des Scroll-Containers enthält automatisch alle ::scroll-marker-Pseudoelemente, die am Scroll-Container oder dessen Nachkommen erzeugt werden. Dies ermöglicht es, sie als Gruppe zu positionieren und zu layouten und wird typischerweise bei der Erstellung eines CSS-Karussells verwendet, um einen Scroll-Positionsindikator zu erstellen. Die einzelnen Scroll-Marker können verwendet werden, um zu ihren zugehörigen Inhaltselementen zu navigieren.

Hinweis: Alternativ kann ein Scroll-Marker-Gruppencontainer aus einem vorhandenen Elementcontainer unter Verwendung von scroll-target-group erstellt werden; alle enthaltenen <a>-Elemente mit Fragment-IDs, die auf Abschnitte der Seite verlinken, verhalten sich automatisch wie Scroll-Marker.

Wenn ein Scroll-Marker-Gruppencontainer auf einem Scroll-Container mit der scroll-marker-group-Eigenschaft erstellt wird, wird der Scroll-Container mit tablist/tab-Semantik dargestellt. Sie können mit der Tastatur mit Tab dorthin gelangen und dann zwischen den verschiedenen "Seiten" mit den Pfeiltasten links und rechts (oder oben und unten) wechseln, wodurch auch der Zustand der zugehörigen Scroll-Marker und -Schaltflächen wie erwartet geändert wird. Die Scroll-Marker können, wie erwartet, auch normal weitergetabt werden.

Beispiele

Sehen Sie sich Creating CSS carousels für weitere Beispiele an, die das ::scroll-marker-Pseudoelement verwenden.

Erstellung von Karussell-Scroll-Markern

In diesem Beispiel zeigen wir, wie man Scroll-Marker 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

Wir wandeln unser <ul> in einen Überlaufcontainer mit Scroll-Snap, indem wir das display auf flex setzen und eine einzelne, nicht-umbruchende Zeile von <li>-Elementen erzeugen. Die overflow-x-Eigenschaft wird auf auto gesetzt, was bedeutet, dass, wenn die Elemente ihren Container auf der x-Achse überlaufen, der Inhalt horizontal scrollt. Dann wandeln wir das <ul> in einen Scroll-Snap-Container um, wodurch sichergestellt wird, dass die Elemente immer an Ort und Stelle einrasten, wenn der Container mit einem scroll-snap-type-Wert von mandatory gescrollt wird.

Wir erstellen einen Scroll-Marker-Gruppencontainer mit der scroll-marker-group-Eigenschaft, indem wir ihn hinter den gesamten Inhalt platzieren.

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

Als nächstes stylen wir die <li>-Elemente und verwenden die flex-Eigenschaft, um sie 33% der Breite des Containers einzunehmen. 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 33%;
  height: 100px;
  padding-top: 20px;
  scroll-snap-align: start;
  text-align: center;
}

Dann verwenden wir das ::scroll-marker-Pseudoelement, um für jedes Listenelement einen quadratischen Marker mit einem roten Rand zu erstellen:

css
li::scroll-marker {
  content: "";
  border: 1px solid red;
  height: 1em;
  width: 1em;
}

Wir wenden auch Stile auf das ::scroll-marker-group-Pseudoelement an, um die Scroll-Marker in der Mitte der Zeile mit einem Zwischenraum von 0.4em zwischen jedem Marker zu positionieren:

css
::scroll-marker-group {
  display: flex;
  gap: 0.4em;
  place-content: center;
}

Schließlich stylen wir den Marker des aktuell gescrollten Elements anders als die anderen, indem wir den Marker mit der :target-current-Pseudo-Klasse ansprechen.

css
::scroll-marker:target-current {
  background: red;
}

Ergebnis

Benutzerdefinierte Scroll-Marker-Nummerierung und -Stil

Dieses Beispiel ist dasselbe wie das vorherige, außer dass wir einige unterschiedliche Stile auf die Scroll-Marker angewendet haben und CSS-Zähler verwendet haben, um die auf jedem Marker angezeigte Zahl zu erhöhen. Die CSS-Unterschiede werden im nächsten Abschnitt erklärt.

CSS

In diesem Beispiel setzen wir einen Namen für einen Zähler, den wir auf jedem <li> erhöhen wollen — markers — unter Verwendung der counter-increment-Eigenschaft:

css
li {
  counter-increment: markers;
}

Wir setzen dann die content-Eigenschaft des ::scroll-marker-Pseudoelements auf die counter()-Funktion und übergeben dabei den markers-Zählernamen als Argument. Dies hat den Effekt, dass in jeden Marker eine Zahl eingefügt wird, die automatisch erhöht wird. Der Rest der Gestaltung ist rudimentär, aber es zeigt, wie die Marker vollständig gestylt werden können.

css
li::scroll-marker {
  content: counter(markers);
  font-family: sans-serif;
  width: fit-content;
  height: 1em;
  padding: 5px;
  color: black;
  text-decoration: none;
  border: 2px solid rgb(0 0 0 / 0.15);
  border-radius: 0.5em;
  background-color: #eeeeee;
}

Für eine weitere interessante Anpassung fügen wir zwei Regeln hinzu, um den Marker für das erste und das letzte Listenelement auszuwählen, indem wir jeweils :first-child und :last-child in die Selektor-Kette einfügen. Wir geben dem ersten Marker den Textinhalt "First" und dem letzten Marker den Textinhalt "Last".

css
li:first-child::scroll-marker {
  content: "First";
}

li:last-child::scroll-marker {
  content: "Last";
}

Um die Benutzererfahrung zu verbessern, setzen wir eine andere Farbe auf die Marker bei :hover und verwenden die :target-current-Pseudo-Klasse, um eine andere color und background-color auf dem aktuell gescrollten Element-Marker festzulegen, damit Benutzer wissen, welches Element gerade angezeigt wird:

css
::scroll-marker:hover {
  background-color: #ddcccc;
}

::scroll-marker:target-current {
  background-color: purple;
  color: white;
}

Ergebnis

Spezifikationen

Spezifikation
CSS Overflow Module Level 5
# scroll-marker-pseudo

Browser-Kompatibilität

Siehe auch