Generador de CSS box-shadow
Diseñá sombras CSS con preview en vivo. Ajustá offset, blur, spread y color; combiná varias capas para conseguir profundidad real. Copiá el código listo para tu hoja de estilos.
Anatomía de box-shadow
La sintaxis CSS es box-shadow: x y blur spread color;:
- X: desplazamiento horizontal. Positivo = derecha. Para sombras realistas casi siempre 0.
- Y: desplazamiento vertical. Positivo = abajo. Generalmente 4-20px para emular luz cenital.
- Blur: qué tan difusa es la sombra. Valores bajos (0-4px) dan sombras duras tipo brutalismo; valores altos (20-50px) dan sombras suaves modernas.
- Spread: cuánto se expande la sombra antes del blur. Negativo achica, positivo agranda. Casi siempre 0.
- Color: idealmente rgba con baja opacidad (4-15%). El negro puro a 100% se ve plástico.
El truco de las multi-shadow
Las sombras "premium" que ves en Stripe, Vercel o Linear no son una sola sombra: son dos o tres apiladas. Una corta y nítida cerca del elemento (1-2px de Y, blur bajo, opacidad media), y una larga y difusa más abajo (8-20px de Y, blur alto, opacidad baja). El resultado emula cómo la luz real proyecta sombras: una directa y una indirecta.
box-shadow:
0 1px 2px rgba(9, 9, 11, 0.06),
0 4px 12px rgba(9, 9, 11, 0.08); Inset: cuándo usarla
Una sombra inset va hacia adentro del elemento y simula profundidad
invertida. Casos legítimos: inputs en estado "pressed", contenedores que parecen
hundidos en la página, áreas de drop zone activas. Caso ilegítimo: todos
los botones (skeuomorfismo de los 2010, ya no envejece bien).
Sombras y dark mode
Las sombras se ven mucho menos en fondos oscuros: el negro sobre negro es casi invisible. Soluciones:
- Bordes claros en lugar de sombras:
border: 1px solid rgba(255,255,255,0.08). - Sombras más opacas (20-40% en vez de 8-12%) y con blur más grande.
- Sombras de color: en dark mode, una sombra teñida con el color de marca a baja opacidad puede dar el efecto de "glow" en lugar de profundidad.
Performance: cuándo te puede romper el frame rate
Box-shadow se calcula en CPU (no GPU). Animar el blur de 100 elementos a la vez
puede tirar el frame rate. Si necesitás animar sombras (ej. al pasar el mouse),
usá transform en lugar de cambiar el blur, o usá
filter: drop-shadow() que sí va por GPU pero respeta los bordes
transparentes (útil para SVG e imágenes con fondo).
Cuatro sombras que funcionan en cualquier UI
- Card subtle:
0 1px 3px rgba(0,0,0,0.06), 0 1px 2px rgba(0,0,0,0.04) - Card hover:
0 4px 12px rgba(0,0,0,0.08), 0 2px 4px rgba(0,0,0,0.05) - Modal / popover:
0 12px 32px rgba(0,0,0,0.12), 0 4px 8px rgba(0,0,0,0.06) - Floating button:
0 6px 20px rgba(0,0,0,0.15), 0 2px 6px rgba(0,0,0,0.08)
Preguntas frecuentes
¿Qué es inset?
Sombra interior: simula profundidad invertida. Útil para inputs presionados o drop zones.
¿Multi-shadow?
Sí: separá cada sombra con coma. Combinar 2-3 da efecto realista tipo Stripe.
¿Por qué se ve barata mi sombra?
Opacidad muy alta y blur muy bajo. Las realistas usan 4-12% alpha, blur 8-30px, leve offset hacia abajo.
¿Performance?
Box-shadow se calcula en CPU. Para animar muchos elementos, mejor transform o filter: drop-shadow.