Card
Displays a card with header, content, and footer.
Props
This component group provides styled containers. All parts accept standard div props.
Card: root container with size variants (sm, md, lg, xl) for paddingCardHeader: header row with optional actions, supports size variants for gap spacingCardTitle: title textCardDescription: subdued description textCardAction: right-aligned action area in headerCardContent: main content areaCardFooter: footer area (flex container)
Types
// Card component with size variants
interface CardProps extends ComponentProps<"div"> {
size?: "sm" | "md" | "lg" | "xl";
}
// CardHeader also supports size variants for gap spacing
interface CardHeaderProps extends ComponentProps<"div"> {
size?: "sm" | "md" | "lg" | "xl";
}
// All other Card components extend ComponentProps<"div">
interface CardTitleProps extends ComponentProps<"div"> {}
interface CardDescriptionProps extends ComponentProps<"div"> {}
interface CardActionProps extends ComponentProps<"div"> {}
interface CardContentProps extends ComponentProps<"div"> {}
interface CardFooterProps extends ComponentProps<"div"> {}
Card Title
CardContent...
CardContent...
CardContent...
CardContent...
CardContent...
<Card className="w-[300px]">
<CardHeader>
<CardTitle>Card Title</CardTitle>
<CardAction>
<Button variant="link">action</Button>
</CardAction>
</CardHeader>
<CardContent>
<div className="flex flex-col my-4">
<div>CardContent...</div>
<div>CardContent...</div>
<div>CardContent...</div>
<div>CardContent...</div>
<div>CardContent...</div>
</div>
</CardContent>
<CardFooter className="flex-col gap-2">
<Button className="w-full">Footer</Button>
</CardFooter>
</Card>
Sizes
The Card component supports different padding sizes, and CardHeader adjusts gap spacing accordingly:
Small Card
Compact content with smaller padding and gap.
Large Card
More spacious content with larger padding and gap.
// Small card with reduced padding and gap spacing
<Card size="sm" className="w-50">
<CardHeader size="sm">
<CardTitle>Small Card</CardTitle>
<CardAction>
<Settings className="size-4" />
</CardAction>
</CardHeader>
<CardContent className="text-uk-sm">
Compact content with smaller padding and gap.
</CardContent>
</Card>
// Large card with increased padding and gap spacing (default)
<Card size="lg" className="w-50">
<CardHeader size="lg">
<CardTitle>Large Card</CardTitle>
<CardAction>
<Settings className="size-4" />
</CardAction>
</CardHeader>
<CardContent className="text-uk-md">
More spacious content with larger padding and gap.
</CardContent>
</Card>
Login Form Example
Login to your account
Enter your email below to login to your account
import { Button } from "@vuer-ai/vuer-uikit"
import {
Card,
CardAction,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@vuer-ai/vuer-uikit"
import { Input, Label } from "@vuer-ai/vuer-uikit"
<Card className="w-80">
<CardHeader>
<CardTitle>Login to your account</CardTitle>
<CardAction>
<Button variant="link">Sign Up</Button>
</CardAction>
</CardHeader>
<CardContent className="flex flex-col gap-lg pb-lg">
<CardDescription>
Enter your email below to login to your account
</CardDescription>
<form>
<div className="flex flex-col gap-6">
<div className="grid gap-2">
<Label htmlFor="email">Email</Label>
<Input
id="email"
type="email"
placeholder="m@example.com"
required
/>
</div>
<div className="grid gap-2">
<div className="flex items-center">
<Label htmlFor="password">Password</Label>
<a
href="#"
className="ml-auto inline-block text-uk-xs underline-offset-4 hover:underline"
>
Forgot your password?
</a>
</div>
<Input id="password" type="password" required />
</div>
</div>
</form>
</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>
Examples with Icons and Buttons
User Profile
Manage your account settings and preferences
Notifications
3 new updates available
import { Settings, User, Bell, Plus, ChevronRight } from 'lucide-react';
<Card>
<CardHeader>
<div className="flex items-center gap-2">
<User className="size-5 text-text-secondary" />
<CardTitle>User Profile</CardTitle>
</div>
<CardAction>
<Button variant="ghost" size="sm">
<Settings className="size-4" />
</Button>
</CardAction>
</CardHeader>
<CardContent>
<CardDescription className="py-lg">
Manage your account settings and preferences
</CardDescription>
</CardContent>
<CardFooter>
<Button variant="secondary" className="flex-1">
<ChevronRight className="size-4 ml-auto" />
View Details
</Button>
</CardFooter>
</Card>
<Card size="sm">
<CardHeader>
<div className="flex items-center gap-2">
<Bell className="size-4 text-text-secondary" />
<CardTitle>Notifications</CardTitle>
</div>
</CardHeader>
<CardContent>
<CardDescription className="py-lg">3 new updates available</CardDescription>
</CardContent>
<CardFooter>
<Button size="sm" className="w-full">
<Plus className="size-4 mr-2" />
View All
</Button>
</CardFooter>
</Card>