CSS: proprietà e layout delle tabelle

Le proprietà CSS per le tabelle ci permettono di definirne il layout con assoluta precisione. In questo articolo tratteremo non solo di tali proprietà, ma anche del modello di tabella CSS e del particolare tipo di layout che caratterizza le tabelle nel modello di formattazione visuale dei CSS.

Il modello di tabella CSS

Il modello di tabella CSS è basato sul modello di tabella HTML 4.0, in cui la struttura di una tabella segue parallelamente il suo layout visuale. Questo modello viene detto "a supremazia di riga", poichè gli autori specificano esplicitamente delle righe nel sorgente. Il modello di tabella CSS consiste di tabelle (table), didascalie (caption), righe (tr), gruppi di riga (tbody), colonne (col), gruppi di colonna (colgroup) e celle (td, th).

Per quei linguaggi (come XML) che non hanno elementi di tabella predefiniti, gli autori devono usare i seguenti valori della proprietà 'display':

table
In HTML: table. Specifica una tabella di blocco.
inline-table
In HTML: table. Specifica una tabella inline.
table-row
In HTML: tr. Specifica una riga di celle.
table-row-group
In HTML: tbody. Specifica che l'elemento raggruppa una o più righe.
table-header-group
In HTML: thead. Specifica che l'elemento raggruppa una o più righe, ma viene visualizzato prima di tutte le altre righe, gruppi di riga e dopo ogni didascalia superiore.
table-footer-group
In HTML: tfoot. Specifica che l'elemento raggruppa una o più righe, ma viene visualizzato dopo tutte le altre righe, gruppi di riga e prima di ogni didascalia inferiore.
table-column
In HTML: col. Specifica una colonna di celle.
table-column-group
In HTML: colgroup. Specifica che l'elemento raggruppa una o più colonne.
table-cell
In HTML: td, th. Specifica una cella di tabella.
table-caption
In HTML: caption. Specifica una didascalia di tabella.

Colonne

Le seguenti proprietà si applicano alle colonne e ai gruppi di colonna:

'border
Si applica solo se 'border-collapse' è impostato su 'collapse' per la tabella.
'background'
Si applica solo se celle e righe hanno sfondi trasparenti.
'width'
Imposta la larghezza minima per la colonna.
'visibility'
L'unico valore che ha effetto è 'collapse'. In questo caso nessuna cella della colonna viene rappresentata.

La proprietà 'caption-side'

'caption-side'
Valore: top | bottom | inherit
Iniziale: top
Si applica a: elementi 'table-caption'
Ereditata: si
Percentuali: N/A
Media: visuale
Valore calcolato: come specificato

Questa proprietà specifica la posizione del box della didascalia rispetto al box della tabella. I valori sono:

top
Posiziona il box della didascalia sopra il box della tabella.
bottom
Posiziona il box della didascalia sotto il box della tabella.

Questi sono i valori della revisione CSS 2.1. I CSS 2 descrivevano proprietà differenti, che saranno ampliate nei CSS 3. Esempio:


caption {caption-side: bottom; text-align: left}

Per allineare orizzontalmente il contenuto di caption, si usi la proprietà 'text-align'.

La proprietà 'table-layout'

'table-layout'
Valore: auto | fixed | inherit
Iniziale: auto
Si applica a: elementi 'table' e 'inline-table'
Ereditata: no
Percentuali: N/A
Media: visuale
Valore calcolato: come specificato

Questa proprietà specifica il tipo di algoritmo usato per una tabella. I valori sono:

fixed
Usa l'algoritmo fisso (1) per il layout di tabella.
auto
Usa un algoritmo automatico (2) per il layout di tabella.

Con l'algoritmo fisso (1), il layout della tabella non dipende dal contenuto delle celle, ma solo dalla larghezza della tabella, dalla larghezza delle colonne, e dalla spaziatura tra bordi o celle. La larghezza della tabella può essere specificata con la proprietà 'width'. Un valore di 'auto' implica l'uso dell'algoritmo automatico. La larghezza di ciascuna colonna viene determinata come segue:

  1. Un elemento di colonna con un valore di 'width' diverso da 'auto' imposta la larghezza per quella colonna.

  2. Altrimenti, una cella nella prima riga con larghezza diversa da 'auto' determina la larghezza per quella colonna. Se la cella di estende su più di una colonna, la larghezza viene divisa tra le colonne.

  3. Tutte le restanti colonne si dividono equamente lo spazio orizzontale rimanente (meno bordi o spaziatura tra celle).

Con l'algoritmo automatico (2), la larghezza della tabella viene definita dalla larghezza delle colonne e dei bordi. Le specifiche affermano che i browser possono usare qualsiasi altro algoritmo, anche se i risultati sono diversi. Nella pratica, la larghezza della tabella è determinata dalla quantità di contenuto delle celle.

Esempio:


table {table-layout: fixed; width: 500px}
td {width: 100px}

La proprietà 'border-collapse'

'border-collapse'
Valore: collapse | separate | inherit
Iniziale: separate
Si applica a: elementi 'table' e 'inline-table'
Ereditata: si
Percentuali: N/A
Media: visuale
Valore calcolato: come specificato

Questa proprietà seleziona un modello di bordi per la tabella. Il valore 'separate' imposta il modello a bordi separati, in cui le celle adiacenti sono separate tra di loro. Il valore 'collapse', invece, seleziona il modello a bordi collassati, in cui le celle adiacenti non sono separate tra di loro e i loro bordi si uniscono per formare un unico bordo. Esempio:


table {border-collapse: collapse; border: 1px solid #000}

La proprietà 'border-spacing'

'border-spacing'
Valore: <length> <length>? | inherit
Iniziale: 0
Si applica a: elementi 'table' e 'inline-table'
Ereditata: si
Percentuali: N/A
Media: visuale
Valore calcolato: due lunghezze assolute

Quando si usa il modello a bordi separati, questa proprietà specifica la distanza che separa i bordi delle celle adiacenti. Se si specifica una sola lunghezza, questa imposta la spaziatura orizzontale e verticale. Con due lunghezze si impostano prima la spaziatura orizzontale e poi quella verticale. I valori non possono essere negativi. Esempio:


table {
border-collapse: separate;
border: 1px solid #000;
border-spacing: 3px 4px
}

Nota: Come impostazione predefinita, tutti i browser applicano una spaziatura di 2px tra i bordi delle celle. In alcuni casi, anche nel modello a bordi collassati appare un valore diverso dallo 0 iniziale, per cui bisogna forzare i browser a non mostrare spazi con la dichiarazione 'border-spacing: 0'.

La proprietà 'empty-cells'

'empty-cells'
Valore: show | hide | inherit
Iniziale: show
Si applica a: elementi 'table-cell'
Ereditata: si
Percentuali: N/A
Media: visuale
Valore calcolato: come specificato

Nel modello a bordi separati, 'empty-cells' controlla la resa dei bordi e degli sfondi intorno alle celle prive di contenuto visibile. Le celle vuote e le celle con 'visibility: hidden' ricadono in questa categoria. Il valore 'show' mostra i bordi e gli sfondi per queste celle, mentre il valore 'hide' impedisce che questo avvenga. Esempio:


table {empty-cells: hide}

Nota su Internet Explorer per Windows

Internet Explorer 7 (ed inferiori) non supporta nessuno dei valori della proprietà 'display' per le tabelle, eccetto 'table-header-group', ma solo in standard mode. Inoltre non vengono supportate le proprietà 'caption-side', 'border-spacing' ed 'empty-cells'.

Torna su