Claymorphism is a UI design trend coined by Michal Malewicz (Hype4 Academy) that gives interface elements a soft, inflated, 3D clay-like appearance. Elements look as if molded from Play-Doh or clay, floating above the background with puffy, tactile surfaces. Unlike Neumorphism (where elements extrude from the background), claymorphic elements float on top of the background using outer shadows for separation and inner shadows for the illusion of volume and inflation.
Claymorphism demands bright pastels and vivid colors. Drop shadows become ineffective on darker variations, so foregrounds and backgrounds should stay in the lighter pastel range.
| Role | Colors | Hex (suggested) |
|---|---|---|
| Background | Soft white, light lavender, light mint | #F5F5FA, #F0EEFF, #EEFBF5 |
| Card surfaces | White, soft pastels | #FFFFFF, #FFF5F5, #F0F4FF |
| Primary accent | Vivid coral / red | #F76D6D, #FF6B6B |
| Secondary accent | Bright sky blue | #62CDFF, #6CB4EE |
| Tertiary accent | Soft purple / lavender | #D6A2FF, #AA3FFE |
| Success | Pastel green | #7AE582, #82D993 |
| Warm accent | Soft amber / peach | #FFB347, #FFCBA4 |
| Text (dark) | Deep blue-gray | #2D3557, #333652 |
| Text (light) | Off-white | #F1F1F1, #FAFAFA |
:root {
/* Backgrounds */
--clay-bg-primary: #f5f5fa;
--clay-bg-secondary: #eee8ff;
--clay-bg-tertiary: #eefbf5;
/* Surface colors (cards, elements) */
--clay-surface-white: #ffffff;
--clay-surface-coral: #f76d6d;
--clay-surface-blue: #62cdff;
--clay-surface-purple: #d6a2ff;
--clay-surface-green: #7ae582;
--clay-surface-peach: #ffb347;
--clay-surface-pink: #ff9eb5;
--clay-surface-mint: #a8e6cf;
/* Text */
--clay-text-dark: #2d3557;
--clay-text-medium: #555b7a;
--clay-text-light: #f1f1f1;
/* Shadows (base colors for rgba manipulation) */
--clay-shadow-purple: rgba(170, 63, 254, 0.42);
--clay-shadow-coral: rgba(247, 109, 109, 0.40);
--clay-shadow-blue: rgba(98, 205, 255, 0.40);
}
Claymorphism typography should be:
| Font | Style | Usage |
|---|---|---|
| Nunito | Rounded sans-serif, soft terminals | Headlines, body text (ideal match for claymorphism) |
| Nunito Sans | Clean companion to Nunito | Body text, UI labels |
| Quicksand | Rounded geometric sans | Headlines, cards, buttons |
| Comfortaa | Rounded geometric, friendly | Display headings, logos |
| Poppins | Geometric sans, versatile weights | All-purpose: headings + body |
| Varela Round | Single-weight rounded sans | UI elements, labels |
| DM Sans | Clean geometric sans | Body text, smaller UI copy |
/* Import fonts */
@import url('https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700;800&family=Quicksand:wght@500;600;700&display=swap');
/* Headlines */
h1, h2, h3 {
font-family: 'Quicksand', 'Nunito', sans-serif;
font-weight: 700;
color: var(--clay-text-dark);
line-height: 1.2;
}
/* Display / Hero text */
.clay-display {
font-family: 'Quicksand', sans-serif;
font-size: clamp(2.5rem, 6vw, 5rem);
font-weight: 700;
letter-spacing: -0.01em;
line-height: 1.1;
}
/* Body text */
body {
font-family: 'Nunito', sans-serif;
font-weight: 400;
font-size: 1rem;
line-height: 1.6;
color: var(--clay-text-dark);
}
/* Bold UI labels / buttons */
.clay-label {
font-family: 'Nunito', sans-serif;
font-weight: 700;
font-size: 0.95rem;
letter-spacing: 0.02em;
text-transform: none; /* avoid uppercase -- it feels too rigid for clay */
}
The core visual effect relies on combining two inset shadows (one dark, one light) with one outer shadow:
box-shadow:
[outer-x] [outer-y] [outer-blur] [outer-color], /* depth/float */
inset [dark-x] [dark-y] [dark-blur] [dark-color], /* volume/concavity */
inset [light-x] [light-y] [light-blur] [light-color]; /* highlight/inflation */
.clay-card {
background: #ffffff;
border-radius: 40px;
padding: 48px;
box-shadow:
0 35px 68px 0 rgba(145, 112, 201, 0.25),
inset 0 -8px 16px 0 rgba(145, 112, 201, 0.15),
inset 0 12px 24px 0 rgba(255, 255, 255, 0.9);
}
.clay-coral {
background: #f76d6d;
border-radius: 40px;
padding: 48px;
color: #f1f1f1;
box-shadow:
12px 12px 24px rgba(200, 80, 80, 0.4),
inset -8px -8px 16px rgba(180, 50, 50, 0.3),
inset 8px 8px 16px rgba(255, 180, 180, 0.5);
}
.clay-blue {
background: #62cdff;
border-radius: 40px;
padding: 48px;
box-shadow:
12px 12px 24px rgba(60, 150, 200, 0.35),
inset -8px -8px 16px rgba(40, 120, 180, 0.3),
inset 8px 8px 16px rgba(180, 230, 255, 0.6);
}
.clay-purple {
background: #d6a2ff;
border-radius: 48px;
padding: 48px;
box-shadow:
0 35px 68px 0 rgba(170, 63, 254, 0.42),
inset 0 -8px 16px 0 rgba(140, 40, 220, 0.3),
inset 0 12px 24px 0 rgba(240, 210, 255, 0.6);
}
.clay-green {
background: hsl(120deg 35% 82%);
border-radius: 50px;
padding: 50px;
color: hsl(120deg 5% 35%);
box-shadow:
34px 34px 68px hsl(120deg 10% 50%),
inset -8px -8px 16px hsl(120deg 20% 50% / 0.7),
inset 0 14px 28px hsl(120deg 20% 95%);
}
.clay-brown {
background: rgba(165, 79, 29, 0.6);
border-radius: 30px;
padding: 40px;
box-shadow:
0.8em 0.8em 2em rgba(165, 79, 29, 0.6),
inset -0.6em -0.6em 1em rgba(165, 79, 29, 0.6),
inset 0.4em 0.4em 0.5em rgba(245, 230, 221, 0.6);
}
.clay-button {
background: var(--clay-surface-coral);
color: var(--clay-text-light);
border: none;
border-radius: 20px;
padding: 16px 36px;
font-family: 'Nunito', sans-serif;
font-weight: 700;
font-size: 1rem;
cursor: pointer;
transition: transform 0.2s ease, box-shadow 0.2s ease;
box-shadow:
8px 8px 20px rgba(200, 80, 80, 0.35),
inset -4px -4px 10px rgba(180, 50, 50, 0.25),
inset 4px 4px 10px rgba(255, 180, 180, 0.45);
}
.clay-button:hover {
transform: translateY(-2px);
box-shadow:
10px 12px 24px rgba(200, 80, 80, 0.45),
inset -4px -4px 10px rgba(180, 50, 50, 0.25),
inset 4px 4px 10px rgba(255, 180, 180, 0.5);
}
.clay-button:active {
transform: translateY(1px);
box-shadow:
4px 4px 12px rgba(200, 80, 80, 0.3),
inset -6px -6px 14px rgba(180, 50, 50, 0.35),
inset 6px 6px 14px rgba(255, 180, 180, 0.35);
}
.clay-input {
background: #ffffff;
border: none;
border-radius: 20px;
padding: 16px 24px;
font-family: 'Nunito', sans-serif;
font-size: 1rem;
color: var(--clay-text-dark);
outline: none;
box-shadow:
6px 6px 16px rgba(145, 112, 201, 0.15),
inset -4px -4px 8px rgba(145, 112, 201, 0.08),
inset 4px 4px 8px rgba(255, 255, 255, 0.8);
}
.clay-input:focus {
box-shadow:
8px 8px 20px rgba(145, 112, 201, 0.25),
inset -4px -4px 10px rgba(145, 112, 201, 0.12),
inset 4px 4px 10px rgba(255, 255, 255, 0.9);
}
Combining clay shadows with glass transparency for a layered effect:
.clay-glass {
background: rgba(255, 255, 255, 0.4);
backdrop-filter: blur(15px);
-webkit-backdrop-filter: blur(15px);
border-radius: 30px;
padding: 48px;
box-shadow:
0 35px 68px 0 rgba(170, 63, 254, 0.42),
inset 0 -8px 16px 0 #d6a2ff;
}
.clay-shape {
filter: drop-shadow(34px 34px 34px hsl(120deg 10% 50%));
}
For rapid prototyping, the clay.css micro-library provides a single .clay class with CSS custom properties:
<link rel="stylesheet" href="https://unpkg.com/claymorphism-css/dist/clay.css"/>
<div class="clay" style="
--clay-background: #f76d6d;
--clay-border-radius: 48px;
padding: 48px;
color: #f1f1f1;
">
Content here
</div>
Available CSS variables:
--clay-background – element background color--clay-border-radius – corner rounding--clay-shadow-outset – outer shadow value--clay-shadow-inset-primary – first inset shadow--clay-shadow-inset-secondary – second inset shadow// tailwind.config.js
module.exports = {
theme: {
extend: {
boxShadow: {
'clay-card': `
inset -10px -10px 20px hsl(302deg 25% 50% / 0.7),
inset 0 16px 32px hsl(302deg 25% 95%)
`,
'clay-btn': `
16px 16px 32px 0 hsl(277deg 50% 65% / 0.5),
inset -16px -16px 32px 0 hsl(277deg 50% 65%),
inset 8px 8px 16px 0 hsl(227deg 65% 75% / 0.45)
`,
},
dropShadow: {
'clay': '35px 35px 35px hsl(302deg 25% 50%)',
},
borderRadius: {
'clay': '40px',
'clay-lg': '50px',
},
},
},
};
Building claymorphic shadows from any base color requires three shadow layers:
| Layer | Direction | Purpose | Color Derivation |
|---|---|---|---|
| Outer shadow | Positive X/Y (e.g. 12px 12px) |
Creates floating/depth effect | Base color darkened, 30-45% opacity |
| Inset dark | Negative X/Y (e.g. inset -8px -8px) |
Creates concavity/volume | Base color darkened 20-30%, 30-70% opacity |
| Inset light | Positive X/Y (e.g. inset 8px 8px) |
Creates highlight/inflation | Base color lightened heavily, 50-90% opacity |
/* Given a base color, e.g. #62CDFF (blue): */
.clay-element {
background: #62CDFF; /* base color */
border-radius: 40px; /* generous rounding */
box-shadow:
12px 12px 24px rgba(50, 140, 200, 0.35), /* outer: darker hue, ~35% opacity */
inset -8px -8px 16px rgba(30, 110, 170, 0.3), /* inset dark: much darker, ~30% opacity */
inset 8px 8px 16px rgba(180, 230, 255, 0.6); /* inset light: very light tint, ~60% opacity */
}
| Aesthetic | Relationship to Claymorphism |
|---|---|
| Neumorphism | Predecessor; elements extrude from background vs. claymorphism where they float above it; neumorphism is monochromatic while claymorphism uses vivid colors |
| Glassmorphism | Contemporary; uses transparency and blur vs. claymorphism’s opaque, inflated surfaces; they can be combined |
| Skeuomorphism | Ancestor; claymorphism borrows the tactile, physical-object metaphor but abstracts it into playful clay forms |
| Corporate Memphis | Shares the friendly, colorful, rounded illustration style; often paired with claymorphic UI elements |
| Minimalism | Claymorphism applies minimalist content principles with maximum surface treatment |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Claymorphism Page</title>
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700;800&family=Quicksand:wght@500;600;700&display=swap" rel="stylesheet">
<style>
:root {
--clay-bg: #f0eeff;
--clay-text: #2d3557;
--clay-surface: #ffffff;
--clay-coral: #f76d6d;
--clay-blue: #62cdff;
--clay-purple: #d6a2ff;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--clay-bg);
color: var(--clay-text);
font-family: 'Nunito', sans-serif;
font-weight: 400;
line-height: 1.6;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
padding: 4rem 2rem;
gap: 3rem;
}
h1, h2, h3 {
font-family: 'Quicksand', sans-serif;
font-weight: 700;
}
.hero {
text-align: center;
padding: 3rem;
}
.hero h1 {
font-size: clamp(2.5rem, 6vw, 4.5rem);
line-height: 1.1;
margin-bottom: 1rem;
}
.clay-card {
background: var(--clay-surface);
border-radius: 40px;
padding: 48px;
max-width: 600px;
width: 100%;
box-shadow:
0 30px 60px rgba(145, 112, 201, 0.2),
inset 0 -6px 12px rgba(145, 112, 201, 0.1),
inset 0 10px 20px rgba(255, 255, 255, 0.9);
}
.clay-card h2 {
margin-bottom: 1rem;
}
.clay-button {
display: inline-block;
background: var(--clay-coral);
color: #f1f1f1;
border: none;
border-radius: 20px;
padding: 14px 32px;
font-family: 'Nunito', sans-serif;
font-weight: 700;
font-size: 1rem;
cursor: pointer;
margin-top: 1.5rem;
transition: transform 0.2s ease, box-shadow 0.2s ease;
box-shadow:
8px 8px 20px rgba(200, 80, 80, 0.35),
inset -4px -4px 10px rgba(180, 50, 50, 0.25),
inset 4px 4px 10px rgba(255, 180, 180, 0.45);
}
.clay-button:hover {
transform: translateY(-2px);
}
</style>
</head>
<body>
<div class="hero">
<h1>Claymorphism</h1>
<p>Soft, puffy, and delightfully tactile UI design</p>
</div>
<div class="clay-card">
<h2>Hello, Clay World</h2>
<p>This card demonstrates the core claymorphic effect: an outer shadow for floating depth, an inner dark shadow for volume, and an inner light shadow for the inflated highlight.</p>
<button class="clay-button">Touch Me</button>
</div>
</body>
</html>