Utilitaires✨ Premium

CSS Anchor Tooltip Pro

Infobulles accrochées à leur bouton par CSS Anchor Positioning : elles changent de côté au bord de la fenêtre, se ferment avec Échap et restent lisibles partout.

Anchor PositioningTooltipCSS moderne

Mis à jour le

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

3 exemples d'usage

Simulateur de prêt — les deux montants clés disent ce qu'ils comprennent — CSS Anchor Tooltip Pro exemple 1

① Simulateur de prêt — les deux montants clés disent ce qu'ils comprennent

QuandSur la page de résultats de Banque Méravon, les taux et frais sont rangés sur les côtés ; au centre, on survole ou on sélectionne au clavier « Mensualité » ou « Coût total » : une infobulle sombre dit en une phrase ce que le montant comprend.
PourquoiLes deux montants qui comptent ont leur explication à portée de main, sans alourdir la page. L'infobulle de la mensualité s'ouvre dessous, celle du coût total au-dessus, dans la bande libre entre les deux : rien n'est caché. Toute la carte sert de bouton, une cible large au doigt comme à la souris.
RéglagesMensualité en atp-bottom, coût total en atp-top ; chaque carte entière est le bouton (libellé, montant, pastille « i »). --tip-bg: #132036, --tip-fg clair, --tip-width: 230px. Les deux cartes sont sur le trajet de la souris de capture, qui les survole tour à tour.
Plan du site d'un festival — un repère par lieu, l'infobulle évite les bords — CSS Anchor Tooltip Pro exemple 2

② Plan du site d'un festival — un repère par lieu, l'infobulle évite les bords

