Skip to main content

Hover Card

Rich hover preview card.

Usage

<w-hover-card>
<w-slot trigger><w-link href="/user/123">@username</w-link></w-slot>
<w-slot body>
<div>
<img src="avatar.jpg" alt="" />
<h4>User Name</h4>
<p>Bio information...</p>
</div>
</w-slot>
</w-hover-card>

Props

PropTypeDefaultDescription
openbooleanfalseWhether card is visible
placementstring"bottom"Card position
delaynumber500Show delay (ms)
close-delaynumber300Hide delay (ms)

Slots

SlotElementDescription
triggerAnyElement to hover
contentAnyCard content

Events

EventDescription
showCard shown
hideCard hidden

Styling

The card is teleported to the portal when shown. The host is display: contents, so it doesn't disturb inline layout around the trigger. autoPosition handles placement.

/* The card body — write your selector against the slot directly */
w-hover-card w-slot[body] > *,
[data-portal-owner^="w-hover-card"] {
background: white;
border: 1px solid #ddd;
border-radius: 8px;
padding: 1rem;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
width: 280px;
}

/* Trigger active state */
w-hover-card w-slot[trigger] > *[aria-expanded="true"] {
text-decoration: underline;
}
SelectorTargets
w-hover-card[open]Host while open
w-hover-card w-slot[trigger] > *[aria-expanded="true"]Active trigger
[data-portal-owner^="w-hover-card"]The teleported body

Accessibility

  • Non-essential preview content
  • Content stays visible when hovered
  • Dismissible with Escape