Prerequisiti: sintassi CSS, selettori di classe e proprietà di testo, sfondi e bordi.
I colori in CSS
Un colore è un valore che possiamo assegnare a diverse proprietà. Per esempio, color cambia il testo, background-color lo sfondo e border-color il bordo. Lo stesso colore può essere descritto con notazioni diverse.
p {
color: #17365d;
background-color: #eef5ff;
border: 2px solid #17365d;
}
Questa pagina approfondisce i colori: non occorre imparare a memoria tutti i codici. È importante capire come interpretarli, scegliere una notazione e verificare il risultato nel browser.
Come leggere i campioni
Ogni riga contiene HTML, CSS completo e un risultato visivo isolato dagli stili del sito. Il fondo giallo dell’area rende visibile la trasparenza. Quando serve, impostiamo anche il colore del testo per mantenerlo leggibile.
1. Nomi dei colori
CSS riconosce una serie di nomi in inglese. Sono comodi per iniziare e per esempi semplici, ma non rappresentano tutte le sfumature possibili.
| Notazione o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
Nome del colore | Un nome riconosciuto dal linguaggio identifica un colore preciso. Non puoi inventare nomi come azzurro o blu. | HTMLCSS | Lo sfondo usa lightblue, equivalente a #add8e6. |
Colori di base | Esempi di nomi sono red, blue, green, black e white. Attenzione: green corrisponde a un verde più scuro di lime. | HTMLCSS | Il testo bianco è su uno sfondo green, equivalente a #008000. |
Altre sfumature | Nomi come navy, coral e rebeccapurple identificano sfumature definite, non famiglie di colori generiche. | HTMLCSS | Lo sfondo è viola: rebeccapurple equivale a #663399. |
2. Notazione esadecimale
La notazione esadecimale comincia con #. Nella forma a sei cifre, le prime due indicano il rosso, le successive il verde e le ultime il blu.
| Notazione o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
#RRGGBB | Ogni componente va da 00 a FF, cioè da 0 a 255. Le cifre disponibili sono 0–9 e A–F; maiuscole e minuscole sono equivalenti. | HTMLCSS | Un blu scuro composto da rosso 23, verde 54 e blu 93. |
#RGB | La forma breve espande ciascuna cifra ripetendola. #369 equivale a #336699, non a #030609. | HTMLCSS | Il campione usa lo stesso colore di #336699. |
#RRGGBBAA | Le ultime due cifre indicano l’alpha: 00 è completamente trasparente, FF è completamente opaco. | HTMLCSS | Il blu scuro ha un’alpha di circa 0,502. Il fondo giallo dell’area si vede attraverso il campione. |
#RGBA | La forma breve a quattro cifre espande tutte le componenti, inclusa quella di trasparenza. | HTMLCSS | Il valore equivale a #33669988, con un’alpha di circa 0,533. |
3. RGB e RGBA
RGB indica le componenti rosso, verde e blu. Nella notazione numerica abituale ciascun canale va da 0 a 255; si possono usare anche percentuali.
| Notazione o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
rgb() con virgole | La sintassi tradizionale separa le tre componenti con virgole. Il colore è opaco se non assegni una componente alpha. | HTMLCSS | È lo stesso colore di #17365d. |
rgb() con spazi | La sintassi moderna separa le componenti con spazi. Una barra / introduce l’alpha opzionale. | HTMLCSS | Lo stesso blu scuro è semitrasparente, con alpha pari al 50%. |
rgba() | La notazione tradizionale aggiunge una quarta componente per l’alpha. Rgba è un alias di rgb; le due funzioni non rappresentano modelli di colore diversi. | HTMLCSS | Il risultato equivale a rgb(23 54 93 / 50%). Solo lo sfondo è semitrasparente. |
RGB in percentuale | Zero percento indica assenza della componente; cento percento indica la componente massima. | HTMLCSS | Il campione è blu puro, equivalente a rgb(0, 0, 255) e #0000ff. |
4. HSL e HSLA
HSL descrive il colore tramite tonalità, saturazione e luminosità del modello. È utile per creare varianti di una stessa tonalità senza modificare separatamente i tre canali RGB.
| Notazione o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
hsl() | H è la tonalità, S la saturazione e L la luminosità. La tonalità si misura come angolo; saturazione e luminosità sono percentuali. | HTMLCSS | Un azzurro chiaro con tonalità 210°, saturazione 60% e luminosità 80%. |
Variare la luminosità | Mantenendo tonalità e saturazione, si possono produrre versioni più chiare o più scure. | HTMLCSS | La tonalità rimane 210°, ma la luminosità scende al 30% e il colore è più scuro. |
Variare la saturazione | La saturazione zero produce un grigio. Aumentandola il colore diventa più intenso, a parità di tonalità e luminosità. | HTMLCSS | Con saturazione zero si ottiene un grigio medio, indipendentemente dalla tonalità. |
Alpha con HSL | La sintassi moderna usa / per l’alpha. La forma tradizionale hsla() può usare quattro componenti separate da virgole. | HTMLCSS | Il campione è semitrasparente. Un equivalente tradizionale è hsla(210, 60%, 50%, 0.4). |
5. Valori speciali
Transparent e currentColor sono valori che si possono utilizzare nelle proprietà che accettano colori.
| Notazione o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
transparent | Indica un colore completamente trasparente. Non rende invisibili testo e bordo: modifica soltanto la proprietà alla quale è assegnato. | HTMLCSS | Il fondo giallo dell’area è interamente visibile dietro al testo. Il bordo blu resta visibile. |
currentColor | Rappresenta il valore di color dell’elemento. Permette a bordi, ombre o altre parti di seguire il colore del testo. | HTMLCSS | Testo e bordo usano lo stesso colore. Se cambi color, il bordo segue il nuovo valore. |
Leggere un codice esadecimale
#17 36 5d
R G B
17 → 1 × 16 + 7 = 23
36 → 3 × 16 + 6 = 54
5d → 5 × 16 + 13 = 93
Quindi #17365d e rgb(23, 54, 93) indicano lo stesso colore. Le lettere rappresentano valori da 10 a 15: A = 10, B = 11, C = 12, D = 13, E = 14 e F = 15.
| Nome | Esadecimale | RGB |
|---|---|---|
| black | #000000 | rgb(0, 0, 0) |
| white | #ffffff | rgb(255, 255, 255) |
| red | #ff0000 | rgb(255, 0, 0) |
| lime | #00ff00 | rgb(0, 255, 0) |
| blue | #0000ff | rgb(0, 0, 255) |
La ruota delle tonalità HSL
| Angolo | Tonalità di riferimento | Esempio |
|---|---|---|
| 0° o 360° | Rosso | hsl(0 100% 50%) |
| 60° | Giallo | hsl(60 100% 50%) |
| 120° | Verde | hsl(120 100% 50%) |
| 180° | Ciano | hsl(180 100% 50%) |
| 240° | Blu | hsl(240 100% 50%) |
| 300° | Magenta | hsl(300 100% 50%) |
Con luminosità 0% il risultato è nero e con 100% è bianco. La luminosità HSL non coincide con la luminanza usata per calcolare il contrasto né garantisce uguale luminosità percepita tra tonalità diverse.
6. Trasparenza del colore e opacity
La componente alpha modifica il colore al quale appartiene. Opacity, invece, riguarda l’intero elemento e i suoi contenuti come gruppo.
HTML
<div class="area">
<div class="sfondo-alpha">Solo lo sfondo è semitrasparente.</div>
<div class="intero-elemento">Anche testo e bordo sono semitrasparenti.</div>
</div>CSS
.area {
padding: 15px;
background-color: #fff0d1;
}
.sfondo-alpha, .intero-elemento {
padding: 15px;
margin-bottom: 15px;
border: 2px solid #17365d;
color: #17365d;
}
.sfondo-alpha {
background-color: rgb(23 54 93 / 20%);
}
.intero-elemento {
background-color: rgb(23 54 93);
opacity: 0.2;
}Risultato
Nel primo riquadro testo e bordo mantengono il loro colore pieno. Nel secondo tutto il gruppo è attenuato. Assegnare opacity: 1 a un figlio non annulla l’opacità applicata al gruppo del genitore.
7. Usare il colore nelle diverse proprietà
HTML
<div class="scheda"><h2>Una combinazione di colori</h2><p>Testo, sfondo, bordo e ombra usano valori coordinati.</p></div>CSS
.scheda {
margin: 20px;
padding: 20px;
color: #17365d;
background-color: #eef5ff;
border: 2px solid currentColor;
border-radius: 10px;
box-shadow: 0 4px 12px rgb(23 54 93 / 20%);
}Risultato
Color viene normalmente ereditato dai discendenti che non hanno un proprio valore applicabile. Background-color non è normalmente ereditato: lo sfondo di un figlio può sembrare uguale a quello del genitore semplicemente perché è trasparente.
Raccogliere la palette con proprietà personalizzate
Per riutilizzare gli stessi colori possiamo assegnare nomi con proprietà personalizzate CSS, dette anche variabili CSS:
:root {
--colore-testo: #17365d;
--colore-sfondo: #eef5ff;
--colore-accento: #b76b00;
}
.scheda {
color: var(--colore-testo);
background-color: var(--colore-sfondo);
border: 2px solid var(--colore-accento);
}
Le proprietà personalizzate cominciano con due trattini. Var() richiama il valore; non è il nome di una proprietà. Possiamo così cambiare un colore condiviso modificando un solo punto della palette.
8. Contrasto e leggibilità
La leggibilità dipende dalla combinazione tra testo e sfondo, non soltanto dal colore del testo. Due colori distinguibili in un campione possono essere troppo simili quando usati per una scritta piccola.
HTML
<div class="leggibile">Testo scuro su sfondo chiaro.</div><div class="poco-leggibile">Questo contrasto è volutamente debole.</div>CSS
.leggibile, .poco-leggibile {
margin: 15px;
padding: 15px;
background-color: white;
}
.leggibile {
color: #17365d;
}
.poco-leggibile {
color: #cccccc;
}Risultato
Il secondo campione mostra intenzionalmente una combinazione da evitare per il normale testo. Per misurare il contrasto utilizza un verificatore dedicato o gli strumenti del browser: l’occhio da solo non dà un rapporto numerico affidabile.
- Controlla testo normale, collegamenti e stati di hover e focus.
- Se lo sfondo è un’immagine o un gradiente, verifica anche le zone meno favorevoli dietro al testo.
- Non affidare informazioni soltanto al colore: accompagna un errore, una selezione o un esito con testo o altri indicatori.
- Se cambi lo sfondo, rivaluta anche il colore del testo.
Errori frequenti
- Il colore non cambia: controlla il selettore, la proprietà e le regole che possono prevalere.
- Il codice esadecimale è incompleto: le forme comuni supportate hanno 3, 4, 6 oppure 8 cifre dopo #.
- Il colore breve non corrisponde a quello lungo: #abc equivale a #aabbcc; puoi abbreviare solo quando ogni coppia ripete la stessa cifra.
- La trasparenza è inattesa: in un codice a otto cifre alpha si trova alla fine, dopo rosso, verde e blu.
- La sintassi è mescolata: scrivi rgb(23, 54, 93) oppure rgb(23 54 93 / 50%); evita di combinare virgole e barra nello stesso esempio.
- Una sfumatura HSL non appare ugualmente chiara a un’altra: lo stesso valore L non garantisce lo stesso contrasto o la stessa luminosità percepita.
CSS offre anche modelli come Lab, LCH, OKLab e OKLCH, utili per lavori più avanzati sul colore. Per questa introduzione concentriamoci su nomi, esadecimale, RGB e HSL.