MeDo

Générateur d'Infobulles IA.

Décrivez l'indication dont vous avez besoin et MeDo génère tout le comportement — délais d'ouverture et de fermeture, retournement pour éviter les bords du viewport, une flèche qui reste pointée vers le déclencheur, déclenchement au focus clavier et le câblage aria-describedby.

Infobulle
Infobulle

L'infobulle est le seul composant qu'un tiers de vos utilisateurs ne verra jamais

Le survol n'existe pas sur un écran tactile. Aucun geste sur téléphone ne signifie de façon fiable « montre-moi la description sans activer ce contrôle », ce qui veut dire que chaque infobulle est invisible pour une grande partie de votre trafic. Ce seul fait tranche la plupart des débats de conception sur les infobulles avant même qu'ils commencent : une infobulle ne peut porter que de l'information dont l'utilisateur n'a pas besoin. Les contraintes d'un champ, les messages d'erreur, les réserves tarifaires et le sens d'un bouton à icône seule doivent tous vivre à un endroit visible ou dans un nom accessible. Traitez l'infobulle comme un raffinement posé sur une interface qui fonctionne déjà sans elle, et les questions d'accessibilité se règlent presque d'elles-mêmes.

6 modèles

Modèles de Infobulle que vous pouvez générer

Chaque modèle est un vrai prompt, pas une capture d'écran. Copiez-le dans n'importe quel éditeur IA, ou exécutez-le dans MeDo pour récupérer du code React + Tailwind.

BasicLabel Hint

Dark Panel Hint on Hover and Focus

The default tooltip: one line of plain text, dark panel, arrow, delays in both directions. Reach for it when a control is already named and you only want to add a detail a mouse user might appreciate.

Create a tooltip component that wraps a single trigger child and renders a short plain-text hint on pointer enter and on focus-visible. Use a dark slate panel with 13px white text, 6px vertical and 10px horizontal padding, a 6px radius, a 240px max width and an 8px offset from the trigger, plus a 6px arrow aimed at the trigger. Open after a 300ms delay and close after 100ms so the pointer can cross the gap without the panel vanishing. Dismiss on Escape, on blur and on scroll. Give the panel role="tooltip" and link it to the trigger with aria-describedby only while it is open, rather than leaving hidden markup in the tree. Fade and translate 4px on entry, and drop the transition entirely under prefers-reduced-motion.

Tester dans MeDo
Icon-onlyIcon Button

Tooltip as the Only Label a Control Has

When the icon is the whole button, the tooltip text is the accessible name — not a description. Getting that distinction wrong is why so many toolbars announce the same word twice.

Create a tooltip for an icon-only button where the tooltip text is the only name the control has. Put that string in aria-label on the button and do not also set aria-describedby, so the same words are not announced twice. The visible panel exists for sighted pointer users: dark surface, 12px text, a single line that does not wrap under 200px. Open on hover after a 400ms delay but open immediately on focus-visible, since a keyboard user has already committed to the control. Close on Escape, on blur and on pointer leave. Keep the button hit area at least 44px even when the glyph is 20px, and skip rendering the panel entirely when a coarse pointer is detected.

Tester dans MeDo
CollisionAuto Flip

Edge-Aware Placement With a Tracking Arrow

Handles the case a fixed side always breaks: a trigger near the top of a scroll container or the right edge of the viewport. The arrow has to re-anchor after the flip or it points at nothing.

Create a tooltip with collision-aware placement: a preferred side prop of top, bottom, left or right, an explicit fallback order, and shifting along the cross axis when the panel would overflow the viewport or the nearest scrolling ancestor. Add a 6px arrow that re-anchors to the trigger centre after any flip or shift, clamped so it never slides past the panel corner radius. Recompute position on scroll and resize behind a requestAnimationFrame throttle, and close rather than reposition once the trigger leaves the visible area. Keep the aria-describedby relationship stable across repositioning so the description is not re-announced. Use role="tooltip" and plain text content with no interactive children.

Tester dans MeDo
ToolbarGroup Skip

Shared Delay Across a Button Row

One provider, one timer. Once the first tooltip in a toolbar has opened, moving along the row should switch content instantly instead of making the user wait 300ms per button.

Create a tooltip provider that shares open state across a group of triggers in a toolbar. The first tooltip in the group waits the full 300ms open delay; while any tooltip in the group is open, moving to a sibling trigger swaps the content with no delay and no exit animation, so the panel appears to slide along the row. Leaving the group entirely closes after a 150ms grace period. Reuse a single positioned panel element rather than mounting one per trigger, and update its aria-describedby target as the active trigger changes. Escape closes the group and returns focus behaviour to normal. Under prefers-reduced-motion, replace the slide with an instant content swap.

Tester dans MeDo
Multi-lineRich Hint

