Docs
Flipping cardsFlipping cards
A list of flip cards arranged, each card representing an item or concept. Hovering on a card flips it to reveal additional details.
requires interactionhover
Loading...
Installation
CLI
pnpm dlx shadcn@latest add https://animata.design/r/list/flipping-cards.json
Manual
Install dependencies
This uses Flip Card for the hover flip. Install it by following its installation steps.
Run the following command
It will create a new file called flipping-cards.tsx inside the components/animata/list directory.
mkdir -p components/animata/list && touch components/animata/list/flipping-cards.tsxPaste the code
Open the newly created file and paste the following code:
import type { ComponentProps } from "react";
import FlipCard, { FlipCardBack, FlipCardFront } from "@/animata/card/flip-card";
import { cn } from "@/lib/utils";
type FlippingCardsRootProps = ComponentProps<"div">;
function FlippingCardsRoot({ className, ...props }: FlippingCardsRootProps) {
return <div className={cn("grid grid-cols-3 gap-5 max-sm:grid-cols-2", className)} {...props} />;
}
type FlippingCardsItemProps = ComponentProps<typeof FlipCard>;
function FlippingCardsItem({ className, ...props }: FlippingCardsItemProps) {
return (
<FlipCard className={cn("h-60 w-48 [&>div]:rounded-none", className)} rotate="y" {...props} />
);
}
const FlippingCardsItemWithFaces = Object.assign(FlippingCardsItem, {
Front: FlipCardFront,
Back: FlipCardBack,
});
const FlippingCards = Object.assign(FlippingCardsRoot, {
Item: FlippingCardsItemWithFaces,
}) as typeof FlippingCardsRoot & {
Item: typeof FlippingCardsItemWithFaces;
};
export function getFlippingCardsAccent(_index: number) {
return "hsl(var(--accent))";
}
export default FlippingCards;
export { FlippingCards, FlippingCardsItemWithFaces as FlippingCardsItem };Usage
FlippingCards is bare bones: a responsive grid wrapper and sized flip items. Each FlippingCards.Item wraps Flip Card mechanics — use Item.Front and Item.Back for face markup.
The Storybook demo shows a typography grid with per-card accent colors via getFlippingCardsAccent(index).
import FlippingCards, { getFlippingCardsAccent } from "@/animata/list/flipping-cards";
<FlippingCards>
{items.map((item, index) => (
<FlippingCards.Item key={item.id}>
<FlippingCards.Item.Front className="flex bg-white p-4">
<span>{item.label}</span>
</FlippingCards.Item.Front>
<FlippingCards.Item.Back
className="flex flex-col p-4"
style={{ backgroundColor: getFlippingCardsAccent(index) }}
>
<p>{item.detail}</p>
</FlippingCards.Item.Back>
</FlippingCards.Item>
))}
</FlippingCards>Override grid or card size with className on FlippingCards or each Item.
Changelog
- 2026-06 — Replaced the
listprop and inline 3D flip with composableFlippingCards.Item,Item.Front, andItem.Backbuilt on Flip Card.
Credits
Built by Bibek Bhattarai