ToolPal
Colorful abstract design with light and shadow effects

CSS box-shadow : Des bases aux effets UI remarquables

📷 George Becker / Pexels

CSS box-shadow : Des bases aux effets UI remarquables

Maîtrisez CSS box-shadow avec des exemples pratiques — cartes subtiles, effets de lueur, neumorphisme, et effets multicouches. Inclut un générateur visuel gratuit.

23 mars 20267 min de lecture

Copier-coller une ombre, vraiment ?

CSS box-shadow est l'une de ces propriétés que la plupart des développeurs apprennent juste assez pour s'en sortir. On copie une valeur depuis les specs de design ou on en trouve une sur Stack Overflow, et ça marche. Mais quand on comprend ce que fait chaque paramètre, on débloque un éventail d'effets surprenant — de l'ombre d'élévation à peine perceptible sur une carte moderne jusqu'à un UI neumorphique complet et des boutons néon lumineux.

Pour expérimenter en lisant, le générateur CSS Box Shadow de ToolPal offre un éditeur visuel en temps réel avec export CSS en un clic.


La syntaxe décryptée

box-shadow: offset-x offset-y blur-radius spread-radius color;

Chaque paramètre en détail :

offset-x — Décalage horizontal de l'ombre. Positif → droite ; négatif → gauche.

offset-y — Décalage vertical. Positif → bas (standard pour une source lumineuse au-dessus) ; négatif → haut.

blur-radius — Flou de l'ombre. 0 donne un bord net ; les valeurs élevées créent des ombres plus douces et diffuses.

spread-radius — Agrandit ou rétrécit l'ombre. Valeurs positives → plus grand que l'élément ; négatives → plus petit. Optionnel (défaut : 0).

color — Couleur de l'ombre. Utilisez rgba() ou hsla() pour contrôler la transparence. Le noir pur (#000) tend à paraître boueux.

Une ombre minimale :

.card {
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}

Le mot-clé inset

Ajouter inset au début crée une ombre intérieure plutôt qu'extérieure :

.input {
  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.1);
}

Les ombres intérieures sont idéales pour :

  • Les champs texte et textareas (aspect enfoncé, en creux)
  • Les états de bouton pressé
  • Les états « pressés » en neumorphisme

Ombres multiples : couches pour le réalisme

La fonctionnalité la plus sous-utilisée de box-shadow est l'empilement de plusieurs ombres séparées par des virgules :

.realistic-card {
  box-shadow:
    0 1px 1px rgba(0, 0, 0, 0.08),
    0 2px 4px rgba(0, 0, 0, 0.06),
    0 4px 8px rgba(0, 0, 0, 0.05),
    0 8px 16px rgba(0, 0, 0, 0.04);
}

Cette approche multicouche imite le fonctionnement des vraies ombres. Une seule grande ombre paraît souvent plate ou artificielle. Plusieurs petites ombres avec une opacité décroissante produisent quelque chose qui se lit comme véritablement tridimensionnel.


Effets UI pratiques

1. Élévation de carte (style Material Design)

Le Material Design de Google a popularisé le concept d'éléments UI à différentes « élévations » — plus l'élévation est haute, plus l'ombre est grande et diffuse.

/* État normal */
.card {
  box-shadow:
    0 1px 3px rgba(0, 0, 0, 0.12),
    0 1px 2px rgba(0, 0, 0, 0.24);
  transition: box-shadow 0.2s ease;
}

/* État survol */
.card:hover {
  box-shadow:
    0 14px 28px rgba(0, 0, 0, 0.25),
    0 10px 10px rgba(0, 0, 0, 0.22);
}

2. Ombres douces (design minimaliste moderne)

La tendance récente privilégie des ombres plus douces et diffuses avec une faible opacité :

.soft-card {
  background: white;
  box-shadow:
    0 20px 60px rgba(0, 0, 0, 0.06),
    0 4px 16px rgba(0, 0, 0, 0.04);
}

Pour des ombres colorées aux teintes de votre marque :

.indigo-card {
  background: white;
  box-shadow: 0 8px 32px rgba(99, 102, 241, 0.15);
}

3. Effets de lueur pour le mode sombre

Les lueurs sont simplement des ombres sans décalage, avec un grand flou et une couleur saturée :

.glow-button {
  background: #6366f1;
  box-shadow: 0 0 20px rgba(99, 102, 241, 0.6);
}

.glow-button:hover {
  box-shadow: 0 0 30px rgba(99, 102, 241, 0.8);
}

Pour un effet néon, empilez plusieurs lueurs de couleurs différentes :

