セクション
コンポーネント
ホバーカード
マウスオーバーすると表示されるフローティングプレビュー――プロフィールの一端、リンクのプレビュー、用語集の用語など――には、ネオブルータリズム風の枠線と影の演出が施されています。
import {
Avatar,
AvatarFallback,Hover Card は、トリガー上にポインターを置いたときにリッチなプレビューパネルをページ上に浮かべます。クリックは不要です。Base UI Preview Card プリミティブ上に構築し、ネオブルータリストのレシピに沿ってスタイルしています。太い枠線、硬い影、太字のタイポグラフィです。
次のような場面で使います:
- プロフィールののぞき見 — @mention やアバターにホバーして、自己紹介、統計、フォローボタンを表示。
- リンクプレビュー — クリックする前にページのタイトルと要約を見せます。
- 用語解説 — ドキュメント内の専門用語を、ページを離れずに定義します。
インストール#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/hover-card.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/hover-card.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/hover-card.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/hover-card.json
以下の依存関係をインストールします。
pnpm add @base-ui/reactnpm install @base-ui/reactyarn add @base-ui/reactbun add @base-ui/react
以下のコードをコピーして、プロジェクトに貼り付けます。
"use client"
import * as React from "react"
import { HoverCard as HoverCardPrimitive } from "radix-ui"
import { cn } from "@/lib/utils"
function HoverCard({
...props
}: React.ComponentProps<typeof HoverCardPrimitive.Root>) {
return <HoverCardPrimitive.Root data-slot="hover-card" {...props} />
}
function HoverCardTrigger({
...props
}: React.ComponentProps<typeof HoverCardPrimitive.Trigger>) {
return (
<HoverCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />
)
}
function HoverCardContent({
className,
align = "center",
sideOffset = 4,
...props
}: React.ComponentProps<typeof HoverCardPrimitive.Content>) {
return (
<HoverCardPrimitive.Portal data-slot="hover-card-portal">
<HoverCardPrimitive.Content
data-slot="hover-card-content"
align={align}
sideOffset={sideOffset}
className={cn(
"z-50 w-64 origin-(--radix-hover-card-content-transform-origin) rounded border-2 bg-popover p-2.5 text-sm text-popover-foreground shadow-md outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
className
)}
{...props}
/>
</HoverCardPrimitive.Portal>
)
}
export { HoverCard, HoverCardTrigger, HoverCardContent }
インポートのパスをプロジェクトの構成に合わせて更新します。
使い方#
import {
HoverCard,
HoverCardContent,
HoverCardTrigger,
} from "@/components/ui/hover-card"<HoverCard>
<HoverCardTrigger>Hover</HoverCardTrigger>
<HoverCardContent>
The React Framework – created and maintained by @vercel.
</HoverCardContent>
</HoverCard>コンポジション#
HoverCard を構築するには、次のコンポジションを使用します。
HoverCard
├── HoverCardTrigger
└── HoverCardContentトリガーの遅延#
トリガーに delay と closeDelay を指定して、カードが開閉するタイミングを制御します。
<HoverCard>
<HoverCardTrigger delay={100} closeDelay={200}>
Hover
</HoverCardTrigger>
<HoverCardContent>Content</HoverCardContent>
</HoverCard>配置#
HoverCardContent の side プロパティと align プロパティを使って、配置を制御します。
<HoverCard>
<HoverCardTrigger>Hover</HoverCardTrigger>
<HoverCardContent side="top" align="start">
Content
</HoverCardContent>
</HoverCard>使用例#
基本#
import {
Avatar,
AvatarFallback,サイド#
import { Button } from "@/components/ui/button"
import {
HoverCard,RTL#
Neobrutalism で RTL を有効にする方法は、RTL 設定ガイドをご覧ください。
"use client"
import {アクセシビリティ#
Hover Card に専用の WAI-ARIA パターンはなく、いちばん近いのは Tooltip パターン です。Base UI プリミティブはトリガーのキーボードフォーカスでカードを開き、Escape で閉じます。それでも内容は視覚ユーザー向けの補足として扱い、トリガーは本物のリンクにして、全文はリンク先でも到達できるようにしてください。
キーボード操作:
| キー | 操作 |
|---|---|
Tab / Shift + Tab | トリガーへフォーカスを移動 — フォーカスで開き、離れると閉じる |
Escape | カードを閉じる |
Enter | トリガーのリンクを辿る |
APIリファレンス#
詳しくは Base UI のドキュメントをご覧ください。