Galerie✨ Premium

Dots Navigation

Carrousel sans flèches : une rangée de pastilles posée au bas de l'image, une par diapositive ; un clic sur une pastille fait glisser la piste droit jusqu'à elle.

CSSDotsClick

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Galerie comprend 44 effets, dont 6 gratuits. Découvrir la catégorie →

3 exemples d'usage

Les photos d'un itinéraire de randonnée — fiche d'un topo en ligne — Dots Navigation exemple 1

① Les photos d'un itinéraire de randonnée — fiche d'un topo en ligne

QuandSur la fiche de la boucle, le randonneur clique sur la troisième pastille pour voir la cabane de berger avant de lancer le téléchargement de la trace ; la ligne « Photo 3 sur 5 · pause à la cabane » se met à jour.
PourquoiLes cinq photos suivent le parcours, et les pastilles donnent d'un coup d'œil leur nombre et la position de chacune : on saute directement à l'étape qui intéresse, sans faire défiler les autres.
RéglagesCadre de 282 px calé sur la colonne : --dtnv-width:100%, --dtnv-height:100%, --dtnv-radius:14px, zone de démonstration effacée (--dtnv-stage-bg:transparent, padding et hauteur minimale à 0). Photos en <img>, légende en pastille en haut à gauche. Capture : le script de la scène clique la pastille suivante toutes les 1,4 s.
Les gestes d'un lecteur de musique — écrans d'aide balayés au doigt — Dots Navigation exemple 2

② Les gestes d'un lecteur de musique — écrans d'aide balayés au doigt

QuandAu premier lancement, l'aide occupe tout l'écran du téléphone ; l'utilisateur glisse vers la gauche pour passer du double toucher au geste suivant, et les pastilles au-dessus du bouton « Compris » montrent qu'il en reste deux.
PourquoiSur mobile, le doigt suffit pour avancer et les pastilles servent de repère plutôt que de commande principale. Pas de flèches à viser dans un écran étroit, et quatre ronds suffisent à dire la longueur de l'aide.
RéglagesPlein écran du téléphone : --dtnv-height:100%, --dtnv-radius:0, fond blanc et pastilles violettes --dtnv-dot-color:#6d5bd0. Dans la capture, la scène envoie au vrai code un pointerdown puis un pointerup 120 px plus à gauche (rond violet = le geste).
Les relevés d'une ruche connectée — tuile d'une appli d'apiculture — Dots Navigation exemple 3

③ Les relevés d'une ruche connectée — tuile d'une appli d'apiculture

QuandDans la liste du rucher, la tuile de la ruche 2 montre le poids sur sept jours ; un clic sur la deuxième pastille affiche la température du couvain, la troisième l'humidité.
PourquoiTrois mesures d'un même capteur tiennent dans une tuile de 236 px sans onglets ni menu : les pastilles disent qu'il y a trois vues et laissent la place au graphique.
Réglages--dtnv-height:190px, --dtnv-ratio:auto, --dtnv-radius:10px, fond crème et pastilles ambre --dtnv-dot-color:#b7791f. Chaque diapositive contient un libellé, une valeur et un graphique SVG en <img>. Capture : clic sur la pastille suivante toutes les 1,3 s.

Comment ça marche

La navigation passe par des pastilles et non par des flèches : c'est ce qui distingue cet effet du Vertical Slider de la même catégorie, qui garde des flèches et monte ou descend. Le script compte les .dtnv-slide et crée dans .dtnv-dots un bouton par diapositive. Cliquer sur la quatrième pastille amène directement la quatrième image, sans passer une à une par les précédentes : la piste horizontale .dtnv-track reçoit translateX(-300%) et glisse en 0,5 s.

La pastille de l'image visible se remplit et grossit légèrement (is-active, scale(1.2)) ; les autres restent des anneaux blancs de 10 px. Chaque pastille est un bouton de 24 × 24 px, assez grand pour le pouce, même si l'anneau dessiné est petit.

Deux gestes complètent les pastilles : les touches ← et → (le focus suit alors la pastille active) et le glisser horizontal de plus de 50 px au doigt ou à la souris, géré par les Pointer Events. Ces deux-là avancent d'un cran et repartent de la première après la dernière. Aucune animation ne démarre sans action de la personne.

Ajouter ou retirer une image ne demande aucune retouche des pastilles : elles sont recréées d'après le nombre de diapositives au chargement. Une photo s'ajoute en <img> dans la diapositive (couverture totale en object-fit: cover). Chaque .dtnv-carousel a sa propre instance, rien n'est exposé sur window.

