Le multicolonnage c'est la répartition automatique du contenu d'une page ou d'un bloc dans plusieurs colonnes. Ce type de mise en page qui est la base de tous les journaux, revues et magazines, a été pris en charge par les CSS seulement à partir de la version 3 qui introduit des propriétés pour gérer le nombre de colonnes, leur largeur et l'espace qui les sépare (la gouttière).

Définir des colonnes

Le positionnement multicolonne s'applique aux éléments de type bloc, cellules de tableau ou bloc en-ligne.
Un élément multicolonne est défini par le W3C comme un élément dont la propriété column-count ou column-width n'a pas la valeur auto. Cet élément agit alors comme le conteneur de la disposition multicolonne.

Si on peut théoriquement spécifier column-count et column-width en même temps, l'algorithme utilisé pour calculer le nombre de colonnes utilisera seulement l'une ou l'autre des propriétés suivant les cas.

Un bloc multicolonne ne peut pas servir de conteneur pour des éléments en positionnement fixe (position: fixed) ou absolu (position: absolute).

Nombre de colonnes

column-count définit le nombre de colonnes que contient l'élément. La largeur des colonnes est automatiquement calculée par le navigateur.
Dans le cas ou la largeur de l'élément varie (suite à un redimensionnement de fenêtre par exemple), la largeur des colonnes est automatiquement agrandie ou rétrécie.

Exemple : nombre de colonnes
Fichier CSS : styles.css

Quand on redimensionne la fenêtre d'exemple, on voit que la largeur des 3 colonnes augmente automatiquement pour remplir tout l'espace du conteneur (ici le corps de la page).

Largeur des colonnes

column-width définit la largeur souhaitée des colonnes. La largeur peut être spécifiée avec toutes les unités CSS, mais ne peut pas être un pourcentage. Le navigateur va afficher dans le conteneur le plus de colonnes possible avec la largeur souhaitée. Pour remplir complétement le conteneur, la largeur pourra être plus ou moins adaptée par le navigateur.
Dans le cas ou la largeur de l'élément varie (suite à un redimensionnement de fenêtre par exemple), le nombre de colonnes dans le conteneur est automatiquement augmenté ou diminué.

Exemple : largeur des colonnes
Fichier CSS : styles.css

Quand on redimensionne la fenêtre d'exemple, on voit que le nombre de colonnes augmente (ou diminue) automatiquement pour remplir tout l'espace du conteneur (ici le corps de la page). La largeur des colonnes ne change pas.

Les gouttières

L'espace qui sépare 2 colonnes (la gouttière) est définit avec la propriété column-gap. La largeur de cet espace peut être spécifiée avec toutes les unités CSS, mais ne peut pas être un pourcentage. Toutes les gouttières dans un élément multicolonne auront la même largeur (pas d'individualisation possible).

Exemple : gouttières
Fichier CSS : styles.css

La grouttière peut être agrémentée d'un trait de séparation (ou liseré) qui est définit par 3 propriétés :

Ces trois propriétés acceptent les même valeurs que celles possible pour définir la bordure des boîtes.

La propriété column-rule est un raccourci pour les 3 propriétés et donc à privilégier.

Exemple : trait de séparation
Fichier CSS : styles.css

Si dans les colonnes des éléments comme des images sont trop larges, ils peuvent dépasser dans la colonne adjacente (à ce jour, cela dépend encore du navigateur).
Dans l'exemple suivant, l'image dans la 2ème colonne pourra ainsi déborder sur la 3ème colonne (Gecko) ou être tronquée (Webkit).

Exemple : contenu tronqué
Fichier CSS : styles.css

Contenu sur plusieurs colonnes

La propriété column-span permet de définir un élément qui s'étendra sur l'ensemble des colonnes de l'élément multicolonne.

Exemple : contenu sur plusieurs colonnes
Fichier CSS : styles.css

N'importe quel élément de type bloc du conteneur multicolonne peut être étendu sur l'ensemble des colonnes.
A remarquer que l'on ne peut pas étendre un élément sur seulement quelques colonnes : c'est toutes les colonnes (all) ou aucune (none par defaut).

Exemple : contenu sur plusieurs colonnes
Fichier CSS : styles.css

Equilibrer les colonnes

Le contenu des colonnes peut être équilibré avec la propriété column-fill. Par défaut, les colonnes seront remplies de façon séquentielle et auront différentes longueurs, mais la valeur balance permet de minimiser dans la mesure du possible les variations de longueur des colonnes.

L'exemple suivant montre 2 sections avec du contenu identique. La 2eme section est "équilibrée", mais aucune différence avec la 1ére section n'est notable.

Exemple : équilibrer le contenu des colonnes
Fichier CSS : styles.css

Gérer les changements de colonnes

Trois propriétés permettent de définir comment sont faits les changements de colonnes des éléments d'un conteneur multicolonne :

Parmi les valeurs possibles de ces 3 propriétés, celles à utiliser dans les conteneurs multicolonnes sont :

Dans l'exemple suivant, un saut de colonne est forcé après le 1er paragraphe et un autre avant le dernier paragraphe. Remarquez que pour répondre à ces demandes une quatrième colonne est ajoutée par le navigateur.
Sauf cas exceptionnel, nous vous conseillons de ne pas forcer les saut de colonnes et de laisser le navigateur les gérer de façon naturelle.

Exemple : changement de colonne
Fichier CSS : styles.css