Card
Displays content in a structured container with an optional header, content, and footer.
Last updated August 7, 2026
CreditsUnchangedPublished
Copied from shadcn/ui.
Overview
import { Button } from "@/components/ui/button"
import {
Card,
CardAction,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
import { Field, FieldGroup, FieldLabel } from "@/components/ui/field"
import { Input } from "@/components/ui/input"
export function CardDemoExample() {
return (
<Card className="w-full max-w-sm">
<CardHeader>
<CardTitle>Login to your account</CardTitle>
<CardDescription>
Enter your email below to login to your account
</CardDescription>
<CardAction>
<Button variant="link">Sign Up</Button>
</CardAction>
</CardHeader>
<CardContent>
<FieldGroup>
<Field>
<FieldLabel htmlFor="card-demo-email">Email</FieldLabel>
<Input
id="card-demo-email"
type="email"
placeholder="you@example.com"
required
/>
</Field>
<Field>
<FieldLabel htmlFor="card-demo-password">Password</FieldLabel>
<Input id="card-demo-password" type="password" required />
</Field>
</FieldGroup>
</CardContent>
<CardFooter className="flex-col gap-2">
<Button type="submit" className="w-full">
Login
</Button>
<Button variant="outline" className="w-full">
Login with Google
</Button>
</CardFooter>
</Card>
)
}Installation
$ npx shadcn@latest add https://ui.persian-labs.ir/r/card.jsonUsage
import {
Card,
CardAction,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
export function Example() {
return (
<Card>
<CardHeader>
<CardTitle>Card Title</CardTitle>
<CardDescription>Card Description</CardDescription>
<CardAction>Card Action</CardAction>
</CardHeader>
<CardContent>
<p>Card Content</p>
</CardContent>
<CardFooter>
<p>Card Footer</p>
</CardFooter>
</Card>
)
}Size
Use size="sm" for a compact card with smaller spacing.
import { ChevronRightIcon } from "lucide-react"
import { Button } from "@/components/ui/button"
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
export function CardSmallExample() {
return (
<Card size="sm" className="mx-auto w-full max-w-xs">
<CardHeader>
<CardTitle>Scheduled reports</CardTitle>
<CardDescription>
Weekly snapshots. No more manual exports.
</CardDescription>
</CardHeader>
<CardContent>
<ul className="grid gap-2 py-2 text-sm">
<li className="flex gap-2">
<ChevronRightIcon className="mt-0.5 size-4 shrink-0 text-muted-foreground rtl:-scale-x-100" />
<span>Choose a schedule (daily, or weekly).</span>
</li>
<li className="flex gap-2">
<ChevronRightIcon className="mt-0.5 size-4 shrink-0 text-muted-foreground rtl:-scale-x-100" />
<span>Send to channels or specific teammates.</span>
</li>
<li className="flex gap-2">
<ChevronRightIcon className="mt-0.5 size-4 shrink-0 text-muted-foreground rtl:-scale-x-100" />
<span>Include charts, tables, and key metrics.</span>
</li>
</ul>
</CardContent>
<CardFooter className="flex-col gap-2">
<Button size="sm" className="w-full">
Set up scheduled reports
</Button>
<Button variant="outline" size="sm" className="w-full">
See what's new
</Button>
</CardFooter>
</Card>
)
}Image
Add an image before the card header to create a card with an image.
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import {
Card,
CardAction,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
export function CardImageExample() {
return (
<Card className="mx-auto w-full max-w-sm gap-0 overflow-hidden pt-0">
<div className="aspect-video w-full bg-gradient-to-br from-neutral-700 to-neutral-900" />
<CardHeader className="pt-(--card-spacing)">
<CardAction>
<Badge variant="secondary">Featured</Badge>
</CardAction>
<CardTitle>Design systems meetup</CardTitle>
<CardDescription>
A practical talk on component APIs, accessibility, and shipping
faster.
</CardDescription>
</CardHeader>
<CardFooter>
<Button className="w-full">View Event</Button>
</CardFooter>
</Card>
)
}RTL
import { Button } from "@/components/ui/button"
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
export function CardRtlExample() {
return (
<Card className="w-full max-w-sm">
<CardHeader>
<CardTitle>ورود به حساب کاربری</CardTitle>
<CardDescription>برای ادامه، ایمیل خود را وارد کنید.</CardDescription>
</CardHeader>
<CardContent className="text-sm text-muted-foreground">
با ورود، شرایط و قوانین پرشینلبز را میپذیرید.
</CardContent>
<CardFooter>
<Button className="w-full">ادامه</Button>
</CardFooter>
</Card>
)
}Product card
A Persian e-commerce pattern: Toman pricing with a discount badge and a right-to-left price line.
import { Badge } from "@/components/ui/badge"
import { Button } from "@/components/ui/button"
import {
Card,
CardAction,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card"
export function CardProductExample() {
return (
<Card className="w-full max-w-sm">
<CardHeader>
<CardTitle>هدفون بیسیم پرشینلبز</CardTitle>
<CardDescription>حذف نویز فعال، ۳۰ ساعت پخش موسیقی</CardDescription>
<CardAction>
<Badge variant="destructive">۲۰٪ تخفیف</Badge>
</CardAction>
</CardHeader>
<CardContent className="flex items-baseline gap-2">
<span className="text-2xl font-semibold">۳٬۲۰۰٬۰۰۰</span>
<span className="text-sm text-muted-foreground">تومان</span>
<span className="text-sm text-muted-foreground line-through">
۴٬۰۰۰٬۰۰۰
</span>
</CardContent>
<CardFooter>
<Button className="w-full">افزودن به سبد خرید</Button>
</CardFooter>
</Card>
)
}API Reference
Card
| Prop | Type | Default | Description |
|---|---|---|---|
| size | "default" | "sm" | "default" | Controls the card's spacing via the --card-spacing CSS variable. |
CardHeader
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | undefined | Additional classes for the header. |
CardContent
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | undefined | Additional classes for the content section. |
CardFooter
| Prop | Type | Default | Description |
|---|---|---|---|
| className | string | undefined | Additional classes for the footer. |