Come funziona box-shadow
La proprietà box-shadow disegna una o più ombre attorno al box di un elemento.
Ogni ombra si scrive in questo ordine:
box-shadow: [inset] spostamento-x spostamento-y [sfocatura] [espansione] colore;
- Spostamento orizzontale e verticale: quanto l'ombra si sposta a destra e in basso. Con valori negativi va a sinistra o in alto.
- Sfocatura: più è alta, più il bordo è sfumato. Con
0l'ombra ha il bordo netto. - Espansione: ingrandisce o riduce l'ombra prima di sfocarla. Un valore negativo la nasconde sotto l'elemento.
- Colore: quasi sempre nero o il colore dello sfondo con poca opacità, per esempio
rgba(0, 0, 0, 0.2). inset: l'ombra va all'interno dell'elemento, come se fosse incassato.
Più ombre sullo stesso elemento
Le ombre si separano con virgole e la prima sta sopra le altre. Combinare un'ombra corta e netta con una ampia e morbida dà un risultato molto più naturale di una sola ombra scura: è quello che fanno gli esempi Rialzata e A livelli.
box-shadow:
0 1px 2px rgba(0, 0, 0, 0.08),
0 8px 24px rgba(0, 0, 0, 0.12);
Ombre sulle immagini: box-shadow o drop-shadow
box-shadow segue la forma del box, compreso il suo border-radius, quindi è quello che
serve per foto e card. Se l'immagine è un PNG o un SVG con sfondo trasparente e vuoi che l'ombra
segua il contorno del disegno, usa il filtro drop-shadow():
img.logo { filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.3)); }
drop-shadow() non ha espansione né inset, e non accetta più livelli separati da virgole.
Consigli
- Usa opacità basse (tra 0,05 e 0,25): un'ombra nera al 50 % raramente sta bene.
- Per un'ombra solo in basso, combina uno spostamento verticale con un'espansione negativa:
0 8px 6px -6px. - In modalità scura le ombre si vedono appena: un bordo sottile o uno sfondo un po' più chiaro funzionano meglio.
- Per animare un'ombra, anima l'
opacitydi uno pseudo-elemento che la porta, non ilbox-shadowstesso: è molto più fluido.