Docs
Card
Card
Displays a card component with a header, content, and footer.
Setup App
Lets get your app running!
Installation
Copy and paste the following code into your component.
import * as React from "react";
import styles from "./card.module.css";
/* -------------------------------------------------------------------------------------------------
* CARD
* -----------------------------------------------------------------------------------------------*/
const CARD_NAME = "Card";
const Card = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div
ref={ref}
className={`${styles.cardBase} ${className ?? ""}`}
{...props}
/>
));
Card.displayName = CARD_NAME;
/* -------------------------------------------------------------------------------------------------
* CARD HEADER
* -----------------------------------------------------------------------------------------------*/
const HEADER_NAME = "CardHeader";
const CardHeader = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div
ref={ref}
className={`${styles.cardHeader} ${className ?? ""}`}
{...props}
/>
));
CardHeader.displayName = HEADER_NAME;
/* -------------------------------------------------------------------------------------------------
* CARD TITLE
* -----------------------------------------------------------------------------------------------*/
const TITLE_NAME = "CardTitle";
const CardTitle = React.forwardRef<
HTMLParagraphElement,
React.HTMLAttributes<HTMLHeadingElement>
>(({ className, ...props }, ref) => (
<h3
ref={ref}
className={`${styles.cardTitle} ${className ?? ""}`}
{...props}
/>
));
CardTitle.displayName = TITLE_NAME;
/* -------------------------------------------------------------------------------------------------
* CARD DESCRIPTION
* -----------------------------------------------------------------------------------------------*/
const DESCRIPTION_NAME = "CardDescription";
const CardDescription = React.forwardRef<
HTMLParagraphElement,
React.HTMLAttributes<HTMLParagraphElement>
>(({ className, ...props }, ref) => (
<p
ref={ref}
className={`${styles.cardDescription} ${className ?? ""}`}
{...props}
/>
));
CardDescription.displayName = DESCRIPTION_NAME;
/* -------------------------------------------------------------------------------------------------
* CARD CONTENT
* -----------------------------------------------------------------------------------------------*/
const CONTENT_NAME = "CardContent";
const CardContent = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div
ref={ref}
className={`${styles.cardContent} ${className ?? ""}`}
{...props}
/>
));
CardContent.displayName = CONTENT_NAME;
/* -------------------------------------------------------------------------------------------------
* CARD FOOTER
* -----------------------------------------------------------------------------------------------*/
const FOOTER_NAME = "CardFooter";
const CardFooter = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div
ref={ref}
className={`${styles.cardFooter} ${className ?? ""}`}
{...props}
/>
));
CardFooter.displayName = FOOTER_NAME;
export {
Card,
CardHeader,
CardFooter,
CardTitle,
CardDescription,
CardContent,
};
Copy and paste the following CSS into a .module.css file.
.cardBase {
background: hsl(var(--background));
border: 1px solid hsl(var(--border));
border-radius: var(--radius);
color: hsl(var(--foreground));
box-shadow: 0 0 #0000, 0 0 #0000, 0 1px 2px 0 rgb(0 0 0 / 0.05);
}
.cardHeader {
display: flex;
flex-direction: column;
padding: 1.125rem;
}
.cardHeader > * {
margin-block: 0.375rem;
}
.cardTitle {
font-size: var(--text-xl);
font-weight: var(--semiBold);
line-height: 1rem;
}
.cardDescription {
color: hsl(var(--muted-foreground));
font-size: var(--text-sm);
}
.cardContent {
padding: 0 1rem 1rem;
}
.cardFooter {
align-items: center;
display: flex;
padding: 0 1rem 1rem;
}
Update the import paths to match your project setup.
Usage
import {
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
} from "@/registry/ui/card/card";
<Card>
<CardHeader>
<CardTitle>Setup App</CardTitle>
<CardDescription>Lets get your app running!</CardDescription>
</CardHeader>
<CardContent>
<span>This is some cool content</span>
</CardContent>
<CardFooter>
<span>This is a footer</span>
</CardFooter>
</Card>