Prerequisiti: sintassi CSS, selettori di classe e nozioni di dimensioni e spaziature.
Le proprietà CSS per bordi e ombre
Bordi e ombre aiutano a distinguere riquadri, evidenziare contenuti e separare sezioni. Il bordo fa parte del riquadro; il contorno e le ombre aggiungono effetti visivi senza occupare spazio nel layout.
La posizione del bordo
MARGINE → BORDO → PADDING → CONTENUTO
Il padding è lo spazio tra contenuto e bordo. Il margine è lo spazio esterno. Nell’impostazione predefinita box-sizing: content-box;, un elemento con width: 200px, padding: 20px e border: 3px ha una larghezza complessiva di 246 pixel, esclusi i margini: 200 + 40 + 6.
Negli esempi usiamo box-sizing: border-box;: larghezza e altezza dichiarate comprendono padding e bordo. Il riquadro misura normalmente 240 × 140 pixel; gli esempi di cerchio e pillola modificano queste misure.
riquadro viene selezionata con .riquadro. Sfondo, padding e margine rendono visibili i bordi e lasciano spazio alle ombre.1. Le proprietà fondamentali dei bordi
Un bordo si trova tra il padding e il margine. Per renderlo visibile occorre uno stile diverso da none o hidden e uno spessore maggiore di zero.
| Proprietà o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
border-style | Definisce l’aspetto della linea. Valori comuni: solid, dashed, dotted e double. Il valore iniziale è none. | HTMLCSS |
Il riquadro ha un bordo blu tratteggiato. Spessore e colore sono specificati per rendere confrontabili gli esempi. |
border-width | Imposta lo spessore. Accetta lunghezze non negative oppure thin, medium e thick. Non accetta percentuali. | HTMLCSS |
Il bordo è spesso 6 pixel. Lo spessore non produce un bordo visibile se border-style rimane none. |
border-color | Imposta il colore del bordo. Se non viene specificato, il colore iniziale è currentColor: il colore del testo dell’elemento. | HTMLCSS |
Il bordo è rosso. Il colore del testo non cambia. |
border | Proprietà abbreviata per spessore, stile e colore dei quattro lati. Le componenti omesse tornano ai valori iniziali. | HTMLCSS |
Con una dichiarazione otteniamo un bordo blu continuo spesso 3 pixel. |
2. Lati e stili diversi
Possiamo assegnare bordi diversi ai singoli lati oppure distribuire più valori tra alto, destra, basso e sinistra.
| Proprietà o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
border-top | Imposta spessore, stile e colore del solo bordo superiore. | HTMLCSS |
Compare soltanto una linea sopra il contenuto. |
border-right | Imposta il solo bordo destro. | HTMLCSS |
Compare una linea sul lato destro. |
border-bottom | Imposta il solo bordo inferiore. È utile, per esempio, per separare un titolo dal contenuto successivo. | HTMLCSS |
Compare una linea sotto il contenuto. |
border-left | Imposta il solo bordo sinistro. Può evidenziare una citazione o un avviso. | HTMLCSS |
Compare una linea a sinistra del contenuto. |
border-style: quattro valori | Con quattro valori l’ordine è alto, destra, basso, sinistra. La stessa distribuzione vale per border-width e border-color. | HTMLCSS |
I lati hanno stili differenti: continuo sopra, tratteggiato a destra, puntinato sotto e doppio a sinistra. |
border-width: due valori | Con due valori, il primo riguarda alto e basso; il secondo destra e sinistra. | HTMLCSS |
Il bordo è spesso 6 pixel sopra e sotto e 2 pixel sui lati. |
3. Angoli arrotondati
border-radius arrotonda gli angoli del riquadro, anche quando non è presente un bordo visibile. Può usare lunghezze e percentuali.
| Proprietà o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
border-radius | Con un solo valore assegna lo stesso raggio ai quattro angoli. Non modifica larghezza e altezza del riquadro. | HTMLCSS |
I quattro angoli sono arrotondati con un raggio di 18 pixel. |
border-top-left-radius | Arrotonda soltanto l’angolo superiore sinistro. Esistono proprietà analoghe per gli altri tre angoli. | HTMLCSS |
Soltanto l’angolo superiore sinistro è arrotondato. |
border-radius: quattro valori | L’ordine degli angoli è superiore sinistro, superiore destro, inferiore destro, inferiore sinistro. | HTMLCSS |
Sono arrotondati due angoli opposti. |
border-radius: 50% | Con un riquadro quadrato produce una forma circolare. Con un rettangolo produce una forma ellittica. | HTMLCSS |
Larghezza e altezza uguali producono un cerchio. |
border-radius: forma a pillola | Un raggio molto grande viene adattato dal browser allo spazio disponibile. | HTMLCSS |
Il riquadro assume una forma a pillola, con estremità arrotondate. |
4. Contorno esterno: outline
Il contorno viene disegnato senza occupare spazio nel layout. Può sovrapporsi ad altri elementi. È spesso usato per rendere visibile il focus durante la navigazione con tastiera.
| Proprietà o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
outline | Proprietà abbreviata per spessore, stile e colore del contorno. Si distingue dal bordo perché non modifica le dimensioni occupate nel layout. | HTMLCSS |
Il bordo blu è circondato da un contorno arancione tratteggiato. |
outline-offset | Imposta la distanza tra contorno e bordo. Un valore positivo allontana il contorno; un valore negativo lo sposta verso l’interno. | HTMLCSS |
Il contorno è separato dal bordo da 6 pixel di spazio. |
5. Ombre del riquadro
box-shadow aggiunge un’ombra al riquadro. Non occupa spazio nel layout e non modifica le dimensioni dell’elemento. Può creare ombre esterne, interne e multiple.
| Proprietà o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
box-shadow: spostamento | I primi due valori sono lo spostamento orizzontale e verticale. Valori positivi spostano l’ombra a destra e in basso; negativi a sinistra e in alto. | HTMLCSS |
L’ombra è netta, spostata di 8 pixel a destra e in basso. Non è stata assegnata una sfocatura. |
box-shadow: sfocatura | Il terzo valore è il raggio di sfocatura, non negativo. Con zero i bordi dell’ombra sono netti. | HTMLCSS |
L’ombra è sfocata e semitrasparente. rgba indica qui un nero con opacità 0,35. |
box-shadow: espansione | Il quarto valore è l’espansione: positivo ingrandisce l’ombra, negativo la restringe. È distinto dalla sfocatura. | HTMLCSS |
Un’ombra blu si estende intorno al riquadro senza spostamento orizzontale o verticale. |
box-shadow: inset | La parola inset trasforma l’ombra esterna in un’ombra interna. | HTMLCSS |
L’ombra compare lungo i bordi interni del riquadro. |
box-shadow: ombre multiple | Più ombre si separano con virgole. La prima elencata è disegnata sopra le successive. | HTMLCSS |
Una prima ombra crea profondità; la seconda, senza sfocatura, forma un anello azzurro esterno. |
6. Ombra del testo
text-shadow agisce sulle forme dei caratteri, mentre box-shadow agisce sul riquadro. Sono proprietà diverse.
| Proprietà o valore | Descrizione | Esempio HTML e CSS | Risultato |
|---|---|---|---|
text-shadow | Accetta spostamento orizzontale, spostamento verticale, sfocatura opzionale e colore. Non ha un parametro di espansione né il valore inset. | HTMLCSS |
L’ombra segue le lettere della frase, senza creare un’ombra intorno al riquadro. |
7. Leggere la sintassi delle ombre
.scheda {
box-shadow: 4px 6px 12px 2px rgba(0, 0, 0, 0.3);
}
| Componente | Valore | Significato |
|---|---|---|
| Spostamento orizzontale | 4px | L’ombra si sposta di 4 pixel a destra. |
| Spostamento verticale | 6px | L’ombra si sposta di 6 pixel in basso. |
| Sfocatura | 12px | Rende più morbido il bordo dell’ombra. |
| Espansione | 2px | Ingrandisce l’ombra prima della sfocatura. |
| Colore | rgba(0, 0, 0, 0.3) | Nero con opacità pari a 0,3. |
I due spostamenti sono necessari; sfocatura ed espansione sono opzionali e valgono zero se omesse. Se il colore non è specificato si usa currentColor. La parola inset può essere aggiunta per ottenere un’ombra interna.
Per rimuovere un’ombra usa box-shadow: none; oppure text-shadow: none;, in base alla proprietà interessata.
Distribuire i valori sui quattro lati
| Numero di valori | Esempio | Distribuzione |
|---|---|---|
| Uno | border-width: 2px; | Tutti i lati: 2px. |
| Due | border-width: 2px 4px; | Alto e basso: 2px; destra e sinistra: 4px. |
| Tre | border-width: 2px 4px 6px; | Alto: 2px; destra e sinistra: 4px; basso: 6px. |
| Quattro | border-width: 2px 4px 6px 8px; | Alto: 2px; destra: 4px; basso: 6px; sinistra: 8px. |
La stessa distribuzione si applica a border-style e border-color. Per border-radius, invece, i valori seguono gli angoli a partire da quello superiore sinistro, in senso orario.
Raggi orizzontali e verticali
La barra in border-radius separa i raggi orizzontali da quelli verticali:
.riquadro {
border-radius: 30px / 15px;
}
Ogni angolo ha un raggio orizzontale di 30 pixel e verticale di 15 pixel: l’arrotondamento è ellittico. Le percentuali dei raggi orizzontali dipendono dalla larghezza, quelle dei raggi verticali dall’altezza.
8. Contorni e navigazione con tastiera
Un contorno visibile aiuta a riconoscere il controllo che riceve il focus. Nell’esempio il pulsante mostra un contorno quando è selezionato tramite tastiera. Premi Tab fino a raggiungerlo.
HTML
<button type="button">Un pulsante di esempio</button>CSS
button {
margin: 20px;
padding: 12px 18px;
border: 2px solid #17365d;
border-radius: 8px;
background-color: #eef5ff;
color: #17365d;
}
button:focus-visible {
outline: 3px solid #b76b00;
outline-offset: 4px;
}Risultato interattivo
Il pulsante serve a osservare il focus e non esegue un’azione. L’ingresso nell’anteprima con Tab dipende anche dal browser.
9. Esempio completo: una scheda informativa
Combiniamo un bordo leggero, angoli arrotondati e un’ombra morbida. Il bordo sinistro evidenzia la scheda senza rendere tutto il contorno pesante.
HTML
<div class="scheda"><h2>Una scheda informativa</h2><p>Bordo, angoli e ombra aiutano a distinguere questo contenuto.</p></div>CSS
.scheda {
margin: 20px;
padding: 20px;
border: 1px solid #c5d4e4;
border-left: 6px solid #17365d;
border-radius: 12px;
background-color: white;
color: #17365d;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}Risultato
Differenze da ricordare
| Proprietà | Effetto | Occupa spazio nel layout? |
|---|---|---|
| border | Disegna il bordo intorno al padding. | Sì. Con border-box è compreso nelle dimensioni dichiarate. |
| outline | Disegna un contorno, normalmente all’esterno del bordo. | No. |
| box-shadow | Aggiunge un’ombra al riquadro. | No. |
| text-shadow | Aggiunge un’ombra alle lettere. | No. |
Problemi frequenti
- Il bordo non compare: verifica border-style e border-width. Scrivere soltanto border-color non è sufficiente.
- Il riquadro diventa più grande: controlla box-sizing. Con content-box, bordo e padding si aggiungono a width e height.
- Il bordo arrotondato non taglia il contenuto: border-radius non ritaglia automaticamente tutti gli elementi figli. Se serve, valuta overflow: hidden, tenendo conto che può nascondere anche contenuti o indicatori utili.
- L’ombra viene tagliata: controlla se un contenitore esterno usa overflow: hidden o un altro limite di ritaglio.
- Uno stile precedente scompare: una proprietà abbreviata come border reimposta anche le componenti omesse. Scrivere border: solid dopo aver impostato un colore può riportare quel colore a currentColor.
Per le tabelle HTML esiste anche border-collapse, che controlla se i bordi delle celle sono separati o condivisi. È una proprietà specifica delle tabelle, da approfondire insieme al loro layout.