.neon-element {
  box-shadow:
    0 0 5px #fff,
    0 0 20px #ff00ff,
    0 0 60px #ff00ff;
}

4. Neumorphisme

Le neumorphisme (ou « Soft UI ») est une tendance design devenue populaire vers 2020. Il utilise deux ombres — une claire et une sombre — sur un élément ayant la même couleur de fond que son conteneur :

body {
  background: #e0e5ec;
}

.neumorphic-card {
  background: #e0e5ec;
  border-radius: 12px;
  box-shadow:
    8px 8px 16px #b8c0cc,
    -8px -8px 16px #ffffff;
}

État pressé :

.neumorphic-button:active {
  box-shadow:
    inset 4px 4px 8px #b8c0cc,
    inset -4px -4px 8px #ffffff;
}

Limites du neumorphisme : Fonctionne uniquement sur des fonds grisâtres. Pose de vrais problèmes d'accessibilité — le faible contraste rend difficile la distinction des éléments interactifs.

5. Ombres nettes (design rétro/audacieux)

Supprimer le flou donne une ombre nette et décalée — un effet rétro classique qui revient à la mode dans les designs graphiques audacieux :

.retro-card {
  background: white;
  border: 2px solid #000;
  box-shadow: 6px 6px 0 #000;
}

.retro-card:hover {
  transform: translate(-2px, -2px);
  box-shadow: 8px 8px 0 #000;
}

6. Remplacement de l'anneau de focus

box-shadow est souvent utilisé comme alternative visuellement plus soignée aux contours par défaut du navigateur pour les états de focus :

.button:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.5);
}

Erreurs courantes

Utiliser le noir pur (#000) directement : Ça paraît presque toujours faux. Commencer par rgba(0, 0, 0, 0.1) à rgba(0, 0, 0, 0.3).

Trop de flou, une seule couche : Une seule ombre 0 20px 60px rgba(0,0,0,0.3) ressemble souvent à une tache. Empiler 2 à 4 couches.

Ignorer la couleur de fond : Le neumorphisme se casse si la couleur de fond de l'élément ne correspond pas au conteneur.

Ne pas exploiter le spread-radius négatif : Un spread négatif rétracte l'ombre, permettant de la rendre visible seulement d'un côté :

/* Ombre uniquement en bas */
.bottom-shadow {
  box-shadow: 0 8px 8px -6px rgba(0, 0, 0, 0.3);
}

Considérations de performance

box-shadow se rend en dehors de la couche de compositing du navigateur, déclenchant des repaints lors des changements. Pour la plupart des UIs, c'est parfaitement bien. Mais animer des ombres sur de nombreux éléments simultanément ou sur de grandes surfaces peut provoquer des saccades.

Utiliser filter: drop-shadow() pour l'accélération GPU :

/* Version filter (compositing GPU possible) */
.card {
  filter: drop-shadow(0 4px 16px rgba(0, 0, 0, 0.2));
}

filter: drop-shadow() a un avantage majeur : il fonctionne sur les formes irrégulières et les éléments transparents (SVG, PNG avec transparence). Inconvénient : pas de inset, pas d'ombres multiples par virgule, pas de spread-radius.


Aide-mémoire

/* Élévation de carte subtile */
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);

/* Carte Material Design */
box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);

/* Multicouche réaliste */
box-shadow: 0 1px 2px rgba(0,0,0,0.07), 0 4px 16px rgba(0,0,0,0.05);

/* Effet de lueur */
box-shadow: 0 0 20px rgba(99, 102, 241, 0.6);

/* Neumorphisme */
box-shadow: 8px 8px 16px #b8c0cc, -8px -8px 16px #ffffff;

/* Ombre nette rétro */
box-shadow: 4px 4px 0 #000;

/* Anneau de focus */
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.5);

/* Ombre uniquement en bas */
box-shadow: 0 8px 8px -6px rgba(0, 0, 0, 0.3);

/* État pressé intérieur */
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15);

Pour conclure

box-shadow s'apprend en cinq minutes pour les bases, mais révèle des astuces des années après. Les points clés :

  1. Empiler plusieurs ombres au lieu d'une seule grande
  2. Utiliser rgba() avec une faible opacité — pas de noir absolu
  3. inset pour les champs et les états pressés
  4. Spread négatif pour les ombres directionnelles
  5. Pour les animations critiques, envisager filter: drop-shadow()

Expérimenter dans le générateur CSS Box Shadow est le moyen le plus rapide d'intégrer ces patterns.

Questions Fréquentes

Partager

XLinkedIn

Articles associés