La propriété box-shadow
décrit les ombres appliquées à la boîte avec une liste d'ombres séparées par des virgules. Elle permet de projeter une ombre depuis un élément. Si une border-radius
est définie sur l'élément avec l'ombre, la boîte de l'ombre prendra les mêmes arrondis. L'ordre des couches (z order) pour plusieurs ombres sera le même que pour les ombres texte (la première ombre est sur le dessus).
Le générateur de box-shadow
est un outil interactif qui permet de générer des valeurs pour box-shadow
.
Valeur initiale | none |
---|---|
Applicabilité | tous les éléments. S'applique aussi à ::first-letter . |
Héritée | non |
Média | visuel |
Valeur calculée | toute longueur sous forme absolue; toute couleur sous forme calculée; sinon comme spécifié |
Animable | oui, comme une liste d'ombres |
Ordre canonique | l'ordre unique et non-ambigu défini par la grammaire formelle |
Syntaxe
/* 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; /* Une liste d'ombres, séparées par des virgules */ box-shadow: 3px 3px red, -1em 0 0.4em olive;
Valeurs
inset
- Si la valeur n'est pas définie (le cas par défaut), l'ombre sera une ombre portée (comme si la boîte était élevée au-dessus du contenu).
La présence du mot-cléinset
modifie l'ombre afin qu'elle soit tournée vers l'intérieur du cadre (comme si le contenu était enfoncé dans la boîte). Les ombres tournées vers l'intérieur sont dessinées à l'intérieur de la bordure (même les transparentes), au-dessus de l'arrière-plan mais sous le contenu. <offset-x>
<offset-y>
- Deux valeurs de longueur (
<length>
qui permettent de définir le décalage de l'ombre.<offset-x>
définit la distance horizontale du décalage et les valeurs négatives placeront l'ombre à gauche de l'élément.<offset-y>
définit la distance verticale et les distances négatives placent l'ombre au-dessus de l'élément (cf.<length>
pour les différentes unités possibles).
Si les deux valeurs sont0
, l'ombre est placée derrière l'élément (et peut générer un effet de flou si<blur-radius>
et/ou<spread-radius>
est utilisé). <blur-radius>
- Une troisième valeur de longueur (
<length>
). Plus cette valeur sera grande, plus le flou de l'ombre sera diffus : l'ombre sera donc plus étalée et plus légère. Les valeurs négatives ne sont pas autorisées. Si la valeur n'est pas définie, sa valeur par défaut est0
(le côté de l'ombre est rectiligne). <spread-radius>
- Une quatrième valeur de longueur (
<length>
). Les valeurs positives étaleront l'ombre et les valeurs négatives rétréciront l'ombre. Si elle n'est pas définie, la valeur par défaut est0
(l'ombre aura la même taille que l'élément). <color>
- Une valeur de couleur (
<color>
). Si la valeur n'est pas définie, la couleur utilisée dépend du navigateur ce sera généralement la propriétécolor
mais Safari affiche une ombre transparente.
Interpolation
Chaque ombre de la liste (none
sera traitée comme une liste de longueur nulle) est interpolée via la couleur, le décalage horizontal et vertical, le rayon de flou et l'étalement (lorsque c'est pertinent). Pour chaque ombre, si les deux ombres sont ou ne sont pas inset
, l'ombre interpolée doit respecter cette valeur. Si l'une des ombres a inset
et l'autre non, la liste d'ombres ne peut pas être interpolée. Si les listes d'ombres ont des longueurs différentes, la liste la plus courte sera complétée à la fin avec des ombres dont la couleur est transparent
, toutes les longueurs valent 0
et inset
pour que la valeur corresponde à la plus longue liste.
Syntaxe formelle
none | <shadow>#où
<shadow> = inset? && <length>{2,4} && <color>?
où
<color> = <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hex-color> | <named-color> | currentcolor | <deprecated-system-color>
où
<rgb()> = rgb( <rgb-component>#{3} )
<rgba()> = rgba( <rgb-component>#{3} , <alpha-value> )
<hsl()> = hsl( <hue>, <percentage>, <percentage> )
<hsla()> = hsla( <hue>, <percentage>, <percentage>, <alpha-value> )
<named-color> = <ident>
<deprecated-system-color> = ActiveBorder | ActiveCaption | AppWorkspace | Background | ButtonFace | ButtonHighlight | ButtonShadow | ButtonText | CaptionText | GrayText | Highlight | HighlightText | InactiveBorder | InactiveCaption | InactiveCaptionText | InfoBackground | InfoText | Menu | MenuText | Scrollbar | ThreeDDarkShadow | ThreeDFace | ThreeDHighlight | ThreeDLightShadow | ThreeDShadow | Window | WindowFrame | WindowTextoù
<rgb-component> = <integer> | <percentage>
<alpha-value> = <number>
<hue> = <number>
Exemples
CSS
p { height: 5em; width: 300px; background-color: rgba(128,128,128,0.1); } .ombre_droite_haut { box-shadow: 60px -16px teal; /* la valeur négative décale à droite */ } .ombre_interieure { box-shadow: inset 5em 1em gold; /* le mot-clé inset renverse l'ombre à l'intérieur */ } .ombres_multiples_diffuses { box-shadow: inset 0 0 1em gold, 0 0 2em red; /* deux ombres dans la liste et des rayons de flou pour chacune */ }
HTML
<p class="ombre_droite_haut">Déportée dans l'autre sens</p> <p class="ombre_interieure">L'ombre est dans le contenu !</p> <p class="ombres_multiples_diffuses">Du rouge dehors et du doré dedans</p>
Résultat
Spécifications
Spécification | État | Commentaires |
---|---|---|
CSS Backgrounds and Borders Module Level 3 La définition de 'box-shadow' dans cette spécification. |
Candidat au statut de recommandation | Définition initiale. |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | 10.0[1] 1.0-webkit |
4.0 (2.0)[3] 3.5 (1.9.1)-moz |
9.0[2] | 10.5[1] | 5.1[1] 3.0 -webkit |
Plusieurs ombres | 10.0 1.0-webkit |
4.0 (2.0) 3.5 (1.9.1)-moz |
9.0 | 10.5 | 5.1 3.0 -webkit |
inset |
10.0 4.0-webkit |
4.0 (2.0) 3.5 (1.9.1)-moz |
9.0 | 10.5 | 5.1 5.0 -webkit |
Rayon d'étalement | 10.0 4.0-webkit |
4.0 (2.0) 3.5 (1.9.1)-moz |
9.0 | 10.5 | 5.1 5.0 -webkit |
Fonctionnalité | Safari Mobile | Opera Mini | Opera Mobile | Android |
---|---|---|---|---|
Support simple |
5.0[1] |
? | (Oui)[1] | (Oui)-webkit[1] |
Plusieurs ombres | 5.0 (Oui)-webkit |
? | ? | ? |
inset |
5.0 (Oui)-webkit |
? | ? | ? |
Rayon d'étalement | 5.0 (Oui)-webkit |
? | ? | ? |
[1] Les ombres affectent la disposition dans les anciennes versions de Gecko, Presto et WebKit. Ainsi, on ne peut pas projeter une ombre en dehors d'une boîte pour laquelle width
vaut 100%
si une barre de défilement apparaît.
[2] Depuis la version 5.5, Internet Explorer prend en charge les filtres propriétaires DropShadow et Shadow. Ceux-ci peuvent être utilisés pour dessiner des ombres portées (la syntaxe et l'effet obtenu sont différents par rapport à CSS3). Pour que box-shadow
ait un effet avec IE9 et les versions suivantes, il faut que border-collapse
ait la valeur separate
.
[3] Gecko 13 (Firefox 13 / Thunderbird 13 / SeaMonkey 2.10) a retiré la prise en charge de -moz-box-shadow
. Depuis, seule la version non préfixéee est prise en charge.
En plus de la version préfixée par -moz
, Gecko 44.0 (Firefox 44.0 / Thunderbird 44.0 / SeaMonkey 2.41) prend en charge la version préfixée par -webkit
à des fins de compatibilité web grâce à la préférence layout.css.prefixes.webkit
dont la valeur par défaut vaut false
. Depuis Gecko 49.0 (Firefox 49.0 / Thunderbird 49.0 / SeaMonkey 2.46), cette valeur par défaut est passée à true
.