Free Online CSS Box Shadow Generator with Stacked Layers
Build a box-shadow the way real interfaces use it, with more than one layer. Each layer has its own offset, blur, spread, colour with alpha and inset switch, the commas are written for you, and the preview shows the stack exactly as the browser will paint it on a real element.
Enjoying WizTools123? Help keep our server infrastructure 100% free and open for everyone.
How to Build a CSS Box Shadow
A few steps, and nothing is uploaded.
What to Know About Box Shadows
Including what spread really does and what a big blur costs.
box-shadow itself only ever follows the border box and its radius. If you need a shadow that traces a transparent PNG or an irregular clip, that is filter: drop-shadow(), which is a different tool and a different property.
Key Features & Capabilities
What this tool does, and what it deliberately does not.
About the CSS Box Shadow Generator
A convincing shadow is rarely one shadow. Light in a real room gives an object a tight dark contact edge where it meets the surface and a much wider, fainter spread around it, and CSS lets you say exactly that by listing more than one shadow in the same declaration. Most flat-looking interfaces are flat because they use a single mid-blur shadow and nothing else.
This page is built around that list. Each layer gets its own offset, blur, spread, colour and alpha, and you can add or remove layers as you go. The preview is a real element with the real rule applied, sitting on a surface you can switch between light and dark, so the comparison that usually gets skipped is one click away.
The numbers are kept honest. Units are written into the output, the commas go in the right places, and the order of the layers in the rule is the order they will be painted, with the first one on top. Nothing is uploaded and nothing is stored; the page is a calculator for a declaration you could have written yourself, with the fiddly parts handled.
Frequently Asked Questions
Spread, inset, layering and scroll performance.
filter: drop-shadow() instead, which reads the alpha channel of what it is applied to.