How do I create a soft, realistic shadow?
Skip large `0 0 10px black` shadows; real shadows are soft, low-opacity, and offset slightly downward. Try something like `0 4px 12px rgba(0,0,0,0.08)` for cards or `0 12px 32px rgba(0,0,0,0.12)` for floating panels. Stack two shadows: a tight one for definition (`0 1px 2px rgba(0,0,0,0.06)`) plus a wider one for ambient depth. The generator lets you layer shadows visually.
What is the difference between inset and outset shadows?
By default, `box-shadow` projects outward from the element. Adding the `inset` keyword draws the shadow inside the element's padding box, useful for inputs, pressed buttons, and recessed panels. You can stack inset and outset shadows in the same declaration to combine outer depth with inner highlights, common in skeuomorphic and neumorphic designs.
How do `blur-radius` and `spread-radius` differ?
`blur-radius` softens the shadow's edge, with larger values producing fuzzier, more diffuse shadows. `spread-radius` enlarges or shrinks the shadow before the blur is applied, so a positive spread expands the shadow uniformly while a negative spread pulls it inward. Combining negative spread with positive offset creates clean directional shadows that don't bleed sideways from the element.
Are box-shadows expensive to render?
Large blur radii on big elements can slow down paint, especially when animated. Modern browsers cache static shadows efficiently, so static shadows on cards rarely cause problems. Avoid animating `box-shadow` directly; instead animate `opacity` on a pseudo-element that holds the shadow, or use `filter: drop-shadow()` with `transform` for cheaper GPU-accelerated transitions.
Can I have multiple shadows on one element?
Yes. Comma-separate as many shadow definitions as you need: `box-shadow: 0 1px 2px rgba(0,0,0,0.06), 0 8px 24px rgba(0,0,0,0.08), inset 0 1px 0 rgba(255,255,255,0.5);`. The first shadow listed renders on top. Use this to build layered depth (close + ambient), simulate borders without using border, or combine inset highlights with outer shadows for tactile button styling.
Why does my shadow get clipped at element edges?
The most common cause is `overflow: hidden` on the element or its parent, which clips the shadow along with overflowing content. To keep the shadow visible, move `overflow: hidden` to a child wrapper, or use `clip-path`/`mask` on the inner content rather than hiding overflow at the parent. A shadow on an element with rounded corners but no overflow constraint will not be clipped.