Selettori e cascata
Quando due regole danno allo stesso elemento colori diversi, il CSS non tira a indovinare. Confronta i selettori, e un id batte qualsiasi numero di classi.
Scegliere gli elementi
Un selettore è uno schema che individua elementi nella pagina. I più semplici li scelgono per nome dell'elemento, per classe o per id. p è un selettore di tipo e individua tutti i paragrafi. .note è un selettore di classe e individua tutti gli elementi con class="note"; un elemento può avere più classi separate da spazi, e una classe può essere usata su molti elementi. #intro è un selettore di id e individua l'unico elemento con id="intro". *, il selettore universale, individua tutto.
p { line-height: 1.5; } /* every p */
.note { background: #fff4d6; } /* class="note" */
#intro { font-size: 20px; } /* id="intro" */
h1, h2 { font-weight: 600; } /* group: h1 and h2 */
nav a { text-decoration: none; } /* a anywhere inside nav */
ul > li { margin: 4px 0; } /* li that is a direct child of ul */
a:hover { text-decoration: underline; }
input[type="email"] { width: 20em; }Combinare i selettori
Una virgola raggruppa selettori che condividono le stesse dichiarazioni, quindi h1, h2 dà stile a entrambi. Uno spazio è il combinatore discendente: nav a individua i link in qualunque punto dentro un nav, a qualsiasi profondità. > è più severo e individua solo i figli diretti. Scrivere due selettori semplici attaccati, senza spazio, come in a.active, significa che uno stesso elemento deve soddisfarli entrambi: un link che ha anche la classe active. I selettori di attributo, tra parentesi quadre, scelgono in base a un attributo, come input[type="email"].
Le pseudo-classi, scritte con un solo due punti, scelgono elementi in un certo stato o posizione: :hover mentre il puntatore ci passa sopra, :focus-visible quando l'elemento ha il focus da tastiera, :first-child quando è il primo figlio del suo genitore. Gli pseudo-elementi, scritti con due volte i due punti, danno stile a una parte di un elemento, come ::first-line o ::placeholder.
Quando le regole non sono d'accordo
Spesso più regole impostano la stessa proprietà sullo stesso elemento. La cascata, la C di CSS, decide quale vince. Lasciando da parte gli stili del browser e !important, due domande risolvono quasi tutti i casi. Primo: quale selettore è più specifico? La specificità si conta con tre numeri: gli id, poi le classi (compresi i selettori di attributo e le pseudo-classi), poi i nomi degli elementi. #menu a vale 1-0-1, .active vale 0-1-0 e nav a vale 0-0-2. I numeri si confrontano da sinistra, quindi un id batte qualsiasi numero di classi. Secondo: se la specificità è uguale, vince la regola che viene dopo nel foglio di stile.
Gli attributi style in linea battono qualsiasi selettore, e una dichiarazione marcata !important batte quelle normali. Sono soluzioni rapide che tentano, ma rendono più difficile la modifica successiva, perché l'unico modo per superarle è usarne ancora. Quasi tutti i gruppi di lavoro tengono la specificità bassa e uniforme, dando stile soprattutto con le classi, così l'ordine nel file basta per prevedere il risultato.
Ereditarietà
Alcune proprietà passano da genitore a figlio da sole. Imposta color o font-family su body e ogni paragrafo, elenco e cella di tabella al suo interno li riprende, a meno che una regola non imposti valori propri. Le proprietà legate al testo di solito si ereditano; quelle legate al riquadro, come width, padding, border e margin, no. Per questo un bordo su una sezione non compare intorno a ogni paragrafo che contiene. La parola chiave inherit obbliga una proprietà a copiare il valore del genitore.
Dai alle classi il nome di ciò che una cosa è, non di come appare. .warning ha ancora senso quando il designer cambia il colore da rosso ad arancione; .red-text no. Gli id sono unici, quindi conviene riservarli alle destinazioni dei link e alle etichette dei moduli invece che allo stile: così la specificità resta bassa.
| selettore di tipo | p, h1, a: tutti gli elementi con quel nome |
| selettore di classe | .nome: tutti gli elementi con quella classe |
| selettore di id | #nome: l'unico elemento con quell'id |
| combinatore discendente | Uno spazio: nav a = a in qualsiasi punto dentro nav |
| pseudo-classe | :hover, :focus-visible: uno stato o una posizione |
| specificità | id-classi-tipi, confrontati da sinistra |
| cascata | Le regole che decidono quale dichiarazione vince |
| ereditarietà | Le proprietà del testo passano da genitore a figlio |
- Quale selettore individua
<p class="note">?- .note
- #note
- note
- Che cosa individua
nav a?- I link in qualsiasi punto dentro un nav
- Gli elementi nav e tutti i link
- Solo i link figli diretti di nav
- Che cosa fa
h1, h2?- Applica la regola sia a h1 sia a h2
- Individua h2 dentro h1
- Non individua nulla
- Qual è la specificità di
#menu .item a?- 1-1-1
- 0-2-1
- 1-0-2
.a.b.c(0-3-0) e#x(1-0-0) impostano colori diversi sullo stesso elemento. Quale vince?- #x
- .a.b.c
- The one written later
- Due regole hanno la stessa specificità. Quale vince?
- Quella che viene dopo nel foglio di stile
- Quella che viene prima
- Nessuna delle due
- Quale proprietà si eredita in modo predefinito?
- color
- border
- padding
- Quale pseudo-classe dà stile a un elemento che ha il focus da tastiera?
- :focus-visible
- :hover
- :first-child
- Che cosa individua
a.active?- Un link che ha la classe active
- Qualsiasi elemento con classe active dentro un link
- Tutti i link e tutti gli elementi .active
- Perché evitare !important per le correzioni di tutti i giorni?
- Si può superare solo con altri !important, quindi le modifiche successive diventano più difficili
- Non è CSS valido
- Rallenta il browser
- p, .classe, #id; la virgola raggruppa; lo spazio indica un discendente; > indica un figlio.
- Decide la specificità id-classi-tipi; a parità vince la regola che viene dopo.
- Le proprietà del testo si ereditano; quelle del riquadro no.
Fonti di questo corso (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
Consultato il: 2026-10-17