UIUI
Card
A flexible container component for displaying content in a card layout with header, content, and footer sections.
Card Title
Card description goes here to provide context about the content.
Effortless card layouts for modern apps
Organize content, actions, and details in a beautiful, responsive container.
<Card className="w-full max-w-sm flex flex-col gap-6">
<CardHeader>
<CardTitle>Card Title</CardTitle>
<CardDescription>
Card description goes here to provide context about the content.
</CardDescription>
</CardHeader>
<CardContent>
<p className="text-sm">
Effortless card layouts for modern apps
</p>
<p className="text-sm">
Organize content, actions, and details in a beautiful, responsive container.
</p>
</CardContent>
<CardFooter>
<Button className="w-full">Awesome!</Button>
</CardFooter>
</Card>
Installation
Install following dependencies:
npm install class-variance-authority
Copy and paste the following code into your project.
"use client";
import * as React from "react";
import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "@/lib/utils";
const cardVariants = cva(
"relative rounded-card bg-card text-card-foreground transition-all duration-300 ease-out overflow-hidden",
{
variants: {
variant: {
default: "border border-border",
outline: "border-2 border-border",
ghost: "border-transparent hover:bg-accent ",
},
size: {
sm: "p-4",
default: "p-6",
lg: "p-8",
xl: "p-10",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
},
);
export interface CardProps
extends React.HTMLAttributes<HTMLDivElement>,
VariantProps<typeof cardVariants> {}
const Card = React.forwardRef<HTMLDivElement, CardProps>(
({ className, variant, size, ...props }, ref) => (
<div
ref={ref}
className={cn(cardVariants({ variant, size }), className)}
{...props}
/>
),
);
Card.displayName = "Card";
const CardHeader = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div
ref={ref}
className={cn("flex flex-col gap-2", className)}
{...props}
/>
));
CardHeader.displayName = "CardHeader";
const CardTitle = React.forwardRef<
HTMLParagraphElement,
React.HTMLAttributes<HTMLHeadingElement>
>(({ className, ...props }, ref) => (
<h3
ref={ref}
className={cn(
"text-xl font-semibold leading-tight tracking-tight text-foreground",
className,
)}
{...props}
/>
));
CardTitle.displayName = "CardTitle";
const CardDescription = React.forwardRef<
HTMLParagraphElement,
React.HTMLAttributes<HTMLParagraphElement>
>(({ className, ...props }, ref) => (
<p
ref={ref}
className={cn("text-sm text-muted-foreground leading-relaxed", className)}
{...props}
/>
));
CardDescription.displayName = "CardDescription";
const CardContent = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div ref={ref} className={cn("flex flex-col gap-4", className)} {...props} />
));
CardContent.displayName = "CardContent";
const CardFooter = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div
ref={ref}
className={cn("flex items-center justify-between", className)}
{...props}
/>
));
CardFooter.displayName = "CardFooter";
export {
Card,
CardHeader,
CardFooter,
CardTitle,
CardDescription,
CardContent,
cardVariants,
};
npx hextaui@latest add card
Usage
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
<Card>
<CardHeader>
<CardTitle>Card Title</CardTitle>
<CardDescription>Card Description</CardDescription>
</CardHeader>
<CardContent>
<p>Card content goes here.</p>
</CardContent>
<CardFooter>
<Button>Action</Button>
</CardFooter>
</Card>
Props
Prop | Type | Default |
---|---|---|
variant? | "default" | "outline" | "ghost" | "elevated" | "default" |
size? | "sm" | "default" | "lg" | "xl" | "default" |
className? | string | undefined |
Edit on GitHub
Last updated on