Corso di CSS / Tabelle CSS: bordi, dimensioni e table-layout
Il layout delle tabelle CSS distribuisce lo spazio delle colonne secondo le regole di dimensionamento della tabella e il contenuto. table-layout: auto considera il contenuto delle celle, mentre il layout fisso può rendere il dimensionamento delle colonne più prevedibile quando la tabella ha una larghezza esplicita.
Separare la larghezza della tabella e il padding delle celle
table { width: 100%; border-collapse: collapse; }
th, td { padding: 12px; border: 1px solid #aaa; text-align: start; }
width: 100% indica alla tabella di dimensionarsi in base alla larghezza del suo contenitore. Lo spazio all'interno della cella è impostato su padding e il bordo su border. border-collapse: collapse è un metodo per visualizzare i bordi delle celle adiacenti unendoli. Impostare la larghezza della tabella e inserire interruzioni di linea nel contenuto sono operazioni separate.
Una tabella con width: 100% non si adatta sempre al contenitore. Contenuti che non possono andar a capo o una larghezza minima elevata possono far sì che la tabella reale o il contenuto della cella risulti più largo. Nelle tabelle dati tipiche, è sicuro lasciare l'altezza delle celle crescere per adattarsi alla lunghezza della frase. Se si imposta un'altezza fissa, è necessario verificare il troncamento quando il testo aumenta di dimensione o si aggiunge contenuto.
Assegna le colonne in base al loro contenuto
<colgroup>
<col style="width: 30%;">
<col style="width: 70%;">
</colgroup>
L'esercizio suddivide il nome breve dell'articolo e la descrizione lunga in due colonne. Il rapporto 30:70 riserva più spazio alla descrizione. Se i dati effettivi consistono in date, prezzi, descrizioni lunghe, ecc., distribuiscili in base al ruolo di ciascuna colonna. Se il posizionamento automatico predefinito è sufficientemente leggibile, non è necessario forzare il rapporto.
Quando si specifica una percentuale dell'intera colonna, come mostrato qui, imposta la somma al 100%. Non considerare la dichiarazione della larghezza del colgroup come un risultato finale che deve essere applicato in ogni circostanza. Il layout automatico funziona insieme alla dimensione minima del contenuto e ai calcoli della tabella. Si prega di fare riferimento alla descrizione del colgroup in MDN.
Confronta layout automatico e layout fisso
| valore | Calcolo della larghezza della colonna | Cose da controllare nei contenuti lunghi |
|---|---|---|
| table-layout: auto | Calcola in base ai contenuti delle celle | Valori lunghi possono far diventare grandi tabelle o colonne. |
| table-layout: fixed | Usa la larghezza specificata della tabella, della colonna e della prima riga, ecc. | Il contenuto lungo nelle celle delle righe successive può traboccare o essere troncato |
Il layout della tabella fisso richiede una larghezza della tabella specificata; width: auto non produce il calcolo fisso previsto. Qui entrambe le tabelle usano width: 100% e lo stesso gruppo di colonne, differendo solo in table-layout. Se una cella taglia il testo, controlla separatamente le condizioni di a capo e di ellissi. Vedi MDN: layout della tabella, Overflow CSS, testo lungo a capo e puntini di sospensione.
I dati seguenti contengono codici di prenotazione lunghi che vogliamo visualizzare senza interruzioni di riga. L'esempio completo applica nowrap·hidden·ellipsis a questa cella in modo identico in entrambe le tabelle. Il layout automatico può essere ampliato per riflettere lo spazio dei valori lunghi, e il layout fisso può essere ridotto all'interno di una colonna specifica. Il testo originale è fornito per intero in un paragrafo separato, quindi puoi controllare anche il codice troncato.
| articolo | spiegazione |
|---|---|
| Cosa ti serve | Porta una bottiglia d'acqua e scarpe comode. |
| codice di prenotazione | GARDEN-VISIT-RESERVATION-2026-ABCDEFGHIJKLMNOPQRSTUVWXYZ |
| Informazioni sulla visita | Anche se le frasi di informazioni lunghe si estendono su più righe, l'altezza della cella viene aumentata per adattarsi al contenuto. |
Scorri la regione della tabella su schermi stretti
.table-scroll { overflow-x: auto; }
table { width: 100%; min-width: 32rem; }
Se la dimensione del font radice è 16px, allora 32rem corrispondono a 512px. Se la larghezza disponibile sullo schermo è inferiore a quella, la tabella manterrà la sua larghezza minima e solo l'area genitore scorrerà orizzontalmente. Questo deve essere distinto dallo scorrere l'intera pagina orizzontalmente. I 32rem nell'esercizio servono solo a scopo di confronto per queste due colonne e non sono intesi come larghezza minima per tutte le tabelle. Verifica che su uno schermo stretto le colonne restino raggiungibili, seguendo i controlli della lezione Verificare CSS responsive con larghezza, zoom e tastiera.
Se la tua tabella è piccola e ancora leggibile, puoi abbassare o rimuovere la larghezza minima. Al contrario, comprimere più colonne e valori lunghi può renderli difficili da leggere. Determina dai dati effettivi se le colonne semantiche possono essere abbreviate, risolte con interruzioni di riga o se è necessario un movimento orizzontale. Su mobile, istruzioni come “Puoi spostarti orizzontalmente” possono essere utili.
Il contenitore scorrevole ha tabindex="0", role="region", un nome descrittivo accessibile e un contorno del focus visibile. Premi Tab per entrare e usa i tasti freccia per raggiungere l’ultima colonna. Una tabella che non necessita di scorrimento non richiede automaticamente un ulteriore tab stop. Vedi MDN: overflow.
Esegui il confronto completo della tabella
Salva e apri il codice sottostante come UTF-8 in tables.html. Usa le stesse tre righe e la stessa proporzione di colonne 30:70, così puoi confrontare le differenze tra i layout. Il codice di prenotazione è un dato fittizio per la pratica del layout.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Table sizes and long content</title>
<style>
body { margin: 16px; color: #333; font: 16px/1.6 sans-serif; }
.table-scroll { max-width: 640px; overflow-x: auto; margin-block: 16px; }
.table-scroll:focus-visible { outline: 3px solid #9b5d00; outline-offset: 3px; }
table { width: 100%; min-width: 32rem; border-collapse: collapse; }
th, td { padding: 12px; border: 1px solid #aaa; text-align: start; }
.auto { table-layout: auto; }
.fixed { table-layout: fixed; }
.token { font-family: monospace; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.original { max-width: 640px; overflow-wrap: anywhere; }
</style>
</head>
<body>
<h1>Automatic and fixed table layout</h1>
<h2>table-layout: auto</h2>
<div class="table-scroll" role="region" aria-label="Auto Batch Comparison Table" tabindex="0"><table class="auto"><colgroup><col style="width: 30%;"><col style="width: 70%;"></colgroup><thead><tr><th scope="col">item</th><th scope="col">explanation</th></tr></thead><tbody><tr><th scope="row">What to bring</th><td>Bring a water bottle and comfortable shoes.</td></tr><tr><th scope="row">reservation code</th><td class="token">GARDEN-VISIT-RESERVATION-2026-ABCDEFGHIJKLMNOPQRSTUVWXYZ</td></tr><tr><th scope="row">Visitor Information</th><td>Even if long information sentences span multiple lines, the cell height is increased to match the content.</td></tr></tbody></table></div>
<h2>table-layout: fixed</h2>
<div class="table-scroll" role="region" aria-label="Fixed batch comparison table" tabindex="0"><table class="fixed"><colgroup><col style="width: 30%;"><col style="width: 70%;"></colgroup><thead><tr><th scope="col">item</th><th scope="col">explanation</th></tr></thead><tbody><tr><th scope="row">What to bring</th><td>Bring a water bottle and comfortable shoes.</td></tr><tr><th scope="row">reservation code</th><td class="token">GARDEN-VISIT-RESERVATION-2026-ABCDEFGHIJKLMNOPQRSTUVWXYZ</td></tr><tr><th scope="row">Visitor Information</th><td>Even if long information sentences span multiple lines, the cell height is increased to match the content.</td></tr></tbody></table></div>
<p class="original">Full reservation code: GARDEN-VISIT-RESERVATION-2026-ABCDEFGHIJKLMNOPQRSTUVWXYZ</p>
</body>
</html>
- Restringi la finestra e controlla la larghezza di entrambe le tabelle. Le tabelle fisse sono almeno 512px con una base di 16px, e le tabelle automatiche possono essere più larghe per riflettere codici più lunghi. Entrambe le tabelle dovrebbero muoversi orizzontalmente nell'area in cui sono contenute, non attraverso la pagina.
- Sposta il focus sull'area della tabella fissa usando Tab e controlla l'ultima colonna con il tasto freccia a destra. Su schermi piccoli, verifica anche se puoi muoverti orizzontalmente con il dito. Quando termini lo scorrimento, torna completamente a sinistra.
- Nella regola .fixed cambia table-layout da fixed ad auto. Dopo aver verificato come cambiano la larghezza delle colonne e della tabella con gli stessi dati, ripristinalo su fixed.
- Cambia white-space di .token in normal e aggiungi overflow-wrap: anywhere. Verifica se il codice lungo va a capo aumentando l'altezza della cella, poi torna alla dichiarazione originale.
- Cambia il rapporto delle colonne a 40:60. Confronta lo spazio nella colonna delle voci brevi con i ritorni a capo nella colonna descrizione. Ripristinalo al 30:70 originale e controlla su uno schermo ampio e con testo ingrandito.
Se le proporzioni non sembrano come previsto, controlla il layout della tabella e la larghezza della tabella specificata, la larghezza minima e le condizioni di a capo per le stringhe lunghe. Se il movimento orizzontale non funziona, assicurati di specificare overflow-x sul contenitore esterno e non sulla tabella stessa. Se scegli di abbreviare le parole, dovresti essere in grado di leggere altrove il testo originale importante.




