Menu

Ombre box-shadow en CSS : syntaxe, spread, inset, exemples

box-shadow dessine des ombres autour de la boîte d'un élément. Découvrez les cinq valeurs (x, y, flou, diffusion, couleur), les ombres intérieures, la superposition de plusieurs ombres pour une profondeur réaliste, les anneaux de focus faits avec spread, et les erreurs qui rendent les ombres ternes.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Comment fonctionne box-shadow

box-shadow peint une ombre autour de la boîte de bordure d'un élément. Elle suit border-radius, ne prend pas de place dans la mise en page et demande au moins deux valeurs : le décalage horizontal et le décalage vertical.

La syntaxe

box-shadow: [inset] <offset-x> <offset-y> [<blur>] [<spread>] [<color>];
ValeurSensPar défaut
insetDessine l'ombre à l'intérieur de la boîte, comme une zone enfoncéeÀ l'extérieur
offset-xPositif vers la droite, négatif vers la gaucheObligatoire
offset-yPositif vers le bas, négatif vers le hautObligatoire
blurLa douceur du bord ; ne peut pas être négatif0 (un bord net)
spreadAgrandit (positif) ou réduit (négatif) l'ombre0
colorN'importe quelle couleur ; un noir semi-transparent est en général le plus réussiLa couleur du texte

Le nombre de longueurs décide de leur sens : deux sont les décalages, trois ajoutent le flou, quatre ajoutent le spread. Essayez :

Essayez 0 0 0 4px #f59e0b (un anneau), inset 0 0 12px #2563eb et -8px -8px 0 #16a34a.

Spread : anneaux et ombres d'un seul côté

Le spread change la taille de l'ombre avant le flou. Deux schémas en découlent :

  • Un anneau : sans décalage, sans flou, seulement du spread. Contrairement à une bordure, il ne change pas la taille de l'élément, c'est donc un bon indicateur de focus (:focus-visible { box-shadow: 0 0 0 3px #2563eb; }).
  • Un anneau avec un espace : empilez un spread blanc sous un spread coloré plus grand.
  • Un seul côté : décalez l'ombre vers le bas et rétrécissez-la avec un spread négatif, pour qu'elle ne dépasse qu'en bas.

Des ombres superposées pour une profondeur réaliste

Les vraies ombres ont une partie sombre et nette près de l'objet, et une partie douce et pâle plus loin. Deux ou trois couches l'imitent bien mieux qu'un seul grand flou :

La première ombre de la liste est peinte au-dessus. Gardez des couleurs d'ombre en noir semi-transparent ou en teinte sombre du fond, jamais en gris pur, pour qu'elles assombrissent ce qui se trouve dessous.

Ombres intérieures

inset dessine l'ombre à l'intérieur de la boîte de padding, comme si la surface était enfoncée. Cela convient aux champs de texte, aux zones en creux et aux boutons pressés :

input {
  box-shadow: inset 0 1px 3px rgb(0 0 0 / 20%);
}
button:active {
  box-shadow: inset 0 3px 6px rgb(0 0 0 / 30%);
}

Une ombre intérieure est dessinée au-dessus du fond mais sous le contenu. Les ombres qui suivent la forme des lettres plutôt que la boîte relèvent de text-shadow.

Erreurs courantes

  • Des ombres noires pures et entièrement opaques. Elles ressemblent à un contour sombre. Utilisez un alpha de 10 % à 30 %.
  • Un seul énorme flou pour la profondeur. Superposez une petite ombre nette et une grande ombre douce.
  • Une ombre coupée au bord. Un ancêtre avec overflow: hidden la découpe ; ajoutez du padding à l'ancêtre ou déplacez la règle overflow.
  • Un flou négatif. Il est invalide et toute la déclaration est ignorée.
  • Animer box-shadow sur de nombreux éléments. Cela repeint chaque image. Sur les pages lourdes, animez plutôt l'opacity d'un pseudo-élément qui porte l'ombre la plus grande.

Questions fréquentes

Quelle est la syntaxe de box-shadow ?

box-shadow: offset-x offset-y blur spread color;, par exemple box-shadow: 0 4px 12px 0 rgb(0 0 0 / 15%);. Seuls les deux décalages sont obligatoires ; ajoutez inset pour dessiner l'ombre à l'intérieur de la boîte.

À quoi sert spread dans box-shadow ?

Il agrandit (valeur positive) ou réduit (valeur négative) l'ombre avant qu'elle soit floutée. Une ombre sans décalage, sans flou et avec un spread de 3px forme un anneau plein de 3px autour de l'élément.

Comment mettre une ombre uniquement en bas ?

Décalez-la vers le bas et rétrécissez-la avec un spread négatif pour que les côtés disparaissent : box-shadow: 0 8px 6px -6px rgb(0 0 0 / 40%);.

box-shadow modifie-t-il la mise en page ?

Non. Une ombre ne prend pas de place et ne déplace pas les autres éléments : c'est donc un bon moyen d'ajouter un anneau de focus ou un effet de soulèvement au survol sans décalage de la mise en page. Elle peut être coupée par le overflow: hidden d'un ancêtre.

Peut-on avoir plusieurs box-shadow ?

Oui, séparez-les par des virgules. La première ombre est dessinée au-dessus. Superposer une petite ombre nette et une grande ombre douce donne un rendu plus naturel qu'une seule grosse ombre.

Coddy programming languages illustration

Apprendre à coder avec Coddy

COMMENCER