unscripted/ui

Hover Card

A rich preview card that appears when you hover or focus a link — native delays, keyboard support and viewport-aware flipping, all handed to the browser via an interest invoker.

interest invokersanchor positioningexit animations

A hover card is a tooltip’s bigger sibling. A tooltip is a scrap of text on an icon button; a hover card is a card (an avatar, a name, a bio) surfaced from a link in running text. Rather than wire up hover state, delays and a pointer-events bridge by hand, this hands the whole job to the platform with an interest invoker.

How it works

  • interestfor on the link points at the card, a popover="hint" element. The browser handles showing it on hover and keyboard focus, the open/close delays, the top layer, and keeping it open while you move the cursor toward it. No group/peer wiring, no pointer-events guard.
  • The card declares [position-anchor:--hc-janedoe] back at the link’s [anchor-name:--hc-janedoe], so [position-area:block-end_span-inline-end] places it below and to the right.
  • [position-try-fallbacks:flip-block] keeps it on screen: near the bottom of the viewport the browser flips the card above the link on its own.
  • The entry/exit animation is the same discrete-transition pattern used across the library. @starting-style sets the opening frame, and transition-behavior: allow-discrete keeps it animating out before display flips back.

The fallback story

Interest invokers are Chromium-only for now. In other browsers the card never appears, but the link still works. If you need hover previews for everyone today, the same idea works with a group/card wrapper and group-hover/group-focus-within (see the plain-CSS tooltip for that technique), though a hand-positioned card can’t flip at a viewport edge.

Browser support

Minimum stable version per engine, resolved at build time from MDN's browser-compat-data; Baseline status from the official web-features dataset. Everything degrades gracefully — the “when missing” column is the actual behavior, not a broken page.

FeatureChromeEdgeFirefoxSafariWhen missing
Interest invokers (interestfor + popover="hint")Limited availability142142The hover UI simply never appears — triggers keep their aria-labels and links still navigate, so nothing is lost. If you need it everywhere today, the plain-CSS technique on the Tooltip page works in every browser.
CSS anchor positioningLimited availability12912914726The popover opens centered in the viewport (the top-layer default) instead of attached to its trigger.
Entry/exit animations (allow-discrete + @starting-style)Baseline 2024 · newly available11711712917.5Elements appear and disappear instantly. Nothing breaks — you just lose the animation.

† @supports cannot test at-rules, so the badge checks transition-behavior: allow-discrete, which co-shipped with @starting-style in every engine.