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
interestforon the link points at the card, apopover="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. Nogroup/peerwiring, nopointer-eventsguard.- 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-stylesets the opening frame, andtransition-behavior: allow-discretekeeps it animating out beforedisplayflips 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.
| Feature | Chrome | Edge | Firefox | Safari | When missing |
|---|---|---|---|---|---|
| Interest invokers (interestfor + popover="hint")Limited availability | 142 | 142 | ✕ | ✕ | The 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 availability | 129 | 129 | 147 | 26 | The 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 available | 117 | 117 | 129 | 17.5 | Elements 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.