20 CSS Claymorphism
20 hand-coded claymorphism designs — the puffy, pastel, soft-3D look where every surface reads like moulded clay. The trick is one outer drop shadow to make it float and two inset shadows to inflate it, which is what separates clay from neumorphism. These cover the shadow recipe itself, then buttons, toggles, inputs, cards, modals and app tiles built on it. Scoped under .cl-NN, prefers-reduced-motion guarded, framework-agnostic.
Related22 CSS Neumorphism22 CSS Glassmorphism22 CSS Brutalism18 CSS Gradient UI20 Tailwind CSS Claymorphism
Premium design systemPartner: Untitled UI
Affiliate linkTaking this style from one component to a whole product?
You just browsed 20 clay designs. Untitled UI is the Figma UI kit 380,000+ designers use, with 10,000+ components and variants in Pro, plus a matching React library on Tailwind CSS. Figma Pro is a one-time purchase from $129.
Untitled UI. We may earn a commission, at no extra cost to you.
02. Inner Highlight and Inner Shadow Layering (opens in a new tab)
03. Border Radius Scale for Puffy Shapes (opens in a new tab)
corner-shape: squircle, progressively enhanced with @supports.04. Claymorphism vs Neumorphism Side by Side (opens in a new tab)
05. Claymorphism with Glassmorphism Hybrid (opens in a new tab)
06. Light Source Consistency Across a Clay Layout (opens in a new tab)
07. Clay Depth Tiers for Visual Hierarchy (opens in a new tab)
--elev number per element. Every shadow length, blur and highlight strength is computed from it with calc(), so a component changes tier by changing one integer. Hover promotes a card one tier, which is how clay communicates interactivity without borders or color changes.08. Tailwind CSS Claymorphism Implementation (opens in a new tab)
@theme token you should ship in a real project. The panel prints the exact utility strings next to live components. The demo renders in plain CSS mirroring Tailwind's compiled output, so it runs in any playground without a build step.09. Clay Button Press and Squish States (opens in a new tab)
10. Clay Toggle Switch and Checkbox Set (opens in a new tab)
appearance:none hacks beyond the visually-hidden pattern.11. Clay Input Field and Search Bar (opens in a new tab)
field-sizing:content, and validation styled with :user-invalid so errors appear only after the user finishes.12. Clay Badge & Pill Tag System (opens in a new tab)
13. Claymorphism Card Component (opens in a new tab)
14. Clay Modal Dialog with Floating Depth (opens in a new tab)
popover API — no focus-trap library, no aria-modal hand-wiring. The browser handles the top layer, light dismiss, Escape and focus. Clay does the rest: tier-4 depth, a blurred scrim, and an entry that scales from 0.94 with @starting-style, plus a matching exit.15. Clay Pricing Table with Raised Popular Tier (opens in a new tab)
:has(), so the price actually changes with no script.16. Clay Bottom Tab Bar for Mobile (opens in a new tab)
env(safe-area-inset-bottom) so it clears the iPhone home bar, and 44px+ hit targets with labels that stay legible at the smallest text size. The indicator and label reveal are driven by radios and :has(), and the active tab is announced natively.17. Clay Icon Tiles and App Grid (opens in a new tab)
--h value, with a 3D perspective tilt on hover and a staggered load-in that uses only animation-delay derived from each tile's index. This is the pattern that sells claymorphism — playful, tactile, and cheap enough to render at 60 fps on a phone.18. Clay Toast & Floating Alert Bubbles (opens in a new tab)
role="status" for the polite ones, role="alert" for the error.19. Clay Dark Mode Shadow Recalibration (opens in a new tab)
light-dark(), with a clay switch to compare instantly.20. Clay Animation Performance & Transform Optimization (opens in a new tab)
box-shadow blur directly, the optimized one pre-renders both shadow states and cross-fades a pseudo-element while transform does the motion. The frame counter and long-frame tally are real, and the gap is visible on screen.Frequently asked questions
What is claymorphism in CSS?
box-shadow declaration carrying three layers at once: a large soft outer shadow that lifts the object off the background, an inset shadow on the side away from the light that gives it volume, and an inset highlight on the lit side that makes the surface look rounded rather than flat. Drop any one of the three and the effect collapses — outer only reads as a plain floating card, insets only reads as a pressed well. Demo 01 assembles all three one step at a time so you can see exactly what each layer contributes.What is the difference between claymorphism and neumorphism?
How do you write the claymorphism box-shadow?
box-shadow: 0 18px 32px -12px [tinted-dark], inset -8px -8px 16px [shade], inset 8px 8px 16px [highlight]. Three details separate a convincing result from a muddy one. The outer shadow should be tinted toward the object's own hue rather than neutral grey or black, which is what makes clay feel warm instead of dirty. The inset offsets must point in opposite directions and agree with wherever you decided the light is coming from. And the highlight wants to be lighter and slightly more transparent than the shade is dark, because a symmetrical pair reads as plastic. Demos 01 and 02 cover the assembly and the inset pair specifically.What border radius should claymorphism use?
How do you do claymorphism in Tailwind CSS?
shadow-[...] with all three layers comma-separated inside the brackets, paired with a generous rounded-* and a background colour. That is fine in a playground but unreadable in a codebase and impossible to keep consistent across a team. For real work, define the shadow once as a theme token — in Tailwind v4 that means a @theme entry — and use it as a named utility everywhere, so the light direction and blur scale stay identical across every clay surface in the project. Demo 08 prints the exact strings for both approaches next to live components, and the demo itself renders in plain CSS mirroring the compiled output so it runs without a build step.Why does claymorphism look wrong in dark mode?
Is animating box-shadow bad for performance?
box-shadow forces a repaint on every frame, and a grid of clay tiles all transitioning their blur will drop frames on a mid-range phone even though it looks fine on a desktop. The fix is to avoid animating the shadow at all: put the motion on transform, which the compositor handles without repainting, and if the shadow genuinely must change, pre-render both states on stacked pseudo-elements and cross-fade their opacity instead of interpolating blur radii. Demo 20 runs both approaches under a live FPS meter with a long-frame counter so the difference is measured rather than asserted.Is claymorphism accessible?
:focus-visible should be a genuine visible ring rather than a shadow swap. Demo 09 keeps a real focus ring through the press states, and demo 08's contrast notes cover the palette side.Related collections
20 CSS 3D Effects
20 hand-coded CSS 3D patterns covering the transform pipeline reference build, the perspective property versus the perspective function, perspective-origin as the camera position, why transform function order changes the result, backface-visibility on two sided elements, what silently flattens preserve-3d, building a cube from six faces, transform-origin in three dimensions, translateZ versus scale for depth, z-fighting on coplanar surfaces, rotate3d and the transform matrix, plus ring layouts, stacked z-planes, pointer tilt with parallax, a hinged page-turn flipbook, a drag-rotate cube navigator, an extruded synth panel, perspective floor geometry, nested 3D contexts, and helix distribution. 14 demos are pure CSS; 6 use vanilla JavaScript.
22 CSS Brutalism
22 hand-coded brutalist and neubrutalist CSS designs covering the full spectrum of the aesthetic — from the anti-design brutalism of 2014-2018 (raw system fonts, zero border radius, monochrome density, visible structure) through to the neubrutalism of 2021-present (bright pastel fills, thick black borders, hard offset shadows with zero blur, rounded blocks). The neubrutalist half ships SaaS pricing cards with sticker badges, a pastel admin dashboard, signup forms, rotated feature cards, an offset-shadow navbar, a playful button set, a native dialog modal, a testimonial wall, blog cards, chunky toggles, a landing hero, an image gallery, stats panels and a rounded footer. The brutalist half covers product grids, raw form controls, a monochrome data dashboard, a portfolio index, indie SaaS pricing, Windows 95 desktop chrome, editorial long-read and a streetwear catalog. Every design is scoped under a .brt-NN prefix for no-collision pasting, guards prefers-reduced-motion, and ports unchanged to React, Vue, Svelte, Astro, Next.js and Tailwind.
22 CSS Dark Mode UI
22 hand-coded CSS dark-mode UI patterns — prefers-color-scheme root strategy, data-theme attribute override, color-mix token system, light-dark() function, sidebar navigation, dashboard card grid, modal dialog, focus-ring contrast audit, three-state switcher, code editor surface, OLED true black, layered slate, aurora dim and more.


















