Menu

CSS !important: come funziona e quando usarlo

!important fa vincere una dichiarazione sulle dichiarazioni normali, qualunque sia la loro specificità. Scopri esattamente cosa batte, cosa lo batte, come funziona la specificità sotto il cofano e i modi più puliti per vincere un conflitto di stili.

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

Cosa fa !important

Aggiungere !important dopo un valore fa vincere quella dichiarazione su ogni dichiarazione normale della stessa proprietà sullo stesso elemento. La specificità del selettore e l'ordine nel sorgente non contano più.

Senza !important vincerebbe il selettore ID e il testo sarebbe blu. Cancella !important nell'editor per vederlo.

Sintassi

selector {
  property: value !important;
}

Va dopo il valore e prima del punto e virgola. Si applica solo a quella dichiarazione, non all'intera regola. Funziona anche nelle proprietà abbreviate (margin: 0 !important; rende importanti tutti e quattro i lati) e in un attributo style.

Chi batte chi

Per gli stili scritti dall'autore della pagina, dal più debole al più forte:

LivelloDichiarazioneEsempio
1Dichiarazione normale in un foglio di stilep { color: blue; }
2Dichiarazione normale in un attributo style<p style="color: blue">
3!important in un foglio di stilep { color: blue !important; }
4!important in un attributo style<p style="color: blue !important">

All'interno dello stesso livello decide la specificità, poi l'ordine in cui compaiono le dichiarazioni: vince quella scritta dopo.

Questo è l'unico uso quotidiano legittimo di !important: sovrascrivere uno stile inline che non puoi modificare, come quello scritto da un widget di terze parti.

Quando entrambe le dichiarazioni sono !important

!important contro !important torna alle regole normali: vince la specificità più alta e, a parità, vince la dichiarazione scritta dopo.

Ecco come !important si alimenta da solo: appena una regola lo usa, la regola che deve sovrascriverla deve usarlo anche lei, e la specificità ricomincia a salire.

La specificità CSS in una tabella

La specificità è il peso di un selettore. Conta tre numeri:

ColonnaCosa contaSelettore di esempioSpecificità
ASelettori ID#nav(1,0,0)
BClassi, attributi, pseudo-classi.btn, [type="text"], :hover(0,1,0) ciascuno
CSelettori di tipo, pseudo-elementip, ::before(0,0,1) ciascuno
nessuna*, combinatori (>, +, ~, spazio)*, ul > linon aggiungono niente

Confronta prima la colonna A; solo a parità guarda la B, poi la C. Quindi #nav a (1,0,1) batte .menu .item .link a (0,3,1): un ID pesa più di qualsiasi numero di classi.

Capire questa tabella è ciò che ti permette di evitare !important: la maggior parte dei problemi del tipo "il mio CSS non si applica" dipende da una regola più specifica altrove, visibile nel pannello Styles dei DevTools con la tua dichiarazione barrata.

Alternative più pulite

  • Eguaglia la specificità, poi affidati all'ordine. Carica il tuo foglio di stile dopo quello della libreria e usa un selettore specifico almeno quanto il suo.
  • Abbassa la specificità dell'altra regola con :where(). Tutto quello che sta dentro :where() conta zero, quindi gli stili di base scritti così sono facili da sovrascrivere.
  • Usa una variabile CSS come aggancio. Un componente che legge var(--btn-bg) si può personalizzare senza combattere con i suoi selettori. Vedi le variabili CSS.

Impostare !important da JavaScript

element.style.color = 'red !important' non funziona: il valore non è valido e viene ignorato. Usa setProperty con un terzo argomento:

el.style.setProperty('color', '#f59e0b', 'important');

Errori comuni

  • Metterlo nel posto sbagliato. color: !important red; non è valido; va dopo il valore.
  • Usarlo in @keyframes. Le dichiarazioni marcate !important dentro i keyframe vengono ignorate.
  • Risolvere ogni conflitto con lui. Trova la regola vincente nei DevTools ed eguaglia o abbassa la sua specificità.
  • Aspettarsi che agisca su un'altra proprietà. color: red !important non fa niente per background.
  • Dimenticare che un !important inline batte il tuo. Nessuna regola nei fogli di stile della pagina può sovrascrivere style="color: red !important"; modifica l'attributo stesso, per esempio con JavaScript.

Domande frequenti

Cosa fa !important in CSS?

Dà a una dichiarazione la priorità su ogni dichiarazione normale della stessa proprietà sullo stesso elemento, a prescindere dalla specificità del selettore o dall'ordine. Scrivilo dopo il valore: color: red !important;.

Come si sovrascrive !important?

Con un'altra dichiarazione !important che abbia una specificità più alta, oppure la stessa specificità e una posizione successiva nel foglio di stile. Uno style inline con !important batte ogni !important dei fogli di stile.

!important sovrascrive gli stili inline?

Sì. Una dichiarazione con !important in un foglio di stile batte una dichiarazione normale in un attributo style. Non batte una dichiarazione inline che sia anch'essa marcata !important.

Usare !important è una cattiva pratica?

Se lo usi per vincere una lotta di specificità, sì: la sovrascrittura successiva richiederà anche lei !important e il foglio di stile diventa difficile da modificare. È ragionevole per le classi di utilità che devono applicarsi sempre (come .hidden), per sovrascrivere stili inline di terze parti e nei fogli di stile dell'utente.

Come si calcola la specificità CSS?

Conta tre colonne: selettori ID, poi classi, attributi e pseudo-classi, poi selettori di tipo e pseudo-elementi. Confronta colonna per colonna partendo dalla prima, quindi #nav a (1,0,1) batte .menu .item a (0,2,1). Il selettore universale * e i combinatori non aggiungono niente.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA