Concepts de base pour la disposition multi-colonnes
La disposition sur plusieurs colonnes (« Multiple-column Layout » ou « multicol » en anglais) est un module de spécification pour organiser du contenu sur un ensemble de colonnes, à la façon des colonnes dans un journal imprimé. Dans ce guide, nous verrons comment fonctionne cette spécification et quelques cas d'exemples.
Concepts et terminologie
La disposition multi-colonnes se distinguent des autres dispositions CSS car elle fragmente le contenu, y compris les éléments descendants, en colonnes. Cela se produira de façon analogue en fragmentant sur des pages avec le module de spécification CSS Paged Media.
Les propriétés définies dans cette spécification sont :
column-width
column-count
columns
column-rule-color
column-rule-style
column-rule-width
column-rule
column-span
column-fill
column-gap
En ajoutant column-count
ou column-width
à un élément, on le transforme en conteneur multi-colonnes. Les colonnes sont des boîtes anonymes et sont décrites comme des « boîtes de colonne » dans la spécification.
Definir des colonnes
Afin de créer un conteneur multi-colonnes, il est nécessaire d'utiliser au moins une propriété column-*
(column-count
ou column-width
).
La propriété column-count
La propriété column-count
définit le nombre de colonnes sur lesquelles on veut afficher le contenu. Le navigateur affectera l'espace nécessaire à chaque boîte de colonne afin d'en créer le nombre indiqué.
Dans l'exemple qui suit, on utilise la propriété column-count
afin de créer trois colonnes au sein de l'élément .container
. Le contenu, y compris l'élément fils de .container
est alors divisé en trois colonnes.
Dans l'exemple qui précède, le contenu est intégré dans des paragraphes avec une mise en forme par défaut. Aussi, il y a une marge au dessus de chaque paragraphe. On peut voir comment cette marge décale la première ligne de texte vers le bas. Cela se produit car un conteneur multi-colonnes crée un nouveau contexte de formatage de bloc, ce qui signifie que les marges des éléments fils ne fusionnent pas avec les marges du conteneur.
La propriété column-width
La propriété column-width
est utilisé afin de définir la largeur optimale pour chaque boîte de colonne. Si on déclare une valeur pour column-width
, le navigateur calculera combien de colonnes de cette taille peuvent être intégrées puis répartira l'espace supplémentaire équitablement entre les colonnes. Aussi mieux vaut-il voir column-width
comme une largeur minimale plutôt que comme une largeur exacte, l'espace restant étant rajouté ensuite.
Il existe un seul cas où la boîte de colonne peut être plus petite que column-width
: lorsqu'il n'y a qu'une seule colonne et que l'espace disponible est inférieur à column-width
.
Dans l'exemple qui suit, on utilise la propriété column-width
avec une valeur de 200px et on obtient donc autant de colonnes de 200 pixels que possible avec l'espace restant partagé équitablement entre les différentes colonnes.
Utiliser column-count
et column-width
Si on définit les deux propriétés pour un conteneur multi-colonnes, column-count
agira comme un maximum pour le nombre de colonnes. Le comportement décrit avant pour column-width
aura bien lieu, jusqu'à ce que le nombre de colonnes décrit par column-count
soit atteint. Ensuite, aucune autre colonne ne sera ajoutée et l'espace restant sera réparti entre les colonnes existantes (et ce même si l'espace restant permettrait de rajouter une ou plusieurs colonnes de largeur column-width
).
Lorsqu'on utilise les deux propriétés ensemble, on peut obtenir un nombre de colonnes réel inférieur à la valeur fournie avec column-count
.
Dans l'exemple suivant, on utilise column-width
avec une valeur de 200px et column-count
avec une valeur de 2. S'il y a de l'espace pour plus de deux colonnes, on aura uniquement deux colonnes. S'il n'y a pas assez d'espace pour deux colonnes de 200 pixels, il n'y en aura qu'une.
La propriété raccourcie columns
La propriété raccourcie columns
peut être utilisée afin de définir à la fois column-count
et column-width
. Si on utilise une unité de longueur, la valeur sera utilisée pour column-width
, si on utilise un entier, la valeur sera utilisée pour column-count
. Les deux peuvent être définies simultanément en étant séparées d'un espace.
Ce fragment de code CSS donnera donc le même résultat que pour le premier exemple où column-count
vaut 3.
.container {
columns: 3;
}
Ce fragment de code CSS donnera le même résultat que pour le deuxième exemple où column-width
vaut 200px
.
.container {
columns: 200px;
}
Enfin, ce fragment de code CSS donnera le même résultat que le troisième exemple où les deux propriétés column-count
et column-width
sont définies.
.container {
columns: 2 200px;
}
Prochaines étapes
Dans ce guide, nous avons vu des cas d'utilisation simples avec une disposition multi-colonnes. Dans le prochain article, nous verrons comment mettre en forme chacune des colonnes.