Two-Line Tooltip With a Keyboard Shortcut

A label line plus a monospace shortcut hint on the right. Still passive, still text-only — the moment you want a link in here, you want a popover instead.

Create a tooltip that renders a label line plus a secondary line, with an optional keyboard shortcut rendered as a small monospace chip aligned to the right of the label. Cap the panel at 260px, allow the description to wrap to two lines, and keep line-height at 1.4 so the two lines read as one block. Content stays non-interactive: no links, no buttons, no selectable code — if the user needs to click inside, use a popover. Announce the whole panel as one description via aria-describedby so the shortcut is read as part of the sentence rather than as a separate node. Open after 300ms, close after 100ms, dismiss on Escape and blur.

Tester dans MeDo
OverflowTruncation

Tooltip Only When the Text Is Clipped

Table cells and file names truncate with an ellipsis; a tooltip that repeats already-visible text is noise. Measure the element and only attach the tooltip when scrollWidth exceeds clientWidth.

Create a conditional tooltip for truncated text: compare scrollWidth against clientWidth on the target element and only register hover and focus handlers when the text is actually clipped, so a fully visible cell never shows a tooltip repeating itself. Re-measure on resize and whenever the text content changes, using a ResizeObserver rather than a window listener. When active, show the full string in a dark panel capped at 320px with wrapping enabled, positioned below the cell to avoid covering the row header. Make the truncated element focusable with tabindex="0" only while the tooltip is registered, so keyboard users can reach it without collecting empty tab stops across the whole table.

Tester dans MeDo

Comment personnaliser votre Infobulle

Réglez séparément les délais d'ouverture et de fermeture

Un délai unique partagé est faux dans les deux sens. Environ 300ms avant l'ouverture évite que les infobulles clignotent lorsque le pointeur traverse une barre d'outils, tandis qu'un court délai de fermeture de 100ms laisse le pointeur voyager du déclencheur vers l'infobulle sans que le panneau disparaisse en cours de route.

Demandez la détection de collision, pas un côté fixe

Une infobulle épinglée en haut sera coupée par le haut du viewport ou par le bord d'un conteneur défilant. Indiquez un côté préféré plus des solutions de repli pour que le composant se retourne et se décale tout seul, et précisez que la flèche doit rester pointée vers le déclencheur après le déplacement.

Exigez le focus comme déclencheur, pas seulement le survol

Si l'infobulle ne répond qu'à la souris, les utilisateurs au clavier n'ont rien. Demandez une ouverture sur focus-visible et une fermeture sur Escape et blur, ce qui la rend aussi utilisable pour toute personne naviguant avec un dispositif de commutation ou un lecteur d'écran.

Gardez le contenu passif et purement textuel

Dès qu'une infobulle contient un lien, un bouton ou du texte copiable, il faut un moyen de l'atteindre et de la maintenir ouverte, et ce n'est plus une infobulle. Précisez que le contenu est du texte brut non interactif, et tournez-vous vers un popover quand vous avez besoin de quelque chose de cliquable à l'intérieur.

Qui utilise le composant Infobulle

Tableau de bord ou outil d'administration

Des boutons de barre d'outils à icône seule portant un vrai nom accessible plus une infobulle qui répète le libellé pour les utilisateurs voyants à la souris, le délai d'ouverture étant ignoré quand le pointeur passe entre boutons adjacents.

Produit SaaS

Une indication sur la légende d'un graphique expliquant comment une métrique est calculée, qui se retourne sous le déclencheur près du haut du panneau et se ferme au scroll pour ne jamais flotter détachée du point qu'elle décrit.

Boutique e-commerce

Les abréviations du guide des tailles et les icônes de badges de livraison annotées au survol, la même information étant répétée dans le texte visible de la page produit, car les acheteurs sur téléphone ne déclencheront jamais le survol.

Documentation développeur

Des jetons de code en ligne et des abréviations qui révèlent une signature de type sur une ligne au survol ou au focus, plafonnés à une largeur maximale étroite pour que le panneau ne couvre jamais l'exemple de code qu'il explique.

Modèles de Infobulle pour différents sites web

Le même composant infobulle, adapté au type de site sur lequel il est publié.

01 / 06

Dashboard and Admin Tools

Dense toolbars are where tooltips earn their keep and where a per-trigger delay is most annoying. Use one shared provider so moving along a row of icon buttons swaps the label instantly. The tooltip still cannot be the only place the label exists — every icon button needs a real accessible name regardless.

Styles et variantes de Infobulle

Choisissez la variante qui correspond au reste de la page, puis générez-la.

01 / 06

Dark Panel Tooltip

A dark slate surface with white text is the default for a reason: it reads as an overlay rather than as page content, so users do not mistake it for a permanent part of the layout. Keep the panel opaque — a translucent tooltip over a chart becomes unreadable exactly where it is needed.

