CSS Text Shadow Generator

This free online CSS text shadow generator builds neon glows, fire effects, 3D pop, and layered drop shadows with a live preview — drag the text to set the offset, stack multiple shadows, and tune blur, color, and opacity. Start from a preset or build from scratch, then copy and paste the text-shadow as CSS or Tailwind. No signup required, runs entirely in your browser.

Presets:

Shadow layers

The first layer paints on top. Drag the text on the preview to move the selected shadow. Max 8 layers.

Editing layer

Offset X

Offset Y

Blur

Color

Opacity

Preview text

Font size

Font weight

Text color

Background

Live Preview

Syntax

x y blur color
The value order
a, b, c
Comma = multiple shadows
no inset
text-shadow has no inset
no spread
text-shadow has no spread

Glow recipe

Zero offsets
No directional shift
Large blur
Spreads the glow outward
Stack 2–3 layers
Intensifies the effect
Dark bg
Required for neon to read

3D recipe

Zero blur
Hard, crisp steps
Step offset by 1px
Each layer adds depth
Same color
Decreasing opacity per step
6–10 layers
More = stronger 3D pop

Tailwind v4

text-shadow-sm
Built-in scale
text-shadow-[…]
Arbitrary custom value
text-shadow-none
Remove shadow
Multi-shadow
Use style attribute

Frequently asked questions

text-shadow adds one or more shadows behind the letters of a text element. Each shadow takes a horizontal offset, a vertical offset, an optional blur radius, and a color — for example text-shadow: 2px 2px 8px rgba(0,0,0,0.5). Unlike box-shadow, there is no inset keyword and no spread radius. Multiple shadows are separated by commas and the first one listed renders on top.
Yes — list several shadows separated by commas: text-shadow: 0 0 10px #22d3ee, 0 0 30px #22d3ee, 0 0 60px #0ea5e9. The first shadow in the list is painted on top. Click Add layer in this generator to stack up to eight shadows for neon glows, fire effects, 3D depth, and more.
offset-x shifts the shadow horizontally (positive = right, negative = left). offset-y shifts it vertically (positive = down, negative = up). The blur radius softens the edge — a larger value makes the shadow more diffuse, while 0 gives a hard, sharp shadow. All three accept px units. The color is technically optional (defaults to the element's color) but should always be set explicitly.
Stack two or three shadows with zero offset and increasing blur radius, all in the same color, against a dark background: text-shadow: 0 0 8px #22d3ee, 0 0 20px #22d3ee, 0 0 40px #0ea5e9. Use white or a bright color for the text itself. More layers with larger blur radii create a more intense, diffuse glow. The Neon preset above applies this recipe instantly.
Stack multiple shadows with no blur, stepping the x and y offsets by one pixel each time: text-shadow: 1px 1px 0 #444, 2px 2px 0 #444, 3px 3px 0 #444, 4px 4px 0 #444. Each layer adds a slice of depth. Decreasing the opacity slightly per step gives a more natural falloff. The 3D preset builds a four-step stack you can customize further.
Yes — Tailwind v4 ships native text-shadow utilities: text-shadow-sm, text-shadow, text-shadow-md, text-shadow-lg, text-shadow-xl, and text-shadow-none. For a custom value use an arbitrary class such as text-shadow-[2px_2px_8px_rgba(0,0,0,0.5)] (spaces as underscores). For multiple stacked shadows, the comma would be parsed as a class separator, so apply them via the style attribute instead. The Tailwind tab above outputs the correct form automatically.
text-shadow follows the shape of individual glyphs, painting behind the rendered letters. box-shadow follows the element's rectangular border box. text-shadow has no inset keyword and no spread radius; box-shadow supports both. Use text-shadow for typographic effects like neon glow, 3D depth, and emboss; use box-shadow for cards, panels, and UI elevations.
text-shadow is purely a visual effect — it never changes the element's size, shifts neighboring content, or causes layout reflow. Modern browsers composite it on the GPU, so even multiple layered shadows are generally performant. Very large blur values on a large block of text can create a repaint cost, but this is rarely noticeable in practice.
Check four things: (1) All values are zero — a shadow with zero offset and zero blur is invisible; add at least a small offset or blur. (2) The color is transparent or matches the background — use a contrasting color with opacity above 0%. (3) A parent has overflow: hidden — this clips shadows just like it clips box-shadow. (4) CSS specificity — another rule with higher specificity or !important may be setting text-shadow: none. Open browser DevTools, inspect the element, and check the computed text-shadow value. If it shows none the property isn't reaching the element at all.