back to top

Layout a colonne con CSS3

Uno degli aspetti che, da sempre, ha "creato grattacapi" agli sviluppatori di pagine web รจ la possibilitร  di impaginare il testo su piรน colonne. Grazie a CSS3, per fortuna, questa esigenza (apparentemente semplice) sta trovando una risposta concreta.

In quella che potremmo ormai considerare la "preistoria" dello sviluppo web si usano le tabelle con i bordi trasparenti, poi (layout tableless) sono arrivati i div posizionati in modo assoluto oppure flottanti, ma anche questi ultimi richiedevano un poโ€™ di lavoro e calcolo degli spazi disponibili. Finalmente CSS3 ha reso la creazione di layout su piรน colonne semplice ed immediata.

Pubblicitร 

Con poche righe di codice CSS, infatti, รจ possibile creare un layout a colonne, in modo semplice utilizzando la propreitร  column-count.

Facciamo subito una prova: supponiamo di voler disporre il testo di un div su tre colonne. Nel nostro div inseriremo del testo fittizio per verificare il risultato.

Il codice CSS che ci occorre รจ questo

#testo {
  column-count: 3;
  text-align:justify;
}

Ovviamente lโ€™allineamento giustificato non รจ obbligatorio. Il risultato รจ quello che vedete nella figura sotto.

il testo su tre colonne

Se si ridimensiona la finestra del browser le colonne, che sono tutte della stessa misura, si ridimensionano automaticamente e il testo scorre da una colonna allโ€™altra.

Per quanto possibile, le colonne sono automaticamente calibrate, cioรจ sono tutte della stessa lunghezza. Per forzare la calibrazione delle colonne, comunque, si puรฒ usare la proprietร  column-fill in questo modo:

column-fill: balanced;

In questa lezione vedremo altre due interessanti proprietร  di CSS3 relative al layout su colonne. Si tratta delle proprietร  column-break-before e coll-span.

Gestire i titoli e le interruzioni di colonna

Avendo applicato la suddivisione a colonne al testo di un div, รจ molto semplice aggiungere un titolo che si estende sullโ€™intera pagina, un poโ€™ come avviene nei giornali: basta lasciare il titolo al di fuori del div al quale abbiamo applicato la divisione a colonne. Tornando allโ€™esempio visto alla lezione precedente:

<h1>Questo รจ il titolo dell'articolo disposto sull'intera pagina</h1>
<div id="testo">Lorem ipsum dolor sit amet,...</div>
il testo su tre colonne e il titolo a pagina intera

Se poi si vuole disporre un titolo allโ€™interno delle colonne, viceversa, basta usare lโ€™apposito tag allโ€™interno del testo. Se lo si desidera, รจ possibile inserire una interruzione di colonna appena prima di un titolo (o di qualsiasi altro elemento). Basta usare la proprietร  column-break-before e assegnarle il valore always.

Proviamo ad inserire nel nostro testo un titolo <h2> preceduto da una interruzione di colonna

<h1>Questo รจ il titolo dell'articolo disposto sull'intera pagina</h1>
<div id="testo"><p>Lorem ipsum dolor sit amet,.....</p>
<h2>Titolo di livello 2</h2>
<p> Duis autem vel eum iriure .....</div>

Con una semplice regola di stile possiamo forzare unโ€™interruzione di colonna prima di ogni titolo <h2> presente tra le colonne in questo modo:

#testo h2 {
  column-break-before: always;
}

Ed ecco il risultato

interruzione di colonna

Estendere contenuto su piรน colonne

Abbiamo visto come creare una interruzione di colonna o un titolo a pagina intera creato al di fuori della struttura delle colonne. E se, invece, volessimo estendere un elemento, magari lo stesso titolo di prima, su piรน colonne?. Esiste la proprietร  coll-span che permette di estendere un elemento su tutte le colonne (all) o su un numero specifico di colonne.

Se cambiamo come segue la regola di stile che descrive i titoli di livello 2

#testo h2 {
  column-span: 2;
}

otteniamo questo risultato

elemento esteso su due colonne

