Hover Card
For sighted users to preview content available behind a link.
Loading…
"use client"
import { Button } from "@/components/ui/button"
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from "@/components/ui/hover-card"
export default function HoverCardDemo() {
return (
<HoverCard>
<HoverCardTrigger
delay={10}
closeDelay={100}
render={<Button variant="link" />}
>
@kickresume
</HoverCardTrigger>
<HoverCardContent className="flex w-64 flex-col gap-0.5">
<div className="font-semibold">@kickresume</div>
<div>
The resume builder that lands interviews — created and maintained by
the Kickresume team.
</div>
<div className="mt-1 text-xs text-muted-foreground">
Joined December 2013
</div>
</HoverCardContent>
</HoverCard>
)
}Installation
pnpm dlx shadcn@latest add @kickresume/hover-cardUsage
import { HoverCard, HoverCardTrigger, HoverCardContent } from "@/components/ui/hover-card"<HoverCard>
<HoverCardTrigger
delay={10}
closeDelay={100}
render={<Button variant="link" />}
>
@kickresume
</HoverCardTrigger>
<HoverCardContent className="flex w-64 flex-col gap-0.5">
<div className="font-semibold">@kickresume</div>
<div>
The resume builder that lands interviews — created and maintained by
the Kickresume team.
</div>
<div className="mt-1 text-xs text-muted-foreground">
Joined December 2013
</div>
</HoverCardContent>
</HoverCard>Composition
Use the following composition to build a HoverCard:
HoverCard
├── HoverCardTrigger
└── HoverCardContentTrigger Delays
Use delay and closeDelay on the trigger to control when the card opens and
closes.
<HoverCard>
<HoverCardTrigger delay={100} closeDelay={200}>
Hover
</HoverCardTrigger>
<HoverCardContent>Content</HoverCardContent>
</HoverCard>Positioning
Use the side and align props on HoverCardContent to control placement.
<HoverCard>
<HoverCardTrigger>Hover</HoverCardTrigger>
<HoverCardContent side="top" align="start">
Content
</HoverCardContent>
</HoverCard>Examples
Basic
Loading…
"use client"
import { Button } from "@/components/ui/button"
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from "@/components/ui/hover-card"
export default function HoverCardDemo() {
return (
<HoverCard>
<HoverCardTrigger
delay={10}
closeDelay={100}
render={<Button variant="link" />}
>
@kickresume
</HoverCardTrigger>
<HoverCardContent className="flex w-64 flex-col gap-0.5">
<div className="font-semibold">@kickresume</div>
<div>
The resume builder that lands interviews — created and maintained by
the Kickresume team.
</div>
<div className="mt-1 text-xs text-muted-foreground">
Joined December 2013
</div>
</HoverCardContent>
</HoverCard>
)
}Sides
Loading…
"use client"
import { Button } from "@/components/ui/button"
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from "@/components/ui/hover-card"
const HOVER_CARD_SIDES = ["left", "top", "bottom", "right"] as const
export default function HoverCardSides() {
return (
<div className="flex flex-wrap justify-center gap-2">
{HOVER_CARD_SIDES.map((side) => (
<HoverCard key={side}>
<HoverCardTrigger
delay={100}
closeDelay={100}
render={<Button variant="outline" className="capitalize" />}
>
{side}
</HoverCardTrigger>
<HoverCardContent side={side}>
<div className="flex flex-col gap-1">
<h4 className="font-medium">Hover Card</h4>
<p>This hover card appears on the {side} side of the trigger.</p>
</div>
</HoverCardContent>
</HoverCard>
))}
</div>
)
}API Reference
See the Base UI documentation for more information.