کارت هاور (HoverCard)

نمایش محتوا هنگام هاور

معرفی

کامپوننت HoverCard برای نمایش محتوا هنگام هاور روی یک المان استفاده می‌شود.

چه زمانی استفاده کنیم:

  • برای preview پروفایل کاربران (آواتار، نام، بیو) هنگام hover روی نام کاربری
  • برای نمایش خلاصه محتوا (مثلاً preview لینک) بدون نیاز به کلیک
  • برای نمایش اطلاعات تکمیلی غنی (تصویر + متن) که فراتر از یک Tooltip ساده است

چه زمانی استفاده نکنیم:

  • برای اطلاعات ضروری که همیشه باید نمایش داده شوند
  • در رابط‌های موبایل‌اول — HoverCard روی touch کار نمی‌کند
  • وقتی کاربر باید با محتوا تعامل داشته باشد — از Popover استفاده کنید

زمین بازی

با تغییر تنظیمات زیر، پیش‌نمایش زنده را مشاهده کنید.

زمین بازی
تنظیمات
چیدمان
حالت
200
کد این نمونه به‌صورت خودکار قابل تولید نیست — برای کد آماده‌ی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.

استفاده

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

Prop

Type

HoverCardContent

Prop

Type

دسترسی‌پذیری

محتوای HoverCard برای صفحه‌خوان اعلام نمی‌شود

کامپوننت پایهٔ Radix هیچ ارتباط ARIA بین trigger و محتوا برقرار نمی‌کند: نه aria-describedby، نه role، نه ناحیهٔ زنده. پس باز شدن کارت برای صفحه‌خوان اعلام نمی‌شود و محتوای آن هم به trigger نسبت داده نمی‌شود.

نتیجهٔ عملی: HoverCard را فقط برای محتوای مکمل (preview) به کار ببرید و همان اطلاعات را در جایی که با کیبورد و صفحه‌خوان قابل رسیدن است هم بیاورید — مثلاً یک Popover که با کلیک باز می‌شود، یا نمای جزئیات در خود صفحه.

  • trigger باید فوکوس‌پذیر باشد (asChild روی Button یا Link)؛ در غیر این صورت کارت با کیبورد باز نمی‌شود
  • وقتی trigger فوکوس‌پذیر باشد، فوکوس کیبورد کارت را باز می‌کند و خروج فوکوس آن را می‌بندد
  • با Escape بسته می‌شود
  • روی دستگاه‌های لمسی باز نمی‌شود — اطلاعات ضروری را اینجا نگذارید
  • مناسب برای محتوای preview — برای اکشن‌های مهم از Popover استفاده کنید

کامپوننت‌های مرتبط

  • Tooltip — وقتی فقط یک خط متن ساده برای hover نیاز دارید (بدون تصویر یا ساختار غنی)
  • Popover — وقتی محتوا تعاملی است و کاربر باید روی آن کلیک کند (نه فقط hover)