This is a typical shadow attached to an element. This is usually under the element but it can also be inside it or create a relief effect.
Syntax
box-shadow:
(inset)
_horizontal_offset_
_vertical_offset_
(_blur_)
(_spread_)
_color_,
(_other_shadows_);
The basic kind of shadow can be created in a jiffy. The first number indicates the horizontal offset, the second the vertical one - a positive value offsets the shadow down or right, a negative one up or left. The third value is color and believe it or not, the best practice is to use a semi-transparent RGBa color. Let’s show this using several examples.
box-shadow: 5px 5px rgba(0, 0, 0, .5);
If we add another number, the browser will indicate that you want to blur the shadow:
box-shadow: 5px 5px 10px rgba(0, 0, 0, .5);
One more number and you will define the spread distance:
box-shadow: 5px 5px 10px 10px rgba(0, 0, 0, .5);
The key word inset changes the shadow from outer to inner:
box-shadow: 5px 5px 10px 10px rgba(0, 0, 0, .5);
You can also create multiple shadows by dividing the values with a comma. The first shadow is the top one:
box-shadow: 5px 5px 10px 10px rgba(0, 0, 0, .5),
inset 5px 5px 10px 10px rgba(0, 0, 0, .5);
You can see a live example at cdpn.io/e/lAoDv.
Tips and Tricks
Shadow on One Side
If we want to create a shadow on one side only, simply set the horizontal shadow
to 0. However, bear in mind that thanks to using blur, the shadow will be
leaking from the top and bottom:
box-shadow: 5px 0 5px -2px rgba(0,0,0,.5);
See a live example at cdpn.io/e/JnGyb.
Shadow as a Copy of an Object
Drawing the Microsoft logo using a shadow may be rather impractical but it also demonstrates the power of using multiple shadows without blurring. See an example at cdpn.io/e/qJuzw.
You can also combine blurred and sharp shadows: dabblet.com/gist/2043600.
Browser Support
IE9+. There is almost no problem in any modern browser: caniuse.com/box-shadow
Older Webkit Browsers Sometimes Ignore the Spread
A slight problem in older webkit browsers is that they ignore the null value of the spread if a value for blur is missing. Therefore, the following notation won’t work in iOS6 Safari or Android Browser 2.3:
box-shadow: 5px 5px 0 rgba(0, 0, 0, .5);
This one, on the other hand, will:
box-shadow: 5px 5px 10px rgba(0, 0, 0, .5);
See a live example at cdpn.io/e/FGtbu.
Internet Explorer 8
In IE8, a box shadow can be rendered using the filter proprietary property.
Example:
filter: progid:DXImageTransform.Microsoft.Shadow(color='#cccccc', Direction=145, Strength=3);
However, not all types of shadows can be substituted like this.
In older versions of Internet Explorer, a shadow can be rendered using a css3pie.com polyfill but usually you can get away with this using the zero fallback strategy.
