ข้ามไปเนื้อหา
WhereUI

ค้นหาในเอกสาร

ค้นหาชื่อ component หรือหน้าเอกสาร

Hover Card

จาก shadcn

การ์ดข้อมูลย่อที่เด้งขึ้นเมื่อชี้ที่ตัวเร่ง เหมาะกับการดูภาพรวมของคนหรือรายการโดยไม่ต้องเปิดหน้าใหม่

ติดตั้ง

Terminal
pnpm dlx shadcn@latest add @whereui/hover-card

ต้องผูก registry และติดตั้ง @whereui/theme นำหน้าเสมอเมื่อติดตั้งครั้งแรก

การใช้งาน

import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card"<HoverCard>  <HoverCardTrigger render={<button />}>ดูโปรไฟล์</HoverCardTrigger>  <HoverCardContent>ข้อมูลย่อ</HoverCardContent></HoverCard>

ข้อควรรู้

  • เปิดด้วยการชี้เมาส์เท่านั้น บนอุปกรณ์สัมผัสควรมีทางเลือกอื่น เช่น ปุ่มเปิด popover
  • กำหนด side และ align บน HoverCardContent ได้เมื่อพื้นที่ชนขอบจอ

ซอร์สโค้ด

components/ui/hover-card.tsx
"use client"import { PreviewCard as PreviewCardPrimitive } from "@base-ui/react/preview-card"import { cn } from "cn"function HoverCard({ ...props }: PreviewCardPrimitive.Root.Props) {  return <PreviewCardPrimitive.Root data-slot="hover-card" {...props} />}function HoverCardTrigger({ ...props }: PreviewCardPrimitive.Trigger.Props) {  return (    <PreviewCardPrimitive.Trigger data-slot="hover-card-trigger" {...props} />  )}function HoverCardContent({  className,  side = "bottom",  sideOffset = 4,  align = "center",  alignOffset = 4,  ...props}: PreviewCardPrimitive.Popup.Props &  Pick<    PreviewCardPrimitive.Positioner.Props,    "align" | "alignOffset" | "side" | "sideOffset"  >) {  return (    <PreviewCardPrimitive.Portal data-slot="hover-card-portal">      <PreviewCardPrimitive.Positioner        align={align}        alignOffset={alignOffset}        side={side}        sideOffset={sideOffset}        className="isolate z-50"      >        <PreviewCardPrimitive.Popup          data-slot="hover-card-content"          className={cn(            "z-50 w-64 origin-(--transform-origin) rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-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}        />      </PreviewCardPrimitive.Positioner>    </PreviewCardPrimitive.Portal>  )}export { HoverCard, HoverCardTrigger, HoverCardContent }