¿Quieres añadir profundidad y dimensión a tus diseños web? La propiedad CSS box-shadow es una de las herramientas más poderosas para crear interfaces visuales atractivas. En esta guía completa, aprenderás todo sobre box-shadow y cómo usar nuestro generador gratuito para crear sombras profesionales con múltiples capas.
La propiedad CSS box-shadow permite añadir efectos de sombra alrededor del marco de un elemento. A diferencia de las sombras simples de antaño, las sombras modernas pueden:
css
box-shadow: [inset] offset-x offset-y blur-radius spread-radius color;
css
/ Sombra exterior (predeterminada) /
.elemento {
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
/ Sombra interior /
.elemento-inset {
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
}
Usos del inset:
css
/ Sombra a la derecha /
.derecha { box-shadow: 10px 0 5px rgba(0,0,0,0.2); }
/ Sombra a la izquierda /
.izquierda { box-shadow: -10px 0 5px rgba(0,0,0,0.2); }
/ Sin desplazamiento horizontal /
.centrada { box-shadow: 0 5px 5px rgba(0,0,0,0.2); }
Rangos típicos: -100px a 100px
css
/ Sombra hacia abajo (más común) /
.abajo { box-shadow: 0 10px 5px rgba(0,0,0,0.2); }
/ Sombra hacia arriba /
.arriba { box-shadow: 0 -10px 5px rgba(0,0,0,0.2); }
Rangos típicos: -100px a 100px
css
/ Sin desenfoque (sombra nítida) /
.nitida { box-shadow: 0 4px 0 rgba(0,0,0,0.2); }
/ Desenfoque suave /
.suave { box-shadow: 0 4px 10px rgba(0,0,0,0.2); }
/ Desenfoque muy difuso /
.difusa { box-shadow: 0 4px 40px rgba(0,0,0,0.2); }
Rangos típicos: 0 a 100px
css
/ Sin expansión /
.normal { box-shadow: 0 4px 6px 0 rgba(0,0,0,0.2); }
/ Expansión positiva (sombra más grande) /
.expandida { box-shadow: 0 4px 6px 5px rgba(0,0,0,0.2); }
/ Expansión negativa (sombra más pequeña) /
.reducida { box-shadow: 0 4px 6px -2px rgba(0,0,0,0.2); }
Rangos típicos: -50px a 50px
css
/ Negro con opacidad (más común) /
.negro { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.25); }
/ Color de marca /
.azul { box-shadow: 0 4px 6px rgba(59, 130, 246, 0.5); }
/ Colores múltiples para efectos /
.colorido {
box-shadow:
0 0 10px rgba(255, 0, 0, 0.5),
0 0 20px rgba(0, 255, 0, 0.5),
0 0 30px rgba(0, 0, 255, 0.5);
}
Una de las características más poderosas de box-shadow es la capacidad de aplicar múltiples sombras a un mismo elemento:
css
.tarjeta-profesional {
box-shadow:
/ Sombra principal /
0 4px 6px -1px rgba(0, 0, 0, 0.1),
/ Sombra secundaria más suave /
0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
css
.elevacion-baja {
box-shadow:
0 1px 3px rgba(0,0,0,0.12),
0 1px 2px rgba(0,0,0,0.24);
}
.elevacion-media {
box-shadow:
0 10px 20px rgba(0,0,0,0.19),
0 6px 6px rgba(0,0,0,0.23);
}
.elevacion-alta {
box-shadow:
0 19px 38px rgba(0,0,0,0.30),
0 15px 12px rgba(0,0,0,0.22);
}
css
.efecto-3d {
box-shadow:
0 1px 0 #e0e0e0,
0 2px 0 #d0d0d0,
0 3px 0 #c0c0c0,
0 4px 0 #b0b0b0,
0 5px 10px rgba(0,0,0,0.4);
}
css
.neon-azul {
box-shadow:
0 0 10px rgba(59, 130, 246, 0.7),
0 0 20px rgba(59, 130, 246, 0.5),
0 0 40px rgba(59, 130, 246, 0.3);
}
css
.con-borde {
box-shadow:
/ Borde simulado /
0 0 0 1px rgba(0,0,0,0.1),
/ Sombra principal /
0 4px 6px rgba(0,0,0,0.1);
}
Seis presets listos para usar:
Suave: Sombra sutil para elementos delicadoscss
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
Media: Balance perfecto para tarjetas
css
box-shadow:
0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06);
Grande: Elevación pronunciada
css
box-shadow:
0 10px 25px -5px rgba(0, 0, 0, 0.25),
0 20px 40px -10px rgba(0, 0, 0, 0.2);
Interna: Efecto hundido
css
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);
3D: Profundidad realista
css
box-shadow:
0 1px 0 #e0e0e0,
0 2px 0 #d0d0d0,
0 3px 0 #c0c0c0,
0 4px 0 #b0b0b0,
0 5px 10px rgba(0, 0, 0, 0.4);
Neón: Efecto de brillo
css
box-shadow:
0 0 10px rgba(59, 130, 246, 0.7),
0 0 20px rgba(59, 130, 246, 0.5),
0 0 40px rgba(59, 130, 246, 0.3);
| Característica | Nuestro generador | Otros generadores |
|---|---|---|
| Capas múltiples | ✅ Ilimitadas | ⚠️ Limitadas o ninguna |
| Presets | ✅ 6 profesionales | ❌ Pocos o ninguno |
| Vista previa | ✅ Tiempo real | ⚠️ Básica |
| Opacidad | ✅ Control independiente | ⚠️ Limitado |
| Inset | ✅ Por capa | ⚠️ Global o ninguno |
| Código | ✅ Optimizado | ⚠️ Sin optimizar |
| Gratuito | ✅ 100% | ⚠️ Limitaciones |
css
.card {
background: white;
border-radius: 8px;
padding: 24px;
box-shadow:
0 1px 3px rgba(0,0,0,0.12),
0 1px 2px rgba(0,0,0,0.24);
transition: box-shadow 0.3s ease;
}
.card:hover {
box-shadow:
0 14px 28px rgba(0,0,0,0.25),
0 10px 10px rgba(0,0,0,0.22);
}
Beneficios:
css
.button {
background: #3b82f6;
color: white;
padding: 12px 24px;
border-radius: 6px;
box-shadow:
0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06);
transition: all 0.3s ease;
}
.button:hover {
transform: translateY(-2px);
box-shadow:
0 10px 15px -3px rgba(0, 0, 0, 0.1),
0 4px 6px -2px rgba(0, 0, 0, 0.05);
}
.button:active {
transform: translateY(0);
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.05);
}
css
.input {
border: 1px solid #e5e7eb;
border-radius: 6px;
padding: 10px 14px;
transition: box-shadow 0.2s ease;
}
.input:focus {
outline: none;
border-color: #3b82f6;
box-shadow:
0 0 0 3px rgba(59, 130, 246, 0.1),
0 1px 2px rgba(0, 0, 0, 0.05);
}
css
.modal {
background: white;
border-radius: 12px;
padding: 32px;
box-shadow:
0 20px 25px -5px rgba(0, 0, 0, 0.1),
0 10px 10px -5px rgba(0, 0, 0, 0.04);
animation: modalAppear 0.3s ease;
}
@keyframes modalAppear {
from {
opacity: 0;
transform: scale(0.95);
}
to {
opacity: 1;
transform: scale(1);
}
}
css
.header {
position: fixed;
top: 0;
width: 100%;
background: white;
transition: box-shadow 0.3s ease;
}
.header.scrolled {
box-shadow:
0 4px 6px -1px rgba(0, 0, 0, 0.1),
0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
css
.logo {
box-shadow:
0 0 20px rgba(59, 130, 246, 0.3),
0 0 40px rgba(59, 130, 246, 0.2),
0 0 60px rgba(59, 130, 246, 0.1);
animation: pulse 2s ease-in-out infinite;
}
@keyframes pulse {
0%, 100% {
box-shadow:
0 0 20px rgba(59, 130, 246, 0.3),
0 0 40px rgba(59, 130, 246, 0.2),
0 0 60px rgba(59, 130, 246, 0.1);
}
50% {
box-shadow:
0 0 30px rgba(59, 130, 246, 0.5),
0 0 60px rgba(59, 130, 246, 0.3),
0 0 90px rgba(59, 130, 246, 0.2);
}
}
css
/ ❌ Malo - Puede causar lag /
.elemento {
animation: mover 1s infinite;
box-shadow:
0 1px 0 #e0e0e0,
0 2px 0 #d0d0d0,
0 3px 0 #c0c0c0,
0 4px 0 #b0b0b0,
0 5px 0 #a0a0a0,
0 6px 0 #909090,
0 7px 10px rgba(0,0,0,0.4);
}
/ ✅ Bueno - Usa transform para animaciones /
.elemento {
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
animation: mover 1s infinite;
}
@keyframes mover {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-10px); }
}
css
.elemento-animado {
will-change: box-shadow;
transition: box-shadow 0.3s ease;
}
.elemento-animado:hover {
box-shadow: 0 10px 25px rgba(0,0,0,0.2);
}
css
/ ✅ Bueno - Combina sombra con color /
.button {
background: #3b82f6;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.button:focus {
background: #2563eb;
box-shadow:
0 0 0 3px rgba(59, 130, 246, 0.5),
0 2px 4px rgba(0,0,0,0.1);
outline: 2px solid transparent; / Para lectores de pantalla /
}
css
/ ❌ Malo - Sombra demasiado sutil /
.card {
background: white;
box-shadow: 0 1px 2px rgba(0,0,0,0.03);
}
/ ✅ Bueno - Sombra visible /
.card {
background: white;
box-shadow: 0 1px 3px rgba(0,0,0,0.12);
}
css
/ Móvil - Sombras sutiles /
.card {
box-shadow: 0 1px 3px rgba(0,0,0,0.12);
}
/ Tablet y desktop - Sombras más pronunciadas /
@media (min-width: 768px) {
.card {
box-shadow:
0 4px 6px -1px rgba(0,0,0,0.1),
0 2px 4px -1px rgba(0,0,0,0.06);
}
.card:hover {
box-shadow:
0 10px 15px -3px rgba(0,0,0,0.1),
0 4px 6px -2px rgba(0,0,0,0.05);
}
}
css
/ Tema claro /
.card {
background: white;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
/ Tema oscuro /
@media (prefers-color-scheme: dark) {
.card {
background: #1f2937;
/ Sombras más oscuras y pronunciadas /
box-shadow: 0 4px 6px rgba(0,0,0,0.5);
}
}
/ Con CSS variables /
:root {
--shadow-color: rgba(0,0,0,0.1);
}
[data-theme="dark"] {
--shadow-color: rgba(0,0,0,0.5);
}
.card {
box-shadow: 0 4px 6px var(--shadow-color);
}
css
/ ❌ Excesivo - Parece irreal /
.card {
box-shadow: 0 50px 100px rgba(0,0,0,0.8);
}
/ ✅ Balanceado - Natural /
.card {
box-shadow:
0 10px 25px -5px rgba(0,0,0,0.1),
0 20px 40px -10px rgba(0,0,0,0.1);
}
css
/ ❌ Malo - Color sólido /
.elemento {
box-shadow: 0 4px 6px rgb(0, 0, 0);
}
/ ✅ Bueno - Con opacidad /
.elemento {
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
css
/ ❌ Mismo estilo para todo /
.button, .card, .modal, .dropdown {
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
/ ✅ Adaptado al contexto /
.button {
/ Sombra sutil para botones /
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.card {
/ Sombra estándar para tarjetas /
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.modal {
/ Sombra pronunciada para modales /
box-shadow: 0 20px 25px rgba(0,0,0,0.15);
}
.dropdown {
/ Sombra direccional hacia abajo /
box-shadow: 0 10px 15px -3px rgba(0,0,0,0.1);
}
css
/ ❌ Malo - Animar box-shadow /
.elemento {
transition: box-shadow 0.3s ease;
}
.elemento:hover {
box-shadow: 0 10px 25px rgba(0,0,0,0.2);
}
/ ✅ Mejor - Usar transform si es posible /
.elemento {
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: transform 0.3s ease;
}
.elemento:hover {
transform: translateY(-4px);
}
/ ✅ Aceptable - Animar con will-change /
.elemento {
will-change: box-shadow;
transition: box-shadow 0.3s ease;
}
La propiedad box-shadow tiene excelente soporte:
| Navegador | Versión mínima | Notas |
|---|---|---|
| Chrome | 10+ (2011) | Soporte completo |
| Firefox | 4+ (2011) | Soporte completo |
| Safari | 5.1+ (2011) | Soporte completo |
| Edge | 12+ (2015) | Soporte completo |
| Opera | 10.5+ (2010) | Soporte completo |
| IE | 9+ (2011) | Soporte completo |
css
/ ❌ Ya no es necesario /
.elemento {
-webkit-box-shadow: 0 4px 6px rgba(0,0,0,0.1);
-moz-box-shadow: 0 4px 6px rgba(0,0,0,0.1);
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
/ ✅ Suficiente en 2025 /
.elemento {
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
Para formas irregulares y transparencias:
css
/ box-shadow - Solo afecta al box /
.imagen-con-box-shadow {
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
/ drop-shadow - Sigue la forma del elemento /
.imagen-con-drop-shadow {
filter: drop-shadow(0 4px 6px rgba(0,0,0,0.1));
}
Cuándo usar cada uno:
| Propiedad | Mejor para |
|---|---|
| box-shadow | Cajas rectangulares, múltiples sombras, mejor rendimiento |
| drop-shadow | Imágenes PNG, SVG, formas irregulares |
Para sombras en texto:
css
.titulo {
text-shadow:
0 2px 4px rgba(0,0,0,0.1),
0 4px 8px rgba(0,0,0,0.05);
}
Muchas librerías incluyen sistemas de sombras predefinidos:
Tailwind CSS:html
Sombra pequeña
Sombra estándar
Sombra media
Sombra grande
Sombra extra grande
Sombra máxima
Material-UI (MUI):
jsx
Elevación 1
Elevación 3
Elevación 6
Elevación 12
Técnicamente no hay límite, pero por rendimiento se recomienda no exceder 5-7 sombras por elemento. En la práctica, 2-3 sombras son suficientes para la mayoría de efectos.
Sí, especialmente cuando se animan o se usan en muchos elementos simultáneamente. Para mejor rendimiento:
will-change: box-shadow para elementos que se animarántransform en lugar de animar box-shadowSí, pero ten cuidado con el rendimiento:
css
.elemento {
transition: box-shadow 0.3s ease;
}
.elemento:hover {
box-shadow: 0 10px 25px rgba(0,0,0,0.2);
}
Para mejor rendimiento, considera animar transform u opacity en su lugar.
Simplemente usa el color deseado en lugar de negro:
css
.sombra-azul {
box-shadow: 0 4px 6px rgba(59, 130, 246, 0.5);
}
.sombra-multicolor {
box-shadow:
0 0 10px rgba(255, 0, 0, 0.5),
0 0 20px rgba(0, 255, 0, 0.5),
0 0 30px rgba(0, 0, 255, 0.5);
}
Usa box-shadow para la mayoría de casos. Usa drop-shadow para imágenes PNG transparentes o SVG.
Usa la palabra clave inset:
css
.sombra-interior {
box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
}
Sí, box-shadow respeta automáticamente el border-radius del elemento:
css
.tarjeta-redondeada {
border-radius: 12px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
/ La sombra seguirá las esquinas redondeadas /
}
Las sombras CSS son una herramienta fundamental para crear interfaces modernas y profesionales. Con nuestro Generador de Box Shadow, puedes:
✨ Experimentar sin límites: Prueba diferentes combinaciones en tiempo real
🎨 Crear efectos complejos: Múltiples capas con control total
⚡ Ahorrar tiempo: Presets profesionales listos para usar
💻 Código optimizado: CSS limpio y listo para producción
🎯 Vista previa precisa: Ve exactamente cómo se verá
📋 Copiar fácilmente: Un click para tener el código
No necesitas conocimientos avanzados de CSS. Solo ajusta los controles, ve la vista previa y copia el código. Es así de simple.
Si esta herramienta te ha sido útil, compártela con otros diseñadores y desarrolladores. Juntos construimos mejores herramientas para la comunidad.
Explorar más herramientas de desarrollo