CSS Box Shadow Complete Guide 2026 - Mastering Shadow Effects
Everything about CSS box-shadow property. Master it from basic syntax to multiple shadows, neon effects, and neumorphism with practical examples.
Toolypet Team
Development Team
CSS Box Shadow Complete Guide 2026
Add depth to buttons, dimension to cards, and sophistication to your UI with box-shadow. In 2026 web design, shadows aren't just decoration—they're a core UX element.
box-shadow Basic Syntax
box-shadow: offset-x offset-y blur spread color;
| Value | Description | Required |
|---|---|---|
offset-x | Horizontal offset (+ right) | ✅ |
offset-y | Vertical offset (+ down) | ✅ |
blur | Blur radius | ❌ (default 0) |
spread | Spread radius | ❌ (default 0) |
color | Shadow color | ❌ (default currentColor) |
inset | Inner shadow | ❌ |
Basic Examples
Simple Shadow
/* Basic drop shadow */
.card {
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
/* Stronger shadow */
.card-elevated {
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
}
Directional Shadows
/* Bottom right */
.shadow-br { box-shadow: 4px 4px 8px rgba(0,0,0,0.2); }
/* Top left */
.shadow-tl { box-shadow: -4px -4px 8px rgba(0,0,0,0.2); }
/* All directions */
.shadow-all { box-shadow: 0 0 15px rgba(0,0,0,0.3); }
Multiple Shadows
Combine multiple shadows with commas.
/* Soft layered shadow */
.soft-shadow {
box-shadow:
0 1px 2px rgba(0,0,0,0.07),
0 2px 4px rgba(0,0,0,0.07),
0 4px 8px rgba(0,0,0,0.07),
0 8px 16px rgba(0,0,0,0.07);
}
/* Realistic shadow */
.realistic {
box-shadow:
0 2.8px 2.2px rgba(0,0,0,0.02),
0 6.7px 5.3px rgba(0,0,0,0.028),
0 12.5px 10px rgba(0,0,0,0.035),
0 22.3px 17.9px rgba(0,0,0,0.042),
0 41.8px 33.4px rgba(0,0,0,0.05),
0 100px 80px rgba(0,0,0,0.07);
}
Inset Shadows
Use the inset keyword to create inner shadows.
/* Basic inset */
.inset-shadow {
box-shadow: inset 0 2px 4px rgba(0,0,0,0.2);
}
/* Pressed button effect */
.pressed-button {
box-shadow:
inset 0 2px 4px rgba(0,0,0,0.3),
inset 0 -1px 2px rgba(255,255,255,0.1);
}
/* Input field focus */
.input:focus {
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1),
0 0 0 3px rgba(59,130,246,0.3);
}
Design Trend Examples
1. Material Design Shadows
/* Elevation 1 */
.md-1 { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }
/* Elevation 2 */
.md-2 { box-shadow: 0 3px 6px rgba(0,0,0,0.15), 0 2px 4px rgba(0,0,0,0.12); }
/* Elevation 3 */
.md-3 { box-shadow: 0 10px 20px rgba(0,0,0,0.15), 0 3px 6px rgba(0,0,0,0.10); }
/* Elevation 4 */
.md-4 { box-shadow: 0 15px 25px rgba(0,0,0,0.15), 0 5px 10px rgba(0,0,0,0.05); }
/* Elevation 5 */
.md-5 { box-shadow: 0 20px 40px rgba(0,0,0,0.2); }
2. Neumorphism
/* Neumorphism background */
.neumorphism {
background: #e0e5ec;
box-shadow:
9px 9px 16px rgba(163,177,198,0.6),
-9px -9px 16px rgba(255,255,255,0.5);
}
/* Neumorphism pressed */
.neumorphism-pressed {
background: #e0e5ec;
box-shadow:
inset 6px 6px 10px rgba(163,177,198,0.6),
inset -6px -6px 10px rgba(255,255,255,0.5);
}
/* Neumorphism button */
.neumorphism-button {
background: linear-gradient(145deg, #cacfd6, #f0f5fc);
box-shadow:
5px 5px 10px #a3b1c6,
-5px -5px 10px #ffffff;
}
3. Glassmorphism
.glassmorphism {
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow:
0 8px 32px rgba(0, 0, 0, 0.1),
inset 0 0 0 1px rgba(255,255,255,0.1);
}
4. Neon Effects
/* Neon glow */
.neon-blue {
box-shadow:
0 0 5px #00f,
0 0 10px #00f,
0 0 20px #00f,
0 0 40px #00f;
}
.neon-pink {
box-shadow:
0 0 5px #ff00ff,
0 0 10px #ff00ff,
0 0 20px #ff00ff,
0 0 40px #ff00ff;
}
/* Animated neon */
@keyframes neon-pulse {
0%, 100% { box-shadow: 0 0 5px #0ff, 0 0 20px #0ff; }
50% { box-shadow: 0 0 10px #0ff, 0 0 40px #0ff, 0 0 60px #0ff; }
}
.neon-animated {
animation: neon-pulse 2s infinite;
}
Colored Shadows
Brand Color Shadows
/* Blue shadow */
.shadow-blue {
box-shadow: 0 10px 30px rgba(59, 130, 246, 0.4);
}
/* Purple shadow */
.shadow-purple {
box-shadow: 0 10px 30px rgba(139, 92, 246, 0.4);
}
/* Gradient-like multi-color */
.shadow-gradient {
box-shadow:
-10px 0 30px rgba(255, 0, 128, 0.3),
10px 0 30px rgba(0, 128, 255, 0.3);
}
Hover Effects
.card {
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
transition: box-shadow 0.3s ease, transform 0.3s ease;
}
.card:hover {
box-shadow: 0 20px 40px rgba(0,0,0,0.2);
transform: translateY(-5px);
}
Practical Components
Card Component
.card {
background: white;
border-radius: 12px;
padding: 24px;
box-shadow:
0 1px 3px rgba(0,0,0,0.1),
0 1px 2px rgba(0,0,0,0.06);
transition: box-shadow 0.2s;
}
.card:hover {
box-shadow:
0 10px 15px -3px rgba(0,0,0,0.1),
0 4px 6px -2px rgba(0,0,0,0.05);
}
Buttons
.button {
background: #3b82f6;
color: white;
padding: 12px 24px;
border: none;
border-radius: 8px;
box-shadow: 0 4px 14px rgba(59,130,246,0.4);
transition: all 0.2s;
}
.button:hover {
box-shadow: 0 6px 20px rgba(59,130,246,0.5);
transform: translateY(-2px);
}
.button:active {
box-shadow: 0 2px 8px rgba(59,130,246,0.4);
transform: translateY(0);
}
Modal/Popup
.modal {
background: white;
border-radius: 16px;
box-shadow:
0 25px 50px -12px rgba(0,0,0,0.25),
0 0 0 1px rgba(0,0,0,0.05);
}
/* Dark mode */
.modal-dark {
background: #1f2937;
box-shadow:
0 25px 50px -12px rgba(0,0,0,0.5),
0 0 0 1px rgba(255,255,255,0.1);
}
Input Fields
.input {
border: 1px solid #e5e7eb;
border-radius: 8px;
padding: 12px 16px;
transition: all 0.2s;
}
.input:focus {
outline: none;
border-color: #3b82f6;
box-shadow: 0 0 0 3px rgba(59,130,246,0.2);
}
.input-error {
border-color: #ef4444;
box-shadow: 0 0 0 3px rgba(239,68,68,0.2);
}
Performance Optimization
Using will-change
.animated-shadow {
will-change: box-shadow;
transition: box-shadow 0.3s ease;
}
/* Remove after animation */
.animated-shadow:not(:hover) {
will-change: auto;
}
Alternative: filter drop-shadow
/* Shadow for irregular shapes */
.drop-shadow {
filter: drop-shadow(0 4px 6px rgba(0,0,0,0.1));
}
/* Apply to PNG images */
.icon {
filter: drop-shadow(2px 2px 4px rgba(0,0,0,0.3));
}
box-shadow vs filter
| Feature | box-shadow | drop-shadow |
|---|---|---|
| Applies to | Box boundary | Alpha channel |
| spread support | ✅ | ❌ |
| inset support | ✅ | ❌ |
| Multiple shadows | ✅ | ❌ |
| Performance | Good | Moderate |
Tailwind CSS
<!-- Basic shadows -->
<div class="shadow-sm">Small shadow</div>
<div class="shadow">Default shadow</div>
<div class="shadow-md">Medium shadow</div>
<div class="shadow-lg">Large shadow</div>
<div class="shadow-xl">Extra large shadow</div>
<div class="shadow-2xl">2XL shadow</div>
<!-- Colored shadow -->
<div class="shadow-lg shadow-blue-500/50">Blue shadow</div>
<!-- Hover -->
<div class="shadow hover:shadow-xl transition-shadow">Hover effect</div>
<!-- Inset -->
<div class="shadow-inner">Inner shadow</div>
FAQ
Q1: Shadow gets clipped?
A: Parent has overflow: hidden, or there's no space for the shadow to extend.
/* Solution */
.parent {
overflow: visible; /* or remove */
padding: 20px; /* space for shadow */
}
Q2: Performance issues?
A: Complex box-shadows on many elements can cause performance degradation.
- Minimize multiple shadows
- Use
will-changeappropriately - Simplify shadows during scroll
Q3: Shadow looks weird on rounded corners?
A: box-shadow automatically follows border-radius. If there's an issue, check browser compatibility.
Q4: Recommended shadow colors?
A:
- Light mode:
rgba(0,0,0,0.1)torgba(0,0,0,0.2) - Dark mode:
rgba(0,0,0,0.3)torgba(0,0,0,0.5) - Colored shadows: 30-50% opacity of background color
Conclusion
box-shadow key points:
- Basic syntax: offset-x, offset-y, blur, spread, color
- Multiple shadows: Layer with commas
- Inset: Inner shadows
- Trends: Neumorphism, glassmorphism, neon
- Performance: will-change, avoid excessive shadows
Related Tools
| Tool | Purpose |
|---|---|
| Box Shadow Generator | Generate shadow code |
| Gradient Generator | CSS gradients |
| Filter Generator | CSS filter effects |
About the Author
Toolypet Team
Development Team
The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.