Menu

Box-shadow CSS: sintassi, spread, inset ed esempi

box-shadow disegna ombre attorno al box di un elemento. Impara i cinque valori (x, y, blur, spread, colore), le ombre inset, come sovrapporre più ombre per una profondità realistica, gli anelli di focus fatti con spread e gli errori che rendono le ombre sporche.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Come funziona box-shadow

box-shadow dipinge un'ombra attorno al border box di un elemento. Segue border-radius, non occupa spazio nel layout e richiede almeno due valori: di quanto spostarla in orizzontale e in verticale.

La sintassi

box-shadow: [inset] <offset-x> <offset-y> [<blur>] [<spread>] [<color>];
ValoreSignificatoPredefinito
insetDisegna l'ombra dentro il box, come una zona premuta verso l'internoFuori
offset-xUn valore positivo sposta a destra, uno negativo a sinistraObbligatorio
offset-yUn valore positivo sposta in basso, uno negativo in altoObbligatorio
blurQuanto è morbido il bordo; non può essere negativo0 (un bordo netto)
spreadIngrandisce (positivo) o riduce (negativo) l'ombra0
coloreQualsiasi colore; di solito un nero semitrasparente rende meglioIl colore del testo

Il numero di lunghezze ne decide il significato: due sono gli offset, tre aggiungono il blur, quattro aggiungono lo spread. Prova:

Prova 0 0 0 4px #f59e0b (un anello), inset 0 0 12px #2563eb e -8px -8px 0 #16a34a.

Spread: anelli e ombre su un solo lato

Lo spread cambia la dimensione dell'ombra prima della sfocatura. Ne derivano due schemi:

  • Un anello: niente offset, niente blur, solo spread. A differenza di un bordo, non cambia le dimensioni dell'elemento, quindi è un buon indicatore di focus (:focus-visible { box-shadow: 0 0 0 3px #2563eb; }).
  • Un anello con uno stacco: sovrapponi uno spread bianco sotto uno colorato e più grande.
  • Un solo lato: sposta l'ombra verso il basso e riducila con uno spread negativo, così spunta solo sotto.

Ombre sovrapposte per una profondità realistica

Le ombre vere hanno una parte scura e netta vicino all'oggetto e una parte morbida e tenue più lontano. Due o tre livelli lo imitano molto meglio di un'unica grande sfocatura:

La prima ombra dell'elenco viene dipinta sopra. Usa per le ombre un nero semitrasparente o una tinta scura dello sfondo, mai un grigio pieno, così scuriscono qualunque cosa ci sia sotto.

Ombre inset

inset disegna l'ombra dentro il padding box, come se la superficie fosse premuta verso l'interno. È adatta a campi di testo, riquadri incassati e pulsanti premuti:

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%);
}

Un'ombra inset viene disegnata sopra lo sfondo ma sotto il contenuto. Le ombre che seguono la forma delle lettere invece del box sono text-shadow.

Errori comuni

  • Ombre nere pure e del tutto opache. Sembrano un contorno scuro. Usa un alfa tra il 10% e il 30%.
  • Un'unica enorme sfocatura per dare profondità. Sovrapponi un'ombra piccola e netta a una grande e morbida.
  • Un'ombra tagliata sul bordo. Un antenato con overflow: hidden la ritaglia; aggiungi padding all'antenato o sposta la regola di overflow.
  • Blur negativo. Non è valido e l'intera dichiarazione viene ignorata.
  • Animare box-shadow su molti elementi. Ridisegna a ogni fotogramma. Nelle pagine pesanti, anima invece la opacity di uno pseudo-elemento che porta l'ombra più grande.

Domande frequenti

Qual è la sintassi di box-shadow?

box-shadow: offset-x offset-y blur spread color;, per esempio box-shadow: 0 4px 12px 0 rgb(0 0 0 / 15%);. Solo i due offset sono obbligatori; aggiungi inset per disegnare l'ombra dentro il box.

Cosa fa spread in box-shadow?

Ingrandisce (valore positivo) o riduce (valore negativo) l'ombra prima della sfocatura. Un'ombra senza offset, senza blur e con uno spread di 3px è un anello pieno di 3px attorno all'elemento.

Come metto un'ombra solo sotto?

Spostala verso il basso e restringila con uno spread negativo, così i lati spariscono: box-shadow: 0 8px 6px -6px rgb(0 0 0 / 40%);.

box-shadow influisce sul layout?

No. Un'ombra non occupa spazio e non sposta gli altri elementi, ed è per questo che è un buon modo per aggiungere un anello di focus o un effetto di sollevamento all'hover senza spostamenti del layout. Può essere ritagliata da un antenato con overflow: hidden.

Posso avere più ombre box-shadow?

Sì, separale con virgole. La prima ombra viene disegnata sopra. Sovrapporre un'ombra piccola e netta a una grande e morbida dà un aspetto più naturale di un'unica grande ombra.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA