01. Tailwind E-Commerce Product Grid Card with Hover Quick-Add (opens in a new tab)
group/card — image zoom, quick-add reveal and CTA lift all read one named ancestor, so a small tile nested in the hero row can never capture the wrong parent.20 Tailwind CSS cards for e-commerce product grids, SaaS pricing tiers and feature tiles, real estate and hotel booking listings, blog and article feeds, testimonials, KPI stat dashboards, team and profile vCards, video shelves, and leaderboards — spanning recipe meta grids, glassmorphism aurora stages, 3D flip and pop-out lifts, rotating conic borders, and focus-within stacked cascades. Scoped under .twc-NN for no-collision pasting, prefers-reduced-motion guarded, framework-agnostic.
Related18 Tailwind CSS Product Cards36 Tailwind Stacked Cards23 Tailwind CSS Flip Cards15 Tailwind CSS 3D Tilt Hover Cards20 CSS Cards
Premium upgradePartner: Untitled UI
Affiliate linkBuilding a whole Tailwind app, not just this component?
You just browsed 20 Tailwind cards. Untitled UI Pro unlocks 5,000+ components and sections and 250+ page examples for React, styled with Tailwind CSS v4. One licence is a one-time $349 with lifetime updates; teams start at $999.
Untitled UI React. We may earn a commission, at no extra cost to you.
group/card — image zoom, quick-add reveal and CTA lift all read one named ancestor, so a small tile nested in the hero row can never capture the wrong parent.--pop modifier class and becomes a visible diff: the same class list as its neighbours plus six utilities, so you can read what “most popular” costs in styling without opening a stylesheet.line-clamp-2 — the four-declaration -webkit-box ritual becomes one utility that cannot be half-written.absolute offsets you can read in place.240px 1fr split and its single-column mobile fallback sit in the same class list, so the breakpoint is legible at the element that breaks.isolate on the card plus -z-10 / z-0 / relative z-1 on the three decorative planes, instead of a six-selector rule that lifted all the content at once.animate-* utilities minted from @theme, each carrying its own motion-reduce:animate-none beside it.forced-colors: variant — the gradient-text ranks now survive Windows high-contrast mode instead of vanishing, and the fallback is one utility beside the gradient.group-hover/card: utility.flex-1 spans whose heights are the only thing that varies.focus-within, so the contact details on the back are reachable by keyboard. The port's win is the reduced-motion path: instead of cancelling the flip and hiding the back face forever, it becomes an opacity crossfade — same information, no spatial motion.--angle custom property drives a conic gradient around a 1.5px rim, over a terminal panel with a spinner, a tick and a blinking caret. The port's win is honest about its limit — @property and @keyframes cannot be utilities, so they stay CSS and everything else moves.translateZ. The port's win is the sold-out swatch: a diagonal strike plus aria-disabled plus an sr-only label, so the state is no longer communicated by a line alone.@property --angle, giving it syntax:'<angle>', inherits:false and initial-value:0deg, then run a keyframe animation that moves --angle from 0deg to 360deg. The visible border is a conic-gradient(from var(--angle), ...) painted on a pseudo-element that sits behind the panel with a small negative inset and the same border-radius. The opaque terminal panel on top masks the centre, so only the rim shows. The registration is the whole trick: a plain --angle variable is a string and cannot be interpolated, so the gradient would jump between frames. Registering it as an <angle> type lets the browser tween it smoothly.perspective (roughly 800px to 1200px) — perspective set on the moving element itself does nothing. The element you rotate needs transform-style:preserve-3d so its children keep their own Z positions instead of being flattened into one plane; the flip card and the translateZ pop-out product card both depend on this. For the flip card specifically, the front and back faces each need backface-visibility:hidden, and the back face is pre-rotated rotateY(180deg) so it faces away until the container turns. The classic bug is putting perspective on the rotating card rather than its wrapper — you get a flat rotate with no depth. The second is forgetting preserve-3d, which collapses the two faces so the back bleeds through.:hover alone is invisible to keyboard and most touch users. These demos pair every hover trigger with :focus-within. The flip business card turns on .card:hover, .card:focus-within, so tabbing to a link inside the back face reveals it. The stacked-card cascade fans out on :focus-within too, and the product tile shows its quick-add on the same combined selector. For that to fire, the card must contain a genuinely focusable element — a real <a> or <button>, not a <div> with a click handler. Add a visible :focus-visible outline so sighted keyboard users can see where they are, and don't hide the revealed controls with display:none when collapsed, or they drop out of the tab order entirely; use opacity and pointer-events instead so focus can still reach them.backdrop-filter:blur() plus a saturate boost over a semi-transparent white or dark fill — the blur is what turns the drifting aurora blobs behind it into a soft wash instead of distracting colour. Readability comes from three things working together: a background fill with real alpha (around 0.1 to 0.15) so the blur has something to tint, a hairline 1px border in rgba white to define the edge, and text kept at near-full opacity rather than tinted down. The common failures: forgetting the fill so the panel is pure blur and text loses contrast; and using backdrop-filter without a fallback — Firefox needed it behind a flag for a long time, so give the panel a solid-ish background as the base and treat the blur as enhancement. Test the worst case where a bright aurora blob passes directly under the smallest body text.<svg> with a fixed viewBox, no dependency. The trend line is a single <path> or <polyline> whose points you compute by mapping each data value onto the viewBox height — larger value, smaller Y, because SVG Y grows downward. The soft area beneath it is the same point list closed down to the baseline and filled with a gradient defined in <defs>. Because it is inline SVG, the stroke inherits currentColor or a gradient clip, so it matches the card's accent for free. Two gotchas: set vector-effect:non-scaling-stroke if you let the SVG stretch responsively, otherwise the line thickens as the card widens; and mark it aria-hidden='true' since the exact number and trend pill already carry the meaning — a screen reader announcing raw path coordinates is noise.translateY plus a coloured ring and a soft glow shadow, so it reads as the recommended choice without breaking the row's alignment. Keep the lifted card the same width as its siblings — only the transform and the ring change, never the column size, or the grid looks broken. The glow is a large-radius, low-opacity box-shadow in the accent colour rather than a heavy dark shadow. A frequent bug is the raised card getting clipped by an overflow:hidden ancestor once you translate it upward; let the container overflow visibly or add matching top padding. If you animate the lift on hover, apply it to all three cards so hovering a side plan doesn't make the layout jump, and guard the motion with reduced-motion.linear-gradient background (two gradients, one per axis) sized to the grid step. The reason it fades toward the edges rather than tiling flat is a mask-image — usually a radial-gradient from opaque centre to transparent rim — applied to the grid layer, so the lines are strongest under the avatar and dissolve outward. The avatar itself overlaps the cover by half its height using a negative margin-top on the avatar sitting in the content block below, with the cover given no bottom clipping so the overlap shows. Watch two things: the parent must not be overflow:hidden or the overlapping avatar gets cut; and give the avatar a solid ring or border in the card background colour so it reads as lifted off the cover instead of pasted onto it.--angle keyframe and the aurora stacks blurred layers with drifting blobs; multiplied across a long list they burn battery and can drop frames on low-end devices, and backdrop-filter is one of the most expensive things to composite. For a dense feed reach for the flatter shapes instead — the horizontal article feed, the SaaS feature card, the plain product tile. Whatever you pick, wrap every continuous animation in @media (prefers-reduced-motion: reduce) and stop it, since spinning borders and flipping panels are exactly the vestibular triggers that setting exists to disable. Motion should be the exception on a page, not its texture.15 mouse-aware 3D tilt hover cards — e-commerce product spotlight, glassmorphism parallax team card, interactive pricing tier, holographic NFT collectible, pop-out mascot, dark tech grid with border glow, media player album art, blog article preview, cyberpunk neon glow, dashboard KPI widget, minimalist real estate, flip-to-back tilt, mobile app showcase, course learning card, and a Pure CSS touch-friendly tilt. Vanilla JS writes --rx/--ry/--mx/--my; all rendering stays in CSS on the GPU.
24 hand-coded CSS animated card patterns organised by what triggers the motion, not by card style. Scroll and entrance triggers: staggered grid reveals, @starting-style mount-in, scroll-driven scale and fade on animation-timeline: view(), View Transitions API card-to-detail morphs, blur-to-sharp lazy image loading, and FLIP re-layout when a filter changes. State-change triggers: add-to-cart success morph, like and save particle burst, expand and collapse to intrinsic height with calc-size(), swipe-to-dismiss on Pointer Events, and skeleton-to-loaded crossfade. Data-driven triggers: count-up KPI metrics, SVG sparkline draw-on-enter, and progress ring fill on load. Ambient idle loops: breathing glow, floating drift, animated gradient mesh backgrounds, conic rotating borders, auto-cycling testimonial decks, and live status pulses. Plus four hover patterns where the effect is the topic itself: cursor spotlight, holographic foil glare, corner ribbon slide, and horizontal accordion expand. Every card is scoped under a .ac-NN prefix for no-collision pasting, guards prefers-reduced-motion, animates compositor-only properties, and ports unchanged to React, Vue, Svelte, Astro, Next.js and Tailwind.
22 hand-coded CSS avatars for chat apps, team dashboards, comment threads, account menus, and social profiles. Covers circular and squircle shapes, gradient and conic story rings, hexagon clip-path crops, online status dots, notification count badges, verified checkmarks, stacked facepiles with plus-N overflow, initials fallbacks for users without photos, broken-image recovery, avatar pickers, and a size scale system where the ring, badge, and status dot all scale from a single custom property.