Negli esempi che abbiamo visto, abbiamo lasciato che le colonne assumessero una dimensione automatica in funzione delle dimensioni del contenitore che le ospita. CSS3, perรฒ, permette anche di definire la larghezza delle colonne e quindi lasciare calcolare al browser il numero delle colonne di quella specifica larghezza che possono essere ospitate nel contenitore.

Tutto questo grazie alla proprietร  column-width, da usare come segue:

#testo {
  column-width: 200px;
}

In questo modo non รจ il numero delle colonne che ne determina la larghezza, ma, viceversa, รจ la larghezza che ne determina il numero.

il numero delle colonne รจ determinato dalla loro larghezza

Oltre alla larghezza delle colonne รจ possibile specificare la larghezza dello spazio fra una colonna e lโ€™altra. Questo si determina con la proprietร  column-gap.

Guardate come si trasforma la pagina aggiungendo queste proprietร  di stile per lโ€™elemento #testo

column-gap: 70px;
la larghezza fra le colonne modificata

Tenete presente che la finestra del browser non รจ stata ridimensionata. Se รจ fissata, come in questo caso la larghezza delle colonne, lโ€™aumento della distanza fra le colonne porta ad una riduzione del numero delle colonne. Se, invece, il numero delle colonne รจ fisso, allora le colonne vengono disegnate piรน strette.

La proprietร  column-rule

Per concludere la nostra panoramica tra le proprietร  CSS3 relative al design di un layout a colonne, dobbiamo ricordare che la nuova versione di CSS permette anche di inserire un "filetto" fra le colonne per marcarne la separazione. Si possono definire colore, spessore e stile del filetto.

Il colore รจ impostato dalla proprietร  column-rule-color, lo spessore, invece, si imposta con la proprietร  column-rule-width. Oltre ad un valore numerico, questa proprietร  accetta i valori thin, medium e thick che producono rispettivamente una linea sottile, media e spessa.

Per quanto riguarda lo stile, la proprietร  da usare รจ column-rule-style. I valori accettati sono quelli che si usano anche per definire lo stile dei bordi dei box:

  • dotted: crea un filetto puntinato;
  • dashed: crea un filetto tratteggiato;
  • solid: crea un filetto con una linea continua;
  • double: crea un filetto con una linea doppia;
  • groove: crea un filetto 3D scanalato. Lโ€™effetto dipende molto dal colore e dallo spessore della linea;
  • ridge: crea un filetto 3D increspato. Lโ€™effetto dipende molto dal colore e dallo spessore della linea;
  • inset: crea un filetto 3D incavato. Lโ€™effetto dipende molto dal colore e dallo spessore della linea;
  • outset: crea un filetto 3D aggettante. Lโ€™effetto dipende molto dal colore e dallo spessore della linea;

Una regola di stile non deve necessariamente usare tutte le proprietร  column-rule-color, column-rule-width e column-rule-style. Puรฒ applicarne anche solo una.

Di seguito mostriamo alcuni stili diversi di filetto.

Questo รจ un filetto groove. Per mostrarlo bene, lo abbiamo tracciato molto spesso:

un filetto groove

Mentre questo รจ un filetto ridge. Anche in questo caso, per mostrarlo bene, lo abbiamo tracciato molto spesso:

un filetto ridge

Notate che ridge รจ un poโ€™ lโ€™effetto contrario a groove. Come inset รจ il contrario di outset.

Tutte le proprietร  viste sopra possono essere gestite anche simultaneamente utilizzando la proprietร  generale column-rule (che funziona esattamente come la proprietร  background per la definizione simultanea di tutte le caratteristiche dello sfondo).

Vediamo un esempio di definizione della dimensione, dello stile e del colore del filetto:

column-rule: 3px outset #ff00ff;
Pubblicitร 
Massimiliano Bossi
Massimiliano Bossi
Stregato dalla rete sin dai tempi delle BBS e dei modem a 2.400 baud, ho avuto la fortuna di poter trasformare la mia passione in un lavoro (nonostante una Laurea in Giurisprudenza). Adoro scrivere codice e mi occupo quotidianamente di comunicazione, design e nuovi media digitali. Orgogliosamente "nerd" sono il fondatore di MRW.it (per il quale ho scritto centinaia di articoli) e di una nota Web-Agency (dove seguo in prima persona progetti digitali per numerosi clienti sia in Italia che all'estero).