CSS :not() Pseudo-Classe
La pseudo-classe CSS :not() seleziona e stilizza gli elementi che non corrispondono a un elenco di selettori. Scopri di più con esempi pratici.
La pseudo-classe CSS :not() seleziona ogni elemento che non corrisponde al selettore passato come argomento. Poiché inverte una corrispondenza, è anche chiamata pseudo-classe di negazione.
Questa pagina spiega cosa fa :not(), quando usarla, come influisce sulla specificità e le insidie più comuni — con esempi modificabili ed eseguibili.
Cos'è :not()
:not() è una pseudo-classe funzionale: accetta un selettore come argomento e corrisponde a qualsiasi elemento che l'argomento non seleziona. Gli argomenti supportati includono:
- Selettore di tipo (ad es.,
p,span) - Selettore di classe (ad es.,
.element) - Selettore di ID (ad es.,
#header) - Selettore di pseudo-classe (ad es.,
:last-child,:first-of-type) - Selettore di attributo (ad es.,
[type="text"]) - Il selettore universale (
*)
In Selectors Level 3 l'argomento doveva essere un singolo selettore semplice. Selectors Level 4 lo ha esteso per accettare un elenco separato da virgole e selettori composti o complessi, quindi nei browser moderni è possibile scrivere :not(.a, .b) o :not(ul li.first).
Quando usarla
Usa :not() quando è più conciso descrivere ciò che vuoi escludere piuttosto che elencare tutto ciò che vuoi includere:
- Stilizzare ogni elemento di lista tranne l'ultimo:
li:not(:last-child). - Stilizzare ogni link che non è esterno:
a:not([target="_blank"]). - Aggiungere spaziatura tra elementi fratelli senza margine finale:
.item:not(:first-child) { margin-top: 1rem; }. - Disabilitare lo stile per una variante:
.btn:not(.btn-ghost) { background: #8ebf42; }.
Note importanti
- Il selettore
:not()funziona con le pseudo-classi, ma non supporta gli pseudo-elementi. - La parola chiave
:not()di per sé non aggiunge specificità — la aggiunge solo il suo argomento. Quindi:not(.foo)ha la stessa specificità di.foo(0, 1, 0), e un semplice:not(p)pesa quantop(0, 0, 1). Questo rende:not()meno costosa di una classe aggiuntiva equivalente e può sorprendere nelle battaglie di override. :not(.foo)corrisponde a qualsiasi cosa non sia.foo, inclusi<html>e<body>. Abbinala sempre a un contesto comeul li:not(.foo)per evitare che si applichi all'intero documento.- Il selettore
:not()si applica a ogni elemento che non corrisponde all'argomento, non solo a un singolo elemento. - Un
:not()vuoto —:not()senza nulla all'interno — è non valido e l'intera regola viene ignorata.
Versione
Sintassi
Sintassi CSS :not()
selector:not(argument) {
css declarations;
}Esempio della pseudo-classe :not():
Esempio di codice CSS :not()
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
p {
color: #666;
}
:not(p) {
color: #8ebf42;
}
</style>
</head>
<body>
<h2>:not() selector example</h2>
<p>Lorem Ipsum is simply dummy text</p>
<p>Lorem Ipsum is simply dummy text</p>
<div>Lorem Ipsum is simply dummy text</div>
<a href="https://www.w3docs.com" target="_blank">Link to W3docs</a>
</body>
</html>Nell'esempio seguente è presente un elenco non ordinato con una singola classe sul tag <li>.
Esempio della pseudo-classe :not() con il tag <li>:
Altro esempio di codice CSS :not()
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.text-blue {
color: blue;
}
ul li:not(.text-blue) {
color: #8ebf42;
}
</style>
</head>
<body>
<h2>:not() selector example</h2>
<ul>
<li>List item 1</li>
<li class="text-blue">List item 2</li>
<li>List item 3</li>
</ul>
</body>
</html>Passare un elenco di selettori (Selectors Level 4)
I browser moderni consentono di escludere più selettori contemporaneamente separandoli con virgole all'interno di un singolo :not(). La regola seguente colora ogni elemento di lista tranne quello attenuato e quello attivo:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
li {
color: #8ebf42;
}
li:not(.muted, .active) {
font-weight: bold;
}
</style>
</head>
<body>
<h2>:not() with a selector list</h2>
<ul>
<li>Highlighted item</li>
<li class="muted">Muted item</li>
<li class="active">Active item</li>
<li>Highlighted item</li>
</ul>
</body>
</html>Questo è equivalente alla versione più vecchia e verbosa li:not(.muted):not(.active), che puoi usare se devi supportare browser molto datati.
Selettori correlati
- CSS Selectors — il riferimento completo dei tipi di selettori.
:first-childe:last-child— combinali con:not()per gestire la spaziatura.:nth-child()— un altro modo per selezionare un sottoinsieme di elementi fratelli.