Neumorphism Generator
StylingEverything runs locally in your browser — nothing is uploaded
Neumorphism (soft UI) rests on one idea: the element and the background are the same colour, and a light shadow to the top left plus a dark shadow to the bottom right create the illusion of being pressed out of the surface — or into it. Both shadow colours are computed, not chosen. That is the reason this tool exists: they have to be derived from the surface and they have to keep its hue. Adding 40 to each RGB channel gives you a cold whitish colour instead — and the eye is very sensitive to a shadow being off-hue, so the "same material" illusion collapses at once. This works in HSL, moving lightness and adjusting saturation slightly, leaving the hue alone. ⚠️ The style’s well-known weakness is accessibility, and it is worth stating up front. The element and the background have inherently low contrast — that is exactly where the softness comes from — and the cost is that people with reduced vision cannot tell what is clickable. So: do not use it for critical actions, or at least give critical controls a real border or a visible label rather than relying on the shadow. Tick "inset" in the preview to compare the two states; that difference is the entire affordance this style offers.
Features
- An adjustable surface colour from which both shadows are derived (same hue, different lightness)
- Adjustable offset distance, blur radius and intensity
- Raised and inset in one toggle — inset swaps the direction of both shadows
- Adjustable corner radius
- The preview backdrop matches the surface, which is what makes the effect hold together
- A complete copyable CSS rule below, with a `.soft` selector
- Values are clamped and colours validated, so the CSS stays valid
- Everything is computed in your browser; nothing is uploaded
How to use
- Pick the surface first: the whole effect depends on it, and a pale grey-blue is the archetypal choice
- Adjust distance and blur to set how far the element sits above the surface
- Use intensity for the darkness of the shadows — too much and the page looks grubby
- Tick "inset" to see the pressed state, then copy the CSS
FAQ
- Why can I not choose the shadow colours?
- Because a small error destroys the effect. The two colours have to satisfy two conditions: derived from the same surface, and sharing its hue — otherwise it does not read as light falling on one material, but as two mismatched patches stuck on. The common hand-rolled approach, "add 40 to each RGB channel", shifts the hue as well (obvious on a warm surface, where it comes out cold and whitish). So this moves lightness in HSL and nudges saturation, leaving the hue untouched, and asks you only for a surface.
- How bad is the accessibility problem, really?
- Significant — and it is intrinsic to the style, not a matter of doing it badly. Its beauty comes from the element and the background being nearly the same colour, while accessibility asks for enough contrast between them. The two are in direct conflict. Concretely: users with reduced vision, or anyone in bright light, cannot see which parts are buttons. Three workable mitigations: keep critical actions (submit, delete) out of pure neumorphism — give them a border or an explicit label; keep hit areas generous (44×44pt and up); and use the inset state for `:active` so the press gives more feedback than the resting state.
- Why does the preview backdrop match the element?
- Because that is the precondition for the whole effect: it assumes the element and its surroundings are one material with light coming from the top left. With a different colour around it the two shadows give themselves away at the edges — it looks like a sticker rather than something pressed out of the surface. So the preview follows the surface colour here, and in a real project the element must also sit on a background of the same colour.
- Where should I use the inset state?
- Raised (the default) is for things you can press: buttons, cards, the off state of a switch. Inset has two uses: the pressed state (`:active`, where the contrast against raised gives the most natural feedback), and recessed containers such as inputs and progress tracks — those are semantically "dented in" already. The toggle here lets you compare the two before deciding.
- What kind of project suits this style?
- It suits interfaces with few elements, generous space and low information density: settings panels, control surfaces, players, dashboards — a few large buttons on open ground. It does not suit dense interfaces. Tables, lists and admin screens rely on borders and dividers to create hierarchy, and neumorphism removes exactly those, so everything smears together. That is also why, after a spell of popularity around 2020, it mostly lives in concept work.
Related tools
CSS Border Radius
StylingSet each corner radius, preview it live and copy the CSS. px, rem or percent — and the preview shows why a percentage gives an ellipse.
Glassmorphism Generator
StylingAdjust blur, opacity, saturation and border, preview the glassmorphism live and copy the CSS, -webkit- prefix included so it works on iOS.
CSS Gradient Generator
StylingAdjust the angle, colours and shape, preview the gradient live, copy the CSS. Linear, radial and conic, with an optional middle stop.
Neon Text
StylingAdjust colour and intensity, preview the neon glow live and copy the CSS, with layered text-shadows on a dark backdrop.
CSS Transition
StylingChoose the property, duration, easing and delay, hover to preview the transition and copy the CSS. Transition and :hover stay separate in the output.
CSS Keyframe Animations
StylingSeven keyframe presets — fade, slide, pop, pulse, shake, spin, float — with duration and easing, plus a reduced-motion fallback.