Come aggiungere un bordo a una tabella
Per impostazione predefinita le tabelle non hanno bordi. Aggiungili con il CSS: un border su ogni cella disegna la griglia, e border-collapse: collapse sulla tabella unisce ogni coppia di bordi vicini in una sola linea.
La scorciatoia border accetta uno spessore, uno stile e un colore, in qualsiasi ordine: 1px solid #6b7280. Mettila su th, td, non solo su table: un bordo sulla tabella disegna solo la cornice esterna.
border-collapse: separate vs collapse
border-collapse decide se le celle condividono i bordi.
| Valore | Risultato |
|---|---|
separate (predefinito) | Ogni cella ha il proprio bordo, con uno spazio tra le celle impostato da border-spacing |
collapse | Le celle vicine condividono un unico bordo; border-spacing viene ignorato |
Nella tabella separate vedi entrambi gli strati: la cornice blu della tabella e un riquadro color ambra separato attorno a ogni cella, con border-spacing tra loro. Cambia 6px in 0 e le celle si toccano, ma le linee restano doppie. Solo collapse le unisce.
Quando due bordi uniti si incontrano e sono diversi, vince il più spesso. A parità di spessore decide lo stile (double batte solid, che batte dashed e dotted), e a parità ancora il bordo della cella batte quello della riga, che batte quello della tabella. Ecco perché il bordo esterno della tabella collapse è color ambra e non blu: lì sia le celle sia la tabella hanno bordi solid da 2px, e vincono le celle.
Solo linee orizzontali, o solo linee interne
La maggior parte delle tabelle moderne non disegna tutte le linee. Due schemi comuni:
La seconda tabella toglie il bordo sul lato esterno di ogni cella di bordo. border-inline-start e border-inline-end indicano l'inizio e la fine della riga, quindi lo stesso CSS resta corretto nelle lingue da destra a sinistra, dove la prima cella sta dall'altro lato.
Angoli arrotondati della tabella
border-radius non fa niente su una tabella con border-collapse: collapse. Le tabelle arrotondate usano il modello separate senza spaziatura, e disegnano ogni linea una volta sola dando alle celle solo un bordo inferiore e uno finale:
Le due celle d'angolo dell'intestazione hanno un raggio proprio così lo sfondo grigio segue la curva. Senza, i loro angoli squadrati spuntano oltre il bordo arrotondato. Il raggio è di 9px, cioè i 10px della tabella meno il suo bordo da 1px, così le due curve combaciano.
Colore e spessore del bordo per ogni parte
I bordi possono cambiare a seconda della parte della tabella. I selettori su thead, tfoot e sulle singole righe impostano una linea più spessa sotto l'intestazione o sopra i totali:
Le linee da 3px vincono su quelle grigie da 1px dove si incontrano, seguendo le regole di collapse viste sopra. Per il resto della struttura della tabella (thead, tfoot, th), vedi tabelle HTML.
L'attributo border
I vecchi tutorial usano attributi sul tag <table>:
<table border="1" cellspacing="0" cellpadding="6">
I browser rispettano ancora border="1": disegna un bordo sulla tabella e su ogni cella, nel modello separate, che dà l'effetto dei bordi doppi. Tutti e tre gli attributi sono obsoleti in HTML5. Gli equivalenti CSS sono border sulle celle, border-spacing (o border-collapse: collapse) sulla tabella e padding sulle celle.
Errori comuni
- Bordo solo su
table. Ottieni una cornice senza linee interne. Aggiungi il bordo ath, td. - Dimenticare
border-collapse: collapse, e poi vedere linee doppie. border-radiusconborder-collapse: collapse. Il raggio viene ignorato.border-spacingconborder-collapse: collapse. La spaziatura funziona solo nel modello separate.- Bordi su
<tr>nel modello separate. Le righe non disegnano bordi se la tabella non è in collapse; dai lo stile alle celle. - Usare
border="1"nel codice nuovo. Funziona ancora, ma non può impostare un colore ed è obsoleto.
Domande frequenti
Come aggiungo un bordo a una tabella in HTML?
Usa il CSS sulla tabella e sulle sue celle: table { border-collapse: collapse; } th, td { border: 1px solid #999; }. Il bordo sulle celle disegna la griglia, e border-collapse: collapse unisce i bordi vicini in linee singole.
Perché la mia tabella ha i bordi doppi?
Per impostazione predefinita ogni cella disegna il proprio bordo con uno spazio tra una cella e l'altra (border-collapse: separate), quindi le celle vicine mostrano due linee. Imposta border-collapse: collapse sulla <table> per unirle in una.
L'attributo border della tabella è ancora valido?
<table border="1"> disegna ancora i bordi in tutti i browser, ma in HTML5 è obsoleto e non ti dà nessun controllo su colore o stile. Usa invece la proprietà CSS border.
Come arrotondo gli angoli di una tabella?
border-radius non ha effetto su una tabella con border-collapse: collapse. Usa border-collapse: separate con border-spacing: 0, metti il raggio sulla tabella e dai alle celle d'angolo un raggio corrispondente (border-start-start-radius e simili) così i loro sfondi non escono dagli angoli.
Come tolgo il bordo da una tabella?
Le tabelle non hanno bordi a meno che qualcosa non li aggiunga. Togli l'attributo border dal tag <table>, oppure imposta border: none su table, th, td per annullare un foglio di stile che li aggiunge.