کارت هاور (HoverCard)
نمایش محتوا هنگام هاور
معرفی
کامپوننت HoverCard برای نمایش محتوا هنگام هاور روی یک المان استفاده میشود.
چه زمانی استفاده کنیم:
- برای preview پروفایل کاربران (آواتار، نام، بیو) هنگام hover روی نام کاربری
- برای نمایش خلاصه محتوا (مثلاً preview لینک) بدون نیاز به کلیک
- برای نمایش اطلاعات تکمیلی غنی (تصویر + متن) که فراتر از یک Tooltip ساده است
چه زمانی استفاده نکنیم:
- برای اطلاعات ضروری که همیشه باید نمایش داده شوند
- در رابطهای موبایلاول — HoverCard روی touch کار نمیکند
- وقتی کاربر باید با محتوا تعامل داشته باشد — از
Popoverاستفاده کنید
زمین بازی
با تغییر تنظیمات زیر، پیشنمایش زنده را مشاهده کنید.
استفاده
import { HoverCard, HoverCardContent, HoverCardTrigger } from '@partodata/ui'
import { Avatar, AvatarFallback, AvatarImage, Button } from '@partodata/ui'
export default function MyComponent() {
return (
<HoverCard>
{/* asChild الزامی است — بدون آن trigger یک <a> بدون href است و با کیبورد قابل رسیدن نیست */}
<HoverCardTrigger asChild>
<Button variant="link">@کاربر</Button>
</HoverCardTrigger>
<HoverCardContent>
<div className="flex gap-4">
<Avatar>
<AvatarImage src="/avatar.jpg" />
<AvatarFallback>ک</AvatarFallback>
</Avatar>
<div>
<h4 className="text-subheading">نام کاربر</h4>
<p className="text-sm">توضیحات کاربر</p>
</div>
</div>
</HoverCardContent>
</HoverCard>
)
}trigger باید یک کنترل فوکوسپذیر باشد
HoverCardTrigger بهطور پیشفرض یک <a> بدون href رندر میکند و چنین عنصری در ترتیب Tab قرار نمیگیرد. بنابراین اگر
آن را مستقیم دور یک متن بگذارید، کارت فقط با ماوس باز میشود و کاربر کیبورد هیچ راهی برای دیدن محتوا ندارد.
همیشه از asChild روی یک کنترل واقعاً فوکوسپذیر (Button، Link) استفاده کنید:
<HoverCardTrigger asChild>
<Button variant="link">@کاربر</Button>
</HoverCardTrigger>حالتها و انواع
پیشفرض
راهنمای استفاده
بکنید
- محتوای HoverCard را مختصر و preview-مانند نگه دارید - از
openDelayوcloseDelayمناسب استفاده کنید تا تجربه کاربری روان باشد - برای لینکهای پروفایل در لیستها از HoverCard استفاده کنید
نکنید
- محتوای تعاملی (دکمه، فرم) داخل HoverCard قرار ندهید — از
Popoverاستفاده کنید - در رابطهای موبایلاول به HoverCard تکیه نکنید — روی touch کار نمیکند - اطلاعات حیاتی را فقط در HoverCard قرار ندهید — باید از طریق کلیک هم قابل دسترسی باشند
جدول ویژگیها
HoverCard
HoverCardContent
دسترسیپذیری
محتوای HoverCard برای صفحهخوان اعلام نمیشود
کامپوننت پایهٔ Radix هیچ ارتباط ARIA بین trigger و محتوا برقرار نمیکند: نه aria-describedby، نه role، نه ناحیهٔ
زنده. پس باز شدن کارت برای صفحهخوان اعلام نمیشود و محتوای آن هم به trigger نسبت داده نمیشود.
نتیجهٔ عملی: HoverCard را فقط برای محتوای مکمل (preview) به کار ببرید و همان اطلاعات را در جایی که با کیبورد و صفحهخوان
قابل رسیدن است هم بیاورید — مثلاً یک Popover که با کلیک باز میشود، یا نمای جزئیات در خود صفحه.
- trigger باید فوکوسپذیر باشد (
asChildرویButtonیاLink)؛ در غیر این صورت کارت با کیبورد باز نمیشود - وقتی trigger فوکوسپذیر باشد، فوکوس کیبورد کارت را باز میکند و خروج فوکوس آن را میبندد
- با Escape بسته میشود
- روی دستگاههای لمسی باز نمیشود — اطلاعات ضروری را اینجا نگذارید
- مناسب برای محتوای preview — برای اکشنهای مهم از Popover استفاده کنید