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.
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.
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>
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
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
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.
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;
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:
Mentre questo รจ un filetto ridge. Anche in questo caso, per mostrarlo bene, lo abbiamo tracciato molto spesso:
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;