Infobulle en React, Next.js, Vue et Svelte

React, Next.js, Vue 3, SvelteKit, Astro ou HTML simple — le même infobulle, six façons de l'intégrer.

01 / 06

React Tooltip

Positioning needs real DOM measurement, so this is a client component with refs on both trigger and panel. Portal the panel to document.body — a tooltip inside a container with overflow: hidden will be clipped no matter how correct the coordinates are.

src/components/Tooltip.tsx

export function Tooltip({ label, children }) {
  const [open, setOpen] = useState(false)
  const id = useId()

  return (
    <span
      onPointerEnter={() => setOpen(true)}
      onPointerLeave={() => setOpen(false)}
    >
      {cloneElement(children, { 'aria-describedby': open ? id : undefined })}
      {open && createPortal(<Panel id={id}>{label}</Panel>, document.body)}
    </span>
  )
}

Comment ajouter votre Infobulle à un projet

Quatre étapes, du choix d'un modèle de infobulle à sa mise en production.

01~30s

Pick a Tooltip Pattern

Choose by what the trigger already tells the user: a label hint for a named control, the icon-only variant when the tooltip text is the accessible name, or the truncation variant for table cells.

02~10s

Copy the Prompt

Take it into MeDo, Lovable, Bolt, v0 or Cursor, and set the open and close delays before you run it. Those two numbers are what separates a helpful hint from a panel that flickers across a toolbar.

03~1min

Generate and Refine

You get React + Tailwind back with a live preview. Follow up in plain English — "flip below near the top edge", "open instantly on focus", "skip the delay between toolbar buttons" — rather than editing coordinate math by hand.

04~2min

Wire the Triggers and Test the Keyboard

Portal the panel out of any overflow-hidden ancestor, then tab to each trigger and press Escape. If the hint only appears on hover, or Escape does not close it, the component is not shippable yet.

Questions fréquentes à propos de Infobulle

Comment générer un composant infobulle avec l'IA ?

Décrivez le déclencheur, le placement et le timing dans un seul prompt — par exemple « une infobulle sombre au-dessus du déclencheur, 300ms de délai d'ouverture, se retourne quand elle touche le bord du viewport, s'ouvre aussi au focus ». MeDo génère la logique de positionnement, la flèche, les délais et le câblage aria-describedby ensemble, de sorte que le comportement est complet et non un simple div en position absolue stylisé.

Quelle est la différence entre une infobulle et un popover ?

Une infobulle est passive : elle affiche une courte description textuelle de l'élément que vous pointez, se ferme dès que vous vous éloignez et ne contient rien de cliquable. Un popover est interactif : il s'ouvre au clic, reste ouvert, contient des liens, des boutons ou des champs de formulaire, et piège ou gère le focus. Si vous vous surprenez à vouloir un bouton dans une infobulle, c'est un popover que vous vouliez.

Une infobulle doit-elle utiliser aria-describedby ou aria-label ?

Utilisez aria-describedby quand le déclencheur possède déjà un nom visible ou accessible et que l'infobulle ajoute un détail complémentaire, puisqu'une description est annoncée après le nom. Utilisez aria-label quand le texte de l'infobulle est le seul nom du contrôle, comme pour un bouton à icône seule, et omettez alors aria-describedby pour que la même chaîne ne soit pas annoncée deux fois.

Les infobulles fonctionnent-elles sur les appareils tactiles ?

Pas de façon fiable. Les écrans tactiles n'ont pas d'état de survol, et l'appui long est déjà réservé à la sélection de texte et aux menus contextuels, donc tout motif d'infobulle au tap se bat contre la plateforme. Supposez que les utilisateurs sur téléphone et tablette ne la verront jamais, et gardez tout l'essentiel dans du texte visible ou dans un nom accessible.

Quel délai avant l'ouverture d'une infobulle ?

Environ 200 à 500ms fonctionne bien, 300ms étant une valeur par défaut sûre. Le délai existe pour que les infobulles ne scintillent pas pendant que le pointeur traverse une rangée de contrôles en route vers ailleurs. Associez-le à un délai de fermeture bien plus court, autour de 100ms, pour que le panneau ne disparaisse pas pendant que le pointeur se dirige vers lui.

Une infobulle doit-elle pouvoir se fermer au clavier ?

Oui. Les WCAG exigent que le contenu affiché au survol ou au focus puisse être fermé sans déplacer le pointeur ni le focus, ce qui signifie en pratique qu'Escape la ferme. Elle doit aussi rester visible assez longtemps pour être lue et rester survolable pour que le pointeur puisse passer dessus. Mentionnez la prise en charge clavier dans votre prompt et MeDo câble Escape, blur et le comportement de pont au survol.