Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

::scroll-marker-group

Limited availability

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

Expérimental: Cette fonction est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.

Le pseudo-élément CSS ::scroll-marker-group est généré à l'intérieur d'un conteneur de défilement et contient tout pseudo-élément ::scroll-marker généré sur les descendants de ce conteneur.

Syntaxe

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

Description

Le pseudo-élément ::scroll-marker-group d'un conteneur de défilement représente un groupe de marqueurs de défilement. Il s'agit d'un conteneur qui inclut automatiquement tout pseudo-élément ::scroll-marker généré sur lui-même ou ses descendants. Cela permet de les positionner et de les disposer comme un groupe et s'utilise généralement lors de la création d'un carrousel CSS pour fournir un indicateur de position de défilement. Les marqueurs individuels peuvent être utilisés pour naviguer vers leurs éléments de contenu associés.

Le conteneur de défilement doit avoir une valeur scroll-marker-group différente de none afin que le pseudo-élément ::scroll-marker-group soit généré. La valeur de scroll-marker-group détermine l'endroit où le groupe de marqueurs apparaît dans l'ordre d'onglet et l'ordre de disposition des boîtes du carrousel (mais pas dans la structure du DOM) : before le place au début, tandis que after le place à la fin.

Il est recommandé d'aligner la position de rendu visuelle du groupe de marqueurs avec l'ordre d'onglet. Lorsque vous positionnez le groupe au début du contenu, placez-le au début de l'ordre d'onglet avec before. Lorsque vous positionnez le groupe à la fin du contenu, placez-le à la fin de l'ordre d'onglet avec after.

En termes d'accessibilité, le groupe de marqueurs de défilement et les marqueurs qu'il contient sont rendus avec les sémantiques tablist/tab. Lorsque vous utilisez Tab pour atteindre le groupe, il se comporte comme un seul élément (c'est-à-dire qu'une autre pression sur la touche Tab passera au prochain élément), et vous pouvez vous déplacer entre les différents marqueurs avec les flèches gauche et droite (ou haut et bas).

Exemples

Voir Créer des carrousels en CSS pour d'autres exemples qui utilisent le pseudo-élément ::scroll-marker.

Créer des marqueurs de défilement pour un carrousel

Cette démonstration est un carrousel de pages uniques, chaque élément occupant toute la page. Nous avons inclus des marqueurs de défilement afin de permettre à l'utilisateur·ice de naviguer vers n'importe quelle page en cliquant sur un marqueur.

HTML

Le HTML se compose d'une liste non ordonnée, chaque élément de liste contenant un contenu d'exemple :

html

CSS

Nous convertissons d'abord notre <ul> en carrousel en définissant display sur flex, créant une seule ligne non enroulée d'éléments <li>. La propriété overflow-x est définie sur auto, ce qui signifie que si les éléments débordent de leur conteneur sur l'axe x, le contenu défile horizontalement. Nous convertissons ensuite le <ul> en conteneur d'ancrage au défilement, garantissant que les éléments s'alignent toujours lorsque le conteneur est défilé avec une valeur scroll-snap-type de mandatory.

css

Ensuite, nous mettons en évidence les éléments <li>, en utilisant la propriété flex pour les rendre à 100% de la largeur du conteneur. La valeur scroll-snap-align start fait s'accrocher le côté gauche de l'élément visible le plus à gauche au bord gauche du conteneur lorsque le contenu est défilé.

css

Ensuite, la propriété scroll-marker-group de la liste est définie sur after, de sorte que le pseudo-élément ::scroll-marker-group est placé après le contenu DOM de la liste dans l'ordre de tabulation et l'ordre de disposition des boîtes ; cela signifie qu'il vient après les boutons de défilement.

css

Ensuite, le pseudo-élément ::scroll-marker-group de la liste est disposé avec Flexbox, avec une valeur de justify-content à center et un gap de 20px afin que ses enfants (les pseudo-éléments ::scroll-marker) soient centrés à l'intérieur du ::scroll-marker-group avec un espacement entre chacun.

css

Ensuite, les marqueurs de défilement eux-mêmes sont mis en évidence. Leur apparence est gérée par width, height, background-color, border et border-radius. Il faut aussi définir une valeur de content différente de none afin qu'ils soient effectivement générés.

css

Note : Le contenu généré est en ligne (inline en anglais) par défaut ; nous pouvons appliquer width et height à nos marqueurs car ils sont disposés en éléments flexibles.

Enfin, la pseudo-classe :target-current est utilisée pour sélectionner le marqueur de défilement correspondant à la « page » visible, afin de mettre en évidence la progression de défilement. Ici, nous définissons background-color sur black pour obtenir un disque plein.

css

Résultat

Positionner le groupe de marqueurs avec le positionnement par ancrage

Cet exemple étend le précédent en montrant l'utilisation du positionnement par ancrage en CSS pour positionner le groupe de marqueurs par rapport au carrousel.

CSS

Le pseudo-élément ::scroll-marker-group de la liste est positionné par rapport au carrousel en utilisant le positionnement par ancrage, en donnant au groupe une valeur position-anchor qui correspond au anchor-name de l'élément <ul>. Nous positionnons ensuite ce groupe par rapport au conteneur de défilement dans la direction de bloc en définissant une valeur de top qui inclut une fonction anchor(). Nous ajoutons aussi une valeur justify-self anchor-center, qui aligne le groupe au centre du conteneur de défilement dans la direction en ligne.

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

ul::scroll-marker-group {
  /* Depuis l'exemple précédent */
  display: flex;
  gap: 20px;

  position: absolute;
  position-anchor: --mon-carousel;
  top: calc(anchor(bottom) - 70px);
  justify-self: anchor-center;
}

Résultat

Spécifications

Specification
CSS Overflow Module Level 5
# scroll-marker-group-pseudo

Compatibilité des navigateurs

Voir aussi