QuandSur le plan du festival Calvessa, chaque repère (scènes, accueil, secours, point d'eau, navettes) est un bouton. Au survol ou en parcourant les repères avec Tab, une étiquette sombre donne le nom du lieu et l'information utile : « Grande scène · Ce soir 21 h 30 ».
PourquoiLes repères sont semés jusqu'aux bords de la carte : celui de la scène du lac, collé au bord droit, ouvre son infobulle à gauche, celui du haut l'ouvre dessous, sans une ligne de calcul de position. Le plan reste lisible au repos, les détails n'apparaissent qu'à la demande.
RéglagesRepères en atp-top, atp-right ou atp-left selon leur place ; --tip-bg: #1f2a1c, --tip-width: 300px, texte sur une ligne (white-space: nowrap dans la scène). Les repères sont hors du trajet de la souris de capture : la scène pose le focus clavier sur quatre d'entre eux tour à tour (focus({ focusVisible: true })).
Avatars d'un document partagé — nom et droits de chaque personne — CSS Anchor Tooltip Pro exemple 3

③ Avatars d'un document partagé — nom et droits de chaque personne

QuandEn haut d'un guide d'accueil rédigé à plusieurs dans Plumarelle, quatre pastilles rondes montrent qui a accès au document. Au survol ou au focus, chacune dit son nom et ses droits : « Tom Arnaud · Peut modifier · section 2 », « Inès Carvalho · Commente ».
PourquoiDes initiales ne suffisent pas à reconnaître quelqu'un : l'infobulle complète sans prendre de place dans l'en-tête. Placées en haut de la fenêtre, les infobulles demandées au-dessus n'ont pas la place et se retournent d'elles-mêmes dessous.
RéglagesPaires en atp-top retournées dessous par position-try-fallbacks ; avatars de 36 px avec le nom complet en texte caché dans le bouton ; --tip-bg: #1e2430, texte sur une ligne. Focus clavier posé par la scène sur chaque avatar tour à tour pour la capture.

Comment ça marche

Chaque bouton .atp-btn est suivi de son infobulle .atp-tip dans un .atp-pair qui fixe la direction voulue : atp-top, atp-bottom, atp-left ou atp-right. L'infobulle s'affiche au survol du bouton ou de l'infobulle elle-même, et au focus clavier (:focus-visible), avec un fondu de 0,18 s ; cachée, elle est en visibility: hidden.

Quand le navigateur connaît CSS Anchor Positioning, le script donne à chaque bouton un nom d'ancre unique (anchor-name) et l'attache à son infobulle (position-anchor). L'infobulle passe alors en position: fixed avec position-area : elle suit son bouton partout dans la page et, si la fenêtre manque de place de ce côté, position-try-fallbacks la retourne de l'autre (haut ↔ bas, gauche ↔ droite). À chaque ouverture, le script note le côté réel dans data-atp-side pour placer la petite flèche du bon côté.

Sans Anchor Positioning (navigateurs plus anciens) ou sans JavaScript, la même infobulle est placée en position: absolute autour de son bouton, du côté prévu, sans changement de côté. Échap ferme l'infobulle ouverte sans bouger la souris ni le focus ; elle revient quand on quitte puis retrouve le bouton.

Accessibilité

  • Reliée à son bouton : le script donne un identifiant unique à chaque infobulle et l'indique dans aria-describedby du bouton. Le lecteur d'écran lit le nom du bouton puis sa description.
  • Vraiment cachée au repos : visibility: hidden retire les infobulles fermées de la lecture ; la description reste disponible par aria-describedby.
  • Fermable et survolable (WCAG 1.4.13) : Échap la ferme ; la souris peut passer du bouton à l'infobulle pour la lire ou sélectionner son texte, sans qu'elle disparaisse.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, plus de glissement de 4 px, seulement un fondu.
  • Toucher : un appui sur le bouton affiche l'infobulle (survol simulé par le navigateur), un appui ailleurs la referme en général. Ne mettez pas d'information indispensable seulement dans une infobulle : sur mobile, elle reste discrète.

Compatibilité navigateur

CSS Anchor Positioning (anchor-name, position-area, position-try-fallbacks) : Chrome 129, Firefox 147, Safari 26 ; avant, repli automatique sur le placement simple. Largeur maximale en unités de conteneur (cqw) : Chrome 105, Firefox 110, Safari 16. Environ 2 Ko de JavaScript pour les noms d'ancre, aria-describedby, Échap et la flèche. Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : 4 directions dans 2 copies, changement de côté aux bords de la fenêtre, repli forcé sans Anchor Positioning, Échap au survol et au focus, passage de la souris sur l'infobulle, code collé deux fois, toucher, 390 px, mouvement réduit, 0 erreur.

Chrome 129+✓ Complet (mesuré)
Firefox 147+✓ Complet (mesuré dans Firefox 153)
Safari 26+✓ Complet (mesuré dans WebKit 26.5)
Edge 129+✓ Complet (moteur Chromium)
Mobile iOS 26+✓ Moteur WebKit, non vérifié sur appareil
Navigateurs plus anciens✓ Repli : infobulle du côté prévu, sans changement de côté (mesuré)

Sans Anchor Positioning ou sans JavaScript, l'infobulle reste du côté prévu même près d'un bord, où elle peut déborder. Sans JavaScript, il n'y a ni aria-describedby ni fermeture par Échap.

Le code

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

index.html — structure
<div class="fx-0787-root">
  <div class="atp-demo">
    <div class="atp-pair atp-bottom">
      <button class="atp-btn" type="button">Bas</button>
      <p class="atp-tip" role="tooltip">Sous le bouton…</p>
    </div>
    <div class="atp-pair atp-right">…</div>
    <div class="atp-pair atp-left">…</div>
    <div class="atp-pair atp-top">…</div>
  </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
Direction (HTML — classe de .atp-pair) atp-top, atp-bottom, atp-left, atp-right Côté préféré de l'infobulle ; elle passe du côté opposé si la fenêtre manque de place (avec Anchor Positioning).
Couleurs (CSS — --tip-bg, --tip-fg) #6d5efc et #fff Fond et texte de l'infobulle et de sa flèche ; réglables sur la racine ou sur une seule paire.
Écart (CSS — --tip-offset) 10px Distance entre le bouton et l'infobulle. Au-delà de 14 px, le passage de la souris vers l'infobulle devient moins sûr.
Largeur maximale (CSS — --tip-width) min(220px, 44cqw) Au-delà, le texte passe à la ligne. Ajoutez white-space: nowrap pour des étiquettes courtes sur une ligne.
Démo en croix (HTML/CSS — .atp-demo) 4 boutons autour d'un centre vide Retirez ce conteneur dans votre page : les paires fonctionnent n'importe où dans la racine.

FAQ

La même infobulle, placée autour de son bouton du côté prévu, avec Échap et aria-describedby. Seul le changement de côté près d'un bord manque : près du bord de la fenêtre, l'infobulle peut alors déborder.
Oui avec Anchor Positioning : elle est en position: fixed et se place par rapport à la fenêtre, donc un parent qui coupe son contenu ne la rogne pas (sauf s'il porte un transform ou un filter). En mode de repli, elle est en position: absolute et peut être coupée.
Non. Une infobulle (role="tooltip") ne contient que du texte, et on ne peut pas y amener le focus. Pour des liens ou des boutons, utilisez une fenêtre contextuelle ouverte au clic.