Colonnes multiples CSS
Optional Advanced vient de couvrir les image sprites — une feuille, beaucoup de tuiles. Cette session est un autre outil optionnel : les colonnes multiples. Pensez à un journal, pas à une barre d’outils. Vous demandez à CSS de verser un long article dans deux ou trois filets verticaux. Vous ne placez pas des cartes indépendantes sur une Grid.
Réponse directe
Le layout multi-colonnes CSS découpe un bloc de contenu fluide — en général un long texte — en colonnes de journal. Vous fixez le nombre (column-count), une largeur confortable (column-width), la gouttière (column-gap) et éventuellement un filet vertical (column-rule). Texte, listes et contenu en ligne remplissent la première colonne, puis la suivante. Servez-vous-en pour du long copy. Pour la navigation, les paquets de cartes et la coquille de page, restez sur Flexbox ou Grid afin que chaque boîte reste une unité entière.
Pourquoi les colonnes existent
Les lignes trop longues se lisent mal. Les magazines ont résolu ça avec plusieurs colonnes plus courtes sur une page. CSS a repris l’idée pour le web : un élément, un flux de texte, un repli automatique en colonnes. Ce n’est pas Flexbox (une rangée ou colonne d’items) ni Grid (une carte bidimensionnelle de zones). Le multi-colonnes est un outil de fragmentation — le navigateur peut couper un paragraphe à la frontière de colonne si vous ne l’en empêchez pas.
Nombre : « je veux trois colonnes »
column-count demande un chiffre. Le navigateur partage la largeur du contenant entre ces colonnes (moins les gouttières) :
.article {
column-count: 3;
max-width: 60rem;
}
Sur un article large, vous voyez trois filets. Sur un téléphone étroit, trois colonnes maigres deviennent illisibles — couplez avec une media query, ou préférez column-width pour que le nombre baisse quand l’espace manque.
Largeur : « chaque colonne à peu près comme ça »
column-width est un indice, pas une cage de pixels. Le navigateur crée autant de colonnes d’au moins cette largeur que la place le permet :
.article {
column-width: 16rem;
max-width: 60rem;
}
Si la boîte fait ~48rem plus gouttières, vous verrez peut-être trois colonnes ; si elle rétrécit, deux puis une. C’est en général plus calme qu’un column-count: 3 figé sur chaque viewport. Vous pouvez poser les deux : le nombre est un maximum, la largeur un minimum confortable. Le raccourci columns est d’abord la largeur puis le nombre, par exemple columns: 16rem 3.
Gouttière et filet
Les colonnes ont besoin d’air. column-gap est la gouttière. column-rule trace une ligne fine dedans (épaisseur, style, couleur — comme une bordure, mais sans prendre d’espace de layout extra comme le bord d’une boîte) :
.article {
column-width: 16rem;
column-gap: 2rem;
column-rule: 1px solid #cbd5e1;
}
Il existe des raccourcis partiels (column-rule-width, column-rule-style, column-rule-color). Gardez le filet discret ; c’est un séparateur de journal, pas un second design system.
Un titre qui s’étend
Un titre doit souvent occuper toute la largeur, les colonnes commençant en dessous. column-span: all sur un enfant le fait :
.article h2 {
column-span: all;
margin: 0 0 1rem;
}
.article {
column-count: 2;
column-gap: 1.5rem;
}
Au quotidien on utilise none et all. Le span est pour un titre, une figure d’accroche ou un encadré — pas pour chaque paragraphe.
Empêcher les boîtes de se couper
Une carte, une figure avec légende ou une citation a l’air cassée si la coupure de colonne la tranche. break-inside: avoid demande au navigateur de garder cette boîte dans une colonne quand il le peut :
.article figure,
.article .callout {
break-inside: avoid;
margin: 0 0 1rem;
}
Utile aussi : break-before / break-after dans des flux type impression, et l’ancien page-break-inside: avoid en repli. Vous ne gagnerez pas chaque combat — les très hautes boîtes débordent encore — mais l’objectif habituel est que la légende reste avec l’image. column-fill: balance (souvent la valeur par défaut) égalise les hauteurs ; auto remplit d’abord la première colonne (plus proche d’un saut de journal).
Colonnes vs Flex vs Grid
📊 Multi-column vs Flex vs Grid
| Tool | Job | Poor fit |
|---|---|---|
Multi-column (column-*) |
Long article, glossary, name list that should read like a newspaper | Card galleries, nav bars, full page shells |
| Flexbox | One-dimensional rows/columns of whole items (toolbar, chips, simple stacks) | Pouring a novel into three text streams |
| Grid | Two-dimensional page or component map (header / main / aside) | Replacing column-count on a <p> soup |
Sprites (background-position) |
Decorative icon tiles on a sheet | Laying out article text |
Les modules Flexbox et Grid ont déjà enseigné le placement d’items. Le multi-colonnes ne donne pas justify-content ni d’aires nommées. Il fait fluer un flux. Si chaque enfant doit rester un rectangle cliquable, utilisez Flex ou Grid.
Le chrome de page reste Flex ou Grid
Ne transformez pas tout le site en column-count: 3. En-tête, nav et paquet de cartes veulent des boîtes entières :
.site-header {
display: flex;
justify-content: space-between;
align-items: center;
}
.card-deck {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(14rem, 1fr));
gap: 1rem;
}
.prose {
column-width: 18rem;
column-gap: 1.75rem;
}
.prose peut être multi-colonnes. .card-deck ne devrait pas. Mélanger les deux sur le même élément coupe les figures et pose les boutons dans le mauvais filet.
Écrans étroits et ordre de lecture
Si les colonnes seraient plus fines qu’une ligne confortable (environ 12–16rem de texte), passez à une colonne. Lecteurs d’écran et clavier suivent l’ordre du document, pas « descendre une colonne puis la suivante » comme un balayage visuel — correct pour un article, gênant si vous simulez un tableau de widgets sans lien. En RTL, les colonnes se remplissent selon le mode d’écriture ; le filet reste dans la gouttière.
Essayez vous-même
- Enveloppez quelques paragraphes dans
.proseaveccolumn-count: 2et uncolumn-gap. - Passez à
column-width: 16remet redimensionnez la fenêtre — observez le nombre changer. - Ajoutez
column-rule: 1px soliden gris calme. - Placez un
<h2>aveccolumn-span: all. - Enveloppez une figure dans
break-inside: avoid. Puis appliquez le même CSS à une grille de cartes pour voir pourquoi Flex/Grid y est plus calme.
Erreurs fréquentes
- Utiliser le multi-colonnes comme galerie de cartes ou layout de page entière
- Forcer
column-count: 3sur téléphone jusqu’à trois mots par ligne - Oublier
column-gapet coller les filets - Laisser images et légendes se couper à la frontière de colonne
- Traiter les colonnes comme Flex : pas de
flex-growpour un flux de colonnes - Confondre avec les sprites — le sprite recadre un fond ; les colonnes fragmentent le texte
Résumé
- Le multi-colonnes verse un flux dans des colonnes de journal
column-countest un nombre ;column-widthun minimum confortable ; on peut combinercolumn-gapetcolumn-rulehabillent la gouttière ; titres aveccolumn-span: allbreak-inside: avoidgarde figures et encadrés entiers quand c’est possible- Flex et Grid restent maîtres du chrome de page et des paquets de cartes
- Optional Advanced continue ensuite avec le masquage (
masking)
🧠 Testez Vos Connaissances
Testez Vos Connaissances
Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet
📝 Instructions
- Lisez chaque question attentivement
- Sélectionnez la meilleure réponse pour chaque question
- Vous pouvez refaire le quiz autant de fois que vous le souhaitez
- Votre progression sera affichée en haut