Accessibilité

  • Pastilles atteignables : de vrais <button type="button"> placés dans l'ordre du Tab, nommés « Diapositive 1 », « Diapositive 2 »… ; celle de l'image visible porte aria-current="true".
  • Carrousel décrit : role="region" + aria-roledescription="carrousel" sur le cadre, et pour chaque image un groupe « diapositive » nommé « 2 sur 5 ».
  • Rien de caché n'est atteint : inert et aria-hidden sur les images hors du cadre.
  • Changement annoncé : zone aria-live="polite" invisible (« diapositive 4 sur 5 »), silencieuse au chargement.
  • Mouvement réduit : sans glissement sous prefers-reduced-motion: reduce ; la pastille cliquée affiche quand même la bonne image.

Compatibilité navigateur

Un peu plus de 4 Ko de JavaScript autonome. Relevé le 08/11/2026 avec Playwright (Chromium, Firefox, WebKit) : pastilles atteintes au Tab et activées à Entrée, flèche → depuis une pastille, deux carrousels indépendants, script exécuté deux fois sans doublon de pastilles, glisser au doigt à 390 px (Chromium) et à la souris, mouvement réduit, aucune erreur. Versions minimales d'après @mdn/browser-compat-data 8.1.8 ; la plus exigeante est inert.

Chrome 102+✓ Complet (mesuré)
Firefox 112+✓ Complet (mesuré)
Safari 15.5+✓ Complet (mesuré dans WebKit)
Edge 102+✓ Complet (moteur Chromium)
iOS Safari 15.5+✓ Non vérifié sur appareil réel
Android Chrome 102+✓ Complet (moteur Chromium)

Avant inert, le carrousel marche mais un lien dans une image masquée reste joignable au clavier. Sans aspect-ratio (Safari 14), donnez --dtnv-height. Sans JavaScript, aucune pastille n'est créée et seule la première image se voit. Dans Safari sur Mac, le Tab ne s'arrête sur les boutons que si l'option « Tab sélectionne chaque élément » est active (réglage du système, pas de l'effet).

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0164-root">
  <div class="dtnv-carousel" role="region" aria-roledescription="carrousel" aria-label="Diaporama" data-slide="diapositive" data-of="sur">
    <div class="dtnv-track">
      <div class="dtnv-slide"><span class="dtnv-caption">Slide 1</span></div>
      <div class="dtnv-slide"><span class="dtnv-caption">Slide 2</span></div>
      <!-- … autant de div.dtnv-slide que d'images -->
    </div>
    <div class="dtnv-dots"></div>  <!-- les boutons-pastilles y sont créés par le script -->
  </div>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Couleur des pastilles (CSS — --dtnv-dot-color sur .fx-0164-root) #fff Anneau, remplissage de la pastille active et contour de focus. Sur fond clair, une couleur foncée.
Largeur maximale et format (CSS — --dtnv-width, --dtnv-ratio) 640px · 16 / 10 Le cadre suit la largeur disponible jusqu'à cette limite ; la hauteur découle du format.
Hauteur fixe (CSS — --dtnv-height) auto Pour une tuile ou un écran : 190px, 100%…
Vitesse du glissement (CSS — --dtnv-duration) 0.5s Courbe cubic-bezier(.25,.46,.45,.94) conservée ; le saut de la 1re à la 5e image prend le même temps qu'un pas.
Arrondi (CSS — --dtnv-radius) 1rem 0 pour un plein écran.
Fond de démonstration (CSS — --dtnv-stage-bg, --dtnv-stage-padding, --dtnv-stage-min-height) #0a0a0f · 25px 16px · 300px À neutraliser dans votre page (transparent, 0, 0).
Libellés (HTML — data-slide, data-of, aria-label) diapositive · sur · Diaporama data-slide nomme aussi les pastilles (« Diapositive 3 ») : mettez slide et of pour l'anglais.

FAQ

Ici, la piste est horizontale et on choisit une image précise avec sa pastille, sans flèches. Le Vertical Slider garde des flèches en haut et en bas, avance d'une image à la fois et fait monter la piste ; son glisser est vertical.
Le script crée des boutons vides de classe .dtnv-dot et dessine l'anneau avec ::before. Pour des numéros, ajoutez dot.textContent = i + 1; à la création du bouton dans le script et retirez la règle .dtnv-dot::before ; le nom accessible « Diapositive N » posé par aria-label reste en place.
Dix boutons de 24 px font 240 px de large : ils tiennent dans un cadre de 280 px et plus. Au-delà de douze ou quinze images, une rangée de pastilles devient difficile à lire ; préférez une galerie avec miniatures.