Vi è mai capitato di voler ottenere tramite CSS un layout che ricordi quello dei tradizionali quotidiani cartacei? Per chi volesse cimentarsi con i CSS3, sono già a disposizione alcuni generatori di CSS3 che consentono di testare uno dei nuovi moduli che dispone il testo su più colonne: CSS multi-columns
Vediamo di seguito come funziona questo modulo e quali sono i browser compatibili con CSS3 Columns.
CSS3 Columns
Attualmente solo Firefox, Safari e Chrome sono compatibili con il multi-columns. Mozilla utilizza il prefisso speciale moz-
, mentre l’implementazione per Safari utilizza il prefisso -webkit
, che abbinati alle regole ufficiali, permettono di creare layout multi-columns:
.columns { -moz-column-count: 3; -moz-column-gap: 1em; -moz-column-rule: 1px solid black; -webkit-column-count: 3; -webkit-column-gap: 1em; -webkit-column-rule: 1px solid black; column-count: 3; column-gap: 1em; column-rule: 1px solid black; }
I browser ad oggi compatibili sono:
- Firefox 1.5+
- Safari 3+
- Chrome
- IE 9
Di seguito nel dettaglio ecco cosa abbiamo appena specificato per dividere il layout in colonne.
Column-count: come definire il numero di colonne
Abbiamo impostato column-count:3
per dividere il div
che contiene il testo in tre colonne di uguale larghezza. Abbiamo inoltre specificato uno spazio tra le colonne, il column-gap:1em
, che agisce come la proprietà padding
, aumentando notevolmente la leggibilità. Notiamo che l’altezza delle colonne si adatta al contenuto di testo e che, aumentando il numero dei caratteri o la dimensione del testo, essa si adatterà per contenerlo. Di seguito il codice CSS3 che dovremo scrivere:
column-count: 3; column-gap: 1em;
Column-width: impostare la larghezza delle colonne
Un altro modo per definire le colonne è impostare solo il column-width
(e, come per l’esempio precedente, il column-gap
). Per esempio, defininendo un column-width
di 200px, tutte le colonne avranno 200 pixel di larghezza: il browser calcola di conseguenza quante colonne di questa larghezza possono inserirsi nell’elemento contenitore, e le crea in base a questo valore. Anche in questo caso, l’altezza delle colonne è definita dal contenuto testuale. Ecco cosa dobbiamo scrivere:
column-width: 200px; column-gap: 1em;
Column-rule: dividere le colonne con dei filetti
La proprietà column-rule
agisce come una sorta di border
tra le colonne. Questa regola ha infatti le stesse proprietà del border
: (larghezza, stile e colore), e come per esso, possono essere scritte tramite "shorthand":
/*Shorthand per column-rule*/ column-rule:1px solid black; /*che equivale a:*/ column-rule-color: #000; column-rule-style: solid; column-rule-width: 1px;
Column-span: intestazione su più colonne
Questa proprietà non è ancora supportata da nessun browser.
Ecco cosa imposteremo nei fogli di stile con la regola CSS3 per espandere il titolo su più colonne::
/*Settiamo il numero delle colonne: n | all*/ column-span: all;
Colonne CSS3 cross-browser: Columnizer jQuery
Come abbiamo potuto notare, siamo ancora lontani dal poter utilizzare nella pratica la proprietà CSS3 multi-columns. Il framework jQuery ci mette però a disposizione un plugin che fa esattamente quanto abbiamo visto fin’ora. Ecco cosa dobbiamo fare: scarichiamo Columnizer jQuery Plugin e colleghiamolo alla nostra pagina HTML da dividere in colonne, così:
<script type="text/javascript" src="script/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="script/jquery.autocolumn.min.js"></script>
Scriviamo poi in pagina il nostro contenuto, agganciandovi una classe, per esempio columns
:
<h1>CSS3 e jQuery multi-column module</h1> <div class="columns"> <p>The Columnizer jQuery Plugin will automatically layout your content in newspaper column format. You can specify either column width or a static number of columns. And, of course, it’s easy to use!</p> </div>
Adesso agganciamo il plugin a questa classe, così:
$(document).ready (function() { $('.columns').columnize({columns:2}); });
Ecco cosa succede: il plugin suddivide il contenuto in div
ai quali assegna una classe column
: alla prima aggancia la classe first
, all’ultima la classe last
.
jQuery e le colonne ad altezza uguale
Terminiamo con un ottima funzione che permette di impostare uguale altezza per elementi flottanti, semplicemente includendo questo script e agganciandolo al .mioElementoFloattante
:
$(document).ready(function(){ function equalHeight(group) { tallest = 0; group.each(function() { thisHeight = $(this).height(); if(thisHeight > tallest) { tallest = thisHeight; } }); group.height(tallest); } ; equalHeight($(".mioElementoFloattante")); });
Di questa funzione è stato realizzato anche un plugin.
Letture consigliate
jQuery plugin: Easy List Splitter
NetTuts: Quick Tip: The Multi-Column CSS3 Module
CSS3 Multi-Column Thriller
CSS3 Multi-column layout module
Smart Columns w/ CSS & jQuery
CSS3 multi-column: pagina di test
Multi-column layout: CSS3 Previews
W3C Multi column
CSS3 multiple columns
A list apart: css3 multicolumn
Equal Height Columns with jQuery
Few-column list
Implementare i CSS3 con jQuery