Web/CSS/box-shadow

From Get docs


The box-shadow CSS property adds shadow effects around an element's frame. You can set multiple effects separated by commas. A box shadow is described by X and Y offsets relative to the element, blur and spread radius, and color.


The box-shadow property enables you to cast a drop shadow from the frame of almost any element. If a border-radius is specified on the element with a box shadow, the box shadow takes on the same rounded corners. The z-ordering of multiple box shadows is the same as multiple text shadows (the first specified shadow is on top).

Box-shadow generator is an interactive tool allowing you to generate a box-shadow.

Syntax

/* Keyword values */
box-shadow: none;

/* offset-x | offset-y | color */
box-shadow: 60px -16px teal;

/* offset-x | offset-y | blur-radius | color */
box-shadow: 10px 5px 5px black;

/* offset-x | offset-y | blur-radius | spread-radius | color */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);

/* inset | offset-x | offset-y | color */
box-shadow: inset 5em 1em gold;

/* Any number of shadows, separated by commas */
box-shadow: 3px 3px red, -1em 0 0.4em olive;

/* Global keywords */
box-shadow: inherit;
box-shadow: initial;
box-shadow: unset;

Specify a single box-shadow using:

  • Two, three, or four <length> values.
    • If only two values are given, they are interpreted as <offset-x><offset-y> values.
    • If a third value is given, it is interpreted as a <blur-radius>.
    • If a fourth value is given, it is interpreted as a <spread-radius>.
  • Optionally, the inset keyword.
  • Optionally, a <color> value.

To specify multiple shadows, provide a comma-separated list of shadows.

Values

