Navigation✨ Premium

Guided Tour Spotlight

Tooltip ancré dynamiquement sur chaque élément UI, flèche auto-flippée et spotlight CSS — guidez vos utilisateurs pas à pas sans librairie externe.

JSTourAnchor

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Navigation comprend 36 effets, dont 4 gratuits. Découvrir la catégorie →

3 exemples d'usage

Onboarding SaaS — Découverte de la navigation principale — Guided Tour Spotlight exemple 1

① Onboarding SaaS — Découverte de la navigation principale

QuandL'utilisateur se connecte pour la première fois et ne sait pas où trouver son profil, ses messages ou ses réglages.
PourquoiLe spotlight CSS isole chaque élément sans masquer le reste de la navigation : l'utilisateur voit le contexte complet de l'interface pendant la visite, ce qui ancre mieux les apprentissages que les overlays plein-écran.
Réglages3 étapes, tooltip 200 px, accent indigo (#6366f1), anneau 3 px + halo 30 px, transition 0,3 s, flèche auto-flip activée.
Dashboard analytics — Introduction aux indicateurs clés — Guided Tour Spotlight exemple 2

② Dashboard analytics — Introduction aux indicateurs clés

QuandUn nouvel administrateur découvre pour la première fois son tableau de bord avec chiffre d'affaires, visiteurs uniques et taux de conversion.
PourquoiLa visite séquentialise l'information : l'utilisateur comprend le rôle de chaque KPI avant de les croiser, ce qui réduit le sentiment d'être submergé par un tableau de bord dense.
Réglages3 étapes sur cartes métriques, tooltip 200 px, bouton final libellé « Terminer », flèche arrow-left par défaut (KPI à gauche du tooltip).
Documentation interactive — Tutoriel dans un éditeur de code — Guided Tour Spotlight exemple 3

③ Documentation interactive — Tutoriel dans un éditeur de code

QuandUn développeur intègre une librairie pour la première fois et explore le playground IDE embarqué dans la documentation : barre d'activité, onglet du fichier actif et bouton d'exécution.
PourquoiLe spotlight isole tour à tour trois zones fonctionnelles de l'IDE sans overlay — le code reste visible en permanence. Le bouton d'exécution, ancré en haut à droite de la scène, déclenche naturellement l'auto-flip horizontal de la flèche, illustrant le mécanisme dans un contexte crédible.
Réglages3 étapes sur 3 zones IDE (icône explorateur, onglet fichier actif, bouton Run en haut à droite), tooltip 200 px, accent indigo (#6366f1), anneau 3 px + halo 30 px, auto-flip activé à l'étape 3, bouton final libellé « Lancer ».

Comment ça marche

Le spotlight est intégralement CSS : la classe .tour-active applique sur l'élément ciblé un box-shadow à deux couches — un anneau indigo de 3 px (rgba(99,102,241,.25) 0 0 0 3px) et un halo diffus de 30 px (rgba(99,102,241,.15) 0 0 30px). Aucun overlay semi-transparent, aucun masque SVG : la surbrillance est un effet de bordure pur qui ne perturbe ni le z-index ni le flux du reste de la page. La transition: .3s sur .tour-element lisse le passage d'un élément à l'autre.

Le tooltip est positionné à la volée par showStep(t) via deux appels à getBoundingClientRect() — un sur l'élément actif, un sur le conteneur .tour-scene. Les coordonnées sont calculées en pixels relatifs au conteneur : r = element.right − scene.left + 14 (décalage horizontal) et l = element.top − scene.top − 10 (alignement vertical). L'assignation directe sur tooltip.style.left et tooltip.style.top repositionne le tooltip sans reflow de page.

Un mécanisme d'auto-flip détecte le débordement avant chaque render : si r + 210 > scene.width, le tooltip bascule à gauche de l'élément (r = element.left − scene.left − 214) et la flèche est ré-orientée via style.cssText — rotation 135° avec ancre à droite. Dès que l'espace est suffisant à droite, la classe arrow-left est restaurée et la flèche pointe de nouveau vers l'élément mis en avant.

L'apparition du tooltip repose sur une double transition CSS sur .tour-tooltip.visible : opacity 0→1 et translateY(6px→0) en 0,3 s. La classe visible est ajoutée à chaque appel de showStep. Le texte d'étape (.tour-text) et le libellé de progression (.tour-step, format « Étape N/3 ») sont mis à jour par affectation directe de textContent — pas de DOM supplémentaire créé à chaque étape.

Accessibilité

  • prefers-reduced-motion non géré — les transitions CSS (opacity, transform, border sur .tour-element) restent actives quel que soit le paramètre système. Correctif recommandé : @media (prefers-reduced-motion: reduce) { .tour-element, .tour-tooltip { transition: none !important; } }
  • Les boutons Suivant et Passer sont de vrais <button> HTML — navigables au clavier (Tab + Entrée/Espace) et annoncés correctement par les lecteurs d'écran sans code supplémentaire.
  • Aucun aria-live sur le tooltip : les lecteurs d'écran n'annoncent pas automatiquement les changements d'étape. Recommandation : ajouter aria-live="polite" sur .tour-text.
  • Contraste texte : blanc (#e0e7ff) sur fond dégradé #312e81 → ratio ≈ 6,3:1, conforme WCAG AA. Le libellé de progression (#818cf8) sur #312e81 → ratio ≈ 2,8:1, insuffisant pour le texte normal — à renforcer si l'accessibilité est critique.
  • Aucun role ni aria-label sur le conteneur tour. Recommandé : role="dialog" et aria-label="Visite guidée" sur .tour-scene, plus aria-modal="true" si le tour bloque l'interaction avec le reste.

Compatibilité navigateur

Repose uniquement sur getBoundingClientRect(), classList.toggle() et les transitions CSS — aucune API expérimentale ni dépendance externe.

Chrome 80+✓ Complet
Firefox 75+✓ Complet
Safari 13+✓ Complet
Edge 80+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Sans JavaScript, le tooltip reste caché (<code>opacity: 0</code>) et aucun élément ne reçoit <code>.tour-active</code> — l'UI sous-jacente reste entièrement fonctionnelle, aucune erreur console.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="tour-scene" id="tourScene">
  <div class="tour-ui">
    <div class="tour-element tour-active" id="tourEl1">Élément 1</div>
    <div class="tour-element" id="tourEl2">Élément 2</div>
    <div class="tour-element" id="tourEl3">Élément 3</div>
  </div>
  <div class="tour-tooltip" id="tourTooltip">
    <div class="tour-arrow arrow-left"></div>
    <div class="tour-step" id="tourStepLabel">Étape 1/3</div>
    <div class="tour-text" id="tourStepText">Description de l'étape.</div>
    <div class="tour-nav">
      <button class="tour-skip" id="tourSkip">Passer</button>
      <button class="tour-next" id="tourNext">Suivant</button>
    </div>
  </div>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

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

Option / propriétéDéfautEffet
elements (tableau JS) Tableau de nœuds DOM à mettre en surbrillance tour à tour. Exemple : [document.getElementById('step1'), document.getElementById('step2')]. Tout nœud dans .tour-scene est accepté — boutons, cartes, champs de formulaire, items de nav.
steps (tableau JS) Tableau d'objets { text: '…' }, un par étape. Le champ text alimente #tourStepText. Attention : le libellé de progression et la condition du bouton final sont hardcodés pour 3 étapes dans showStep — adaptez "Étape " + (t+1) + "/3" et 2 === t si votre tour en compte un nombre différent.
.tour-tooltip { width } 200px Largeur du tooltip. Augmentez à 240–260 px pour des textes d'étape plus longs ; ajustez aussi le seuil d'auto-flip dans showStep (r + 210 > o.width → remplacez 210 par votre-width + 10).
.tour-element.tour-active { border-color } #6366f1 Couleur du spotlight. Remplacez par votre couleur brand ; coordonnez aussi box-shadow, le fond du tooltip et la couleur du bouton Suivant pour un thème cohérent.
.tour-element.tour-active { box-shadow } rgba(99,102,241,.25) 0 0 0 3px, rgba(99,102,241,.15) 0 0 30px Intensité du halo. Augmentez le rayon (30px→50px) pour un spotlight plus dramatique, réduisez les opacités pour un effet discret sur une UI chargée.
.tour-tooltip { background } linear-gradient(135deg, #312e81, #1e1b4b) Fond du tooltip. Remplacez par une couleur plate ou un dégradé brand. Vérifiez le contraste de #e0e7ff (texte) sur votre nouveau fond.
.tour-nav .tour-next { background } #6366f1 Couleur du bouton Suivant/Terminer. Coordonnez-le avec border-color de l'élément actif. La couleur hover (.tour-next:hover { background: #818cf8 }) est à ajuster en parallèle.

FAQ

Oui, 100 % vanilla : getBoundingClientRect(), classList.toggle() et des transitions CSS pures. Aucune dépendance npm. Compatible Angular, React, Vue, Svelte — enveloppez la logique dans un composant ou un service, l'effet ne touche que les nœuds DOM que vous lui passez dans elements.
La version livrée utilise des variables globales (scene, tooltip, elements, steps). Pour plusieurs instances simultanées, encapsulez chaque tour dans une fonction fabrique (IIFE ou closure) qui déclare ses propres copies locales de toutes ces variables et de showStep — aucune modification du CSS n'est nécessaire, les classes sont partagées.
L'auto-flip horizontal se recalcule à chaque appel de showStep : si r + 210 > scene.width, le tooltip bascule à gauche. Sur écrans très étroits (≤360 px), réduisez width à 160–180 px dans le CSS et mettez à jour le seuil à r + 170 > o.width dans showStep. Pour les éléments en fin de ligne (à droite de la scène), le flip gauche s'active automatiquement.