
Box-shadow is a powerful property in CSS3. It’s more than just for drop-shadows. Think of it as a multi-purpose 3D styling tool. That’s because you can stack multiple drop shadows.
Today I’m going to show you how to make, out of a simple DIV, this:
Box-shadow takes 6 attributes:
- X offset
- Y offset
- Blur size
- Grow/Shrink size (optional)
- Color
- The “inset” flag (optional)
Here are some basic uses of a single box-shadow declaration:
.dropshadow {
box-shadow: 0px 5px 10px #444;
}
.fatshadow {
box-shadow: 0px 5px 10px 5px #444;
}
.insetshadow {
box-shadow: 0px 5px 10px #444 inset;
}
Interesting stuff is possible, for instance, by using no blur, and a semi-transparent white color:
.highlight {
box-shadow: 0px 1em 0px rgba(255,255,255,0.5) inset;
}
Or, more simply, by using a grow factor on an inset white shadow, without any X or Y offset, we effectively add an inner border.
.innerborder {
box-shadow: 0px 0px 0px 4px white inset;
}
All of that is fine and dandy, but gets much more interesting when you use multiple box-shadows. You simply separate the declarations with a comma. Each new declaration is painted under the preceding one.
.theworks {
box-shadow:
/*
gray inset shadow all around,
stronger on the bottom
*/
0px -1px 2px gray inset,
/*
...on top of an inner white band
*/
0px 0px 0px 3px white inset,
/*
dark inset shadow under the white band,
stronger on the top (by offsetting it 1
pixel down.
*/
0px 1px 5px 2px black inset,
/*
highlight, using semi-transparent white,
without a blur
*/
0px 15px 0px 3px rgba(255,255,255,0.5) inset,
/*
Under the highlight, darken the bottom
of the div, with lots of blur
*/
0px -8px 15px 0px black inset,
/*
Done with insets, now on to the outer layers
*/
/*
A white highlight below the div...
*/
0px 2px 4px 2px white,
/*
...and a dark recess above.
*/
0px -2px 4px 2px darkgray,
/*
All of it on top of a fat gray outline
*/
0px 0px 0px 10px lightgray,
/*
And now some fun. Let's add a lighter
clone to the right, a darker one to the
left, and stack those lower and lower,
and wider and wider. 3D button!
*/
1px 1px 0px 11px silver,
-1px 1px 0px 11px darkgray,
1px 4px 0px 12px silver,
-1px 4px 0px 12px darkgray,
1px 7px 0px 13px silver,
-1px 7px 0px 13px darkgray,
1px 10px 0px 14px silver,
-1px 10px 0px 14px darkgray,
1px 13px 0px 15px silver,
-1px 13px 0px 15px darkgray,
1px 16px 0px 16px silver,
-1px 16px 0px 16px darkgray,
/*
Finally, let's stack three bona-fide
drop-shadows, each lighter, each offset
left.
*/
0px 16px 4px 17px black,
-4px 20px 8px 17px gray,
-12px 30px 16px 17px silver
;
}