Skip to main content

Hover Card

For sighted users to preview content available behind a link.

Preview

import {
HoverCard,
HoverCardTrigger,
HoverCardContent,
} from "@/components/ui/hover-card"
import { Avatar, AvatarImage, AvatarFallback } from "@/components/ui/avatar"
import { CalendarDays } from "lucide-react"

<HoverCard>
<HoverCardTrigger asChild>
<a href="#" className="text-sm font-semibold text-primary underline underline-offset-4">
@stacks
</a>
</HoverCardTrigger>
<HoverCardContent className="w-80">
<div className="flex gap-4">
<Avatar size="sm">
<AvatarImage src="/img/stx-logo.png" alt="Stacks" />
<AvatarFallback>ST</AvatarFallback>
</Avatar>
<div className="space-y-1">
<h4 className="text-sm font-semibold">Title</h4>
<p className="text-sm text-muted-foreground">
Lorem ipsum dolor sit amet consectetur.
</p>
<div className="flex items-center pt-2">
<CalendarDays className="mr-2 h-4 w-4 text-muted-foreground" />
<span className="text-xs text-muted-foreground">Link</span>
</div>
</div>
</div>
</HoverCardContent>
</HoverCard>

API Reference

HoverCard

PropTypeDefaultDescription
openDelaynumber700Duration from when the mouse enters the trigger until the hover card opens
closeDelaynumber300Duration from when the mouse leaves the trigger or content until the hover card closes
openbooleanControlled open state
onOpenChange(open: boolean) => voidCallback when the open state changes

HoverCardTrigger

Wraps the element that triggers the hover card. Use asChild to merge props onto a custom element.

HoverCardContent

PropTypeDefaultDescription
side"top" | "right" | "bottom" | "left""bottom"Preferred side of the trigger to render
sideOffsetnumber4Distance in pixels from the trigger
align"start" | "center" | "end""center"Preferred alignment against the trigger

Accessibility

  • The hover card is intended for sighted users only; content is hidden from screen readers
  • Not suitable for essential information — use tooltips or popovers for accessible alternatives
  • Opens on hover with configurable delays
  • Closes when the pointer leaves the trigger or content area