project· livré
BA111OD · Hotspots
Section Shopify sur mesure permettant de mettre en avant des produits clés via des zones interactives cliquables sur une image éditoriale.
Contexte
Une section Shopify sur mesure pour mettre en valeur certains produits clés dans l’interface de la boutique BA111OD. L’équipe marketing peut placer des hotspots cliquables directement sur une image éditoriale de la montre, chaque hotspot ouvre un tooltip avec un titre, une description et une image optionnelle.
La démo
Voici la section telle qu’elle tourne en production BA111OD, intégrée ici avec son vrai HTML, CSS et JS. Aucune reconstitution : le code est extrait tel quel du thème Shopify.
Essaie :
- Clique un
+→ le tooltip s’ouvre, le bouton pivote vers× - Clique à nouveau, ou
Esc, ou le bouton de fermeture → ça referme - Bascule Desktop / Mobile dans la barre pour voir la réorganisation responsive : sur mobile, les tooltips passent en bottom sheet plein écran au lieu du tooltip flottant
Ce qui a été développé
Section Shopify custom intégrée dans le thème existant, avec un schema qui expose :
- L’image de fond (desktop + variante mobile en option)
- La hauteur de la section (en
vh, ajustable dans l’éditeur) - La couleur d’accent (utilisée pour les bordures, le fond des boutons et le focus ring)
- La couleur des icônes
- Des blocs hotspot : chaque hotspot a une position en
%(desktop + override mobile), un titre, une description, et une image de tooltip optionnelle
Le rendu côté front utilise des custom properties CSS
(--wd-x, --wd-y, --wd-accent) injectées dans le HTML par
Liquid. Le JavaScript est vanilla : event delegation sur la
racine, IntersectionObserver pour l’animation d’entrée
staggerée, positionnement intelligent du tooltip (prefer below,
fall back above) avec fallback pour les bords d’écran.
Sur mobile (sous 600 px), le tooltip n’est plus un petit flottant : il devient une bottom sheet plein écran avec un overlay sombre. Même composant, même API, comportement différent selon la taille, c’est géré entièrement en CSS + une poignée de branches JS.
Détails techniques
- Accessibilité.
aria-expanded/aria-hidden/aria-controlssur les paires bouton / tooltip. Fermeture viaEsc. Retour de focus sur le bouton d’origine à la fermeture.prefers-reduced-motiondésactive l’animation d’entrée et le pulse. - Animation d’entrée. Chaque hotspot apparaît 120 ms après le
précédent quand la section entre dans le viewport (stagger via
IntersectionObserver+ CSS variable--wd-enter-delay). - Positionnement du tooltip. Desktop : préfère le dessous, bascule au-dessus si pas assez d’espace, pareil horizontalement. Mobile : ignoré, le tooltip passe en bottom sheet.
- Pas de dépendance. Zéro librairie : CSS + vanilla JS, ~240 lignes de JS au total.
Stack
- Shopify : section custom dans le thème
- Liquid / HTML / CSS / vanilla JS : zéro dépendance front
- Admin API : configuration des blocs côté admin Shopify
Résultat
Une section directement activable depuis l’éditeur de thème, livrée sans impact sur les performances du site existant. L’équipe marketing peut créer une nouvelle page produit éditoriale, ajouter des hotspots, éditer leurs positions et leurs contenus, sans intervention technique.







