Most box-shadow generators give you one shadow — set x, y, blur, color, copy. The output looks flat because real objects in the real world cast multiple shadows at different distances. Every great design system in the last decade (Material Design’s elevation, Apple’s HIG, Stripe, Linear, GitHub, Vercel) ships 2-4 stacked shadows per surface. This generator was rebuilt around that recipe.
Three things make this different from every other free shadow generator. Multi-layer shadow stack — stack up to 20 shadows in one declaration, each with full x/y/blur/spread/color/opacity/inset control; reorder layers; toggle visibility per layer for quick A/B comparison. Production-grade preset library — Material 1dp through 24dp, Apple soft + sharp, Stripe / Linear floating-card, Tobias Ahlin smooth-shadow, long-shadow (8 or 30 layers), neumorphic dual, neon glow. Hover transition variant — toggle one switch and the export ships a :hover state + transition declaration so you get the Stripe-card lift effect ready to paste.
Five framework exports — CSS, SCSS variables, Tailwind arbitrary-value, React inline-style, Vue scoped CSS. The Tailwind export uses square-bracket syntax so a 30-layer long-shadow ships as a single utility class with no Tailwind config changes. The SCSS export extracts every layer to a $shadow-stack-N variable for design-token reuse.
Permalink: every adjustment encodes into the URL hash, so you can bookmark a tuned shadow stack or send it to a teammate. No login, no watermark, no paywall. Free and MIT-licensed.
| Property | Description |
|---|---|
offset-x | Horizontal distance — positive moves right, negative moves left. |
offset-y | Vertical distance — positive moves down, negative moves up. |
blur-radius | Higher = softer edge. 0 = sharp, hard shadow. |
spread-radius | Grows (+) or shrinks (−) the shadow size before blur. |
color | Any CSS color — use rgba() for transparent shadows. |
inset | Optional keyword. Turns the shadow inward (inner shadow). |
box-shadow: 0 4px 12px rgba(0,0,0,0.15);
box-shadow: inset 0 2px 8px rgba(0,0,0,0.25);
box-shadow: 0 1px 2px rgba(0,0,0,0.18), 0 4px 8px rgba(0,0,0,0.12), 0 16px 32px rgba(0,0,0,0.10);
/* For SVG / transparent PNG cutouts use filter, not box-shadow — it follows the alpha channel: */ filter: drop-shadow(0 4px 8px rgba(0,0,0,0.25));
box-shadow is supported in every modern browser and has been since IE 9 — safe to use anywhere without a fallback.