inset
If not specified (default), the shadow is assumed to be a drop shadow (as if the box were raised above the content). The presence of the inset keyword changes the shadow to one inside the frame (as if the content was depressed inside the box). Inset shadows are drawn inside the border (even transparent ones), above the background, but below content.
<offset-x> <offset-y>
These are two <length> values to set the shadow offset. <offset-x> specifies the horizontal distance. Negative values place the shadow to the left of the element. <offset-y> specifies the vertical distance. Negative values place the shadow above the element. See <length> for possible units. If both values are 0, the shadow is placed behind the element (and may generate a blur effect if <blur-radius> and/or <spread-radius> is set).
<blur-radius>
This is a third <length> value. The larger this value, the bigger the blur, so the shadow becomes bigger and lighter. Negative values are not allowed. If not specified, it will be 0 (the shadow's edge is sharp). The specification does not include an exact algorithm for how the blur radius should be calculated, however, it does elaborate as follows:

…for a long, straight shadow edge, this should create a color transition the length of the blur distance that is perpendicular to and centered on the shadow’s edge, and that ranges from the full shadow color at the radius endpoint inside the shadow to fully transparent at the endpoint outside it.

<spread-radius>
This is a fourth <length> value. Positive values will cause the shadow to expand and grow bigger, negative values will cause the shadow to shrink. If not specified, it will be 0 (the shadow will be the same size as the element).
<color>
See <color> values for possible keywords and notations. If not specified, it defaults to currentcolor.

Interpolation

Each shadow in the list (treating none as a 0-length list) is interpolated via the color (as color) component, and x, y, blur, and (when appropriate) spread (as length) components. For each shadow, if both input shadows are or are not inset, then the interpolated shadow must match the input shadows in that regard. If any pair of input shadows has one inset and the other not inset, the entire shadow list is uninterpolable. If the lists of shadows have different lengths, then the shorter list is padded at the end with shadows whose color is transparent, all lengths are 0, and whose inset (or not) matches the longer list.

Formal definition

Initial value none
Applies to all elements. It also applies to ::first-letter.
Inherited no
Computed value any length made absolute; any specified color computed; otherwise as specified
Animation type a shadow list

Formal syntax

none | <shadow>#where <shadow> = inset? && <length>{2,4} && <color>?where <color> = <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hex-color> | <named-color> | currentcolor | <deprecated-system-color>where <rgb()> = rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value> ]? ) | rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? )<rgba()> = rgba( <percentage>{3} [ / <alpha-value> ]? ) | rgba( <number>{3} [ / <alpha-value> ]? ) | rgba( <percentage>#{3} , <alpha-value>? ) | rgba( <number>#{3} , <alpha-value>? )<hsl()> = hsl( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsl( <hue>, <percentage>, <percentage>, <alpha-value>? )<hsla()> = hsla( <hue> <percentage> <percentage> [ / <alpha-value> ]? ) | hsla( <hue>, <percentage>, <percentage>, <alpha-value>? )where <alpha-value> = <number> | <percentage><hue> = <number> | <angle>

Examples

Setting three shadows

In this example, we include three shadows: an inset shadow, a regular drop shadow, and a 2px shadow that creates a border effect (we could have used an outline instead for that third shadow).

HTML

<blockquote><q>You may shoot me with your words,<br/>
You may cut me with your eyes,<br/>
You may kill me with your hatefulness,<br/>
But still, like air, I'll rise.</q>
<p>&mdash; Maya Angelou</p>
</blockquote>

CSS

blockquote {
  padding: 20px;
  box-shadow: 
       inset 0 -3em 3em rgba(0,0,0,0.1), 
             0 0  0 2px rgb(255,255,255),
             0.3em 0.3em 1em rgba(0,0,0,0.3);
}

Result

Setting zero for offset and blur

When the x-offset, y-offset, and blur are all zero, the box shadow will be a solid-colored outline of equal-size on all sides. The shadows are drawn back to front, so the first shadow sits on top of subsequent shadows. When the border-radius is set to 0, as is the default, the corners of the shadow will be, well, corners. Had we put in a border-radius of any other value, the corners would have been rounded.

We added a margin the size of the widest box-shadow to ensure the shadow doesn't overlap adjacent elements or go beyond the border of the containing box. A box-shadow does not impact box model dimensions.

HTML

<div><p>Hello World</p></div>

CSS

p {
  box-shadow: 0 0 0 2em #F4AAB9,
              0 0 0 4em #66CCFF;
  margin: 4em;
  padding:1em;
}

Result

Specifications

Specification Status Comment
CSS Backgrounds and Borders Module Level 3The definition of 'box-shadow' in that specification. Candidate Recommendation Initial definition

Browser compatibility

Update compatibility data on GitHub

Desktop Mobile
Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome for Android Firefox for Android Opera for Android Safari on iOS Samsung Internet
box-shadow

Chrome Full support 10

Notes'

Full support 10

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. Full support 1

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Edge

Full support 12

Firefox Full support 4

Notes'

Full support 4

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. No support 3.5 — 13

Prefixed'

Prefixed' Implemented with the vendor prefix: -moz- Full support 49

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit- Full support 44

Prefixed' Disabled'

Prefixed' Implemented with the vendor prefix: -webkit- Disabled' From version 44: this feature is behind the layout.css.prefixes.webkit preference (needs to be set to true). To change preferences in Firefox, visit about:config.

IE Full support 9

Notes'

Full support 9

Notes'

Notes' To use box-shadow in Internet Explorer 9 or later, you must set border-collapse to separate. Notes' Since version 5.5, Internet Explorer supports Microsoft's DropShadow and Shadow Filter. You can use this proprietary extension to cast a drop shadow (though the syntax and the effect are different from CSS3)

Opera Full support 10.5

Notes'

Full support 10.5

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar.

Safari Full support 5.1

Notes'

Full support 5.1

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. Full support 3

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

WebView Android Full support ≤37

Notes'

Full support ≤37

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. Full support ≤37

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Chrome Android Full support 18

Notes'

Full support 18

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. Full support 18

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Firefox Android Full support 4

Notes'

Full support 4

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. No support 4 — 14

Prefixed'

Prefixed' Implemented with the vendor prefix: -moz- Full support 49

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit- Full support 44

Prefixed' Disabled'

Prefixed' Implemented with the vendor prefix: -webkit- Disabled' From version 44: this feature is behind the layout.css.prefixes.webkit preference (needs to be set to true). To change preferences in Firefox, visit about:config.

Opera Android Full support 14

Notes'

Full support 14

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. Full support 14

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Safari iOS Full support 5

Notes'

Full support 5

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. Full support 1

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Samsung Internet Android Full support 1.0

Notes'

Full support 1.0

Notes'

Notes' Shadows affect layout in this browser. For example, if you cast an outer shadow to a box with a width of 100%, then you'll see a scrollbar. Full support 1.0

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

inset

Chrome Full support 10


Full support 10


Full support 1

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Edge

Full support 12

Firefox Full support 4


Full support 4


No support 3.5 — 13

Prefixed'

Prefixed' Implemented with the vendor prefix: -moz-

IE Partial support 9

Notes'

Partial support 9

Notes'

Notes' To use box-shadow in Internet Explorer 9 or later, you must set border-collapse to separate. Notes' inset must be the last keyword in the declaration.

Opera

Full support 10.5

Safari Full support 5.1


Full support 5.1


Full support 5

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

WebView Android Full support ≤37


Full support ≤37


Full support ≤37

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Chrome Android Full support 18


Full support 18


Full support 18

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Firefox Android Full support 4


Full support 4


No support 4 — 14

Prefixed'

Prefixed' Implemented with the vendor prefix: -moz-

Opera Android Full support 14


Full support 14


Full support 14

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Safari iOS Full support 5


Full support 5


Full support 4.2

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Samsung Internet Android Full support 1.0


Full support 1.0


Full support 1.0

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Multiple shadows

Chrome Full support 10


Full support 10


Full support 1

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Edge

Full support 12

Firefox Full support 4


Full support 4


No support 3.5 — 13

Prefixed'

Prefixed' Implemented with the vendor prefix: -moz-

IE Full support 9

Notes'

Full support 9

Notes'

Notes' To use box-shadow in Internet Explorer 9 or later, you must set border-collapse to separate.

Opera

Full support 10.5

Safari Full support 5.1


Full support 5.1


Full support 3

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

WebView Android Full support ≤37


Full support ≤37


Full support ≤37

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Chrome Android Full support 18


Full support 18


Full support 18

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Firefox Android Full support 4


Full support 4


No support 4 — 14

Prefixed'

Prefixed' Implemented with the vendor prefix: -moz-

Opera Android Full support 14


Full support 14


Full support 14

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Safari iOS Full support 5


Full support 5


Full support 1

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Samsung Internet Android Full support 1.0


Full support 1.0


Full support 1.0

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Spread radius

Chrome Full support 10


Full support 10


Full support 1

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Edge

Full support 12

Firefox Full support 4


Full support 4


No support 3.5 — 13

Prefixed'

Prefixed' Implemented with the vendor prefix: -moz-

IE Full support 9

Notes'

Full support 9

Notes'

Notes' To use box-shadow in Internet Explorer 9 or later, you must set border-collapse to separate.

Opera

Full support 10.5

Safari Full support 5.1


Full support 5.1


Full support 5

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

WebView Android Full support ≤37


Full support ≤37


Full support ≤37

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Chrome Android Full support 18


Full support 18


Full support 18

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Firefox Android Full support 4


Full support 4


No support 4 — 14

Prefixed'

Prefixed' Implemented with the vendor prefix: -moz-

Opera Android Full support 14


Full support 14


Full support 14

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Safari iOS Full support 5


Full support 5


Full support 4.2

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Samsung Internet Android Full support 1.0


Full support 1.0


Full support 1.0

Prefixed'

Prefixed' Implemented with the vendor prefix: -webkit-

Legend

Full support  
Full support
Partial support  
Partial support
See implementation notes.'
See implementation notes.
User must explicitly enable this feature.'
User must explicitly enable this feature.
Requires a vendor prefix or different name for use.'
Requires a vendor prefix or different name for use.


See also