Part Three — Grid and Layout Chapter Fifteen

Multi-column Layouts

Multiple columns are not simply more columns. They are a fundamentally different relationship between the reader and the text — one that must be chosen deliberately, not by default.

The decision to use multiple columns is not primarily a visual one. It is a decision about reading. A single column of text asks the reader to follow one continuous stream from top to bottom of the page, line by line, without lateral movement or comparison between parallel streams of information. Multiple columns change this fundamentally. They introduce lateral structure — the possibility of comparison, of parallel content, of information organised spatially rather than sequentially. This is a powerful capability, and like all powerful capabilities it can be used well or poorly. Most documents that use multiple columns should not. Most documents that would benefit from them use a single column instead.

This chapter gives you the criteria for making that decision clearly, the technical tools to implement multicolumn layouts in CSS, and the judgment to know which CSS mechanism — the CSS Multi-column specification or CSS Grid — is the right tool for each specific situation.

· · ·

When multiple columns are appropriate The decision framework

Multiple columns are appropriate when at least one of three conditions is true: the line length would otherwise be unacceptably long, the content benefits from spatial organisation, or the page format demands it.

Line length is the most common driver. As established in Chapter 12, a comfortable line of body text runs between 45 and 75 characters, with 66 as the approximate optimum. At typical body text sizes — 11 to 13 points — this corresponds to a column width of roughly 70 to 90 millimetres. A page wider than this cannot sustain a single column without lines becoming uncomfortably long. A landscape A4 page, a tabloid-format document, a wide-format presentation: these formats require multiple columns simply to maintain legible line lengths.

Content structure is the second driver. Some content is genuinely parallel — two versions of a text in different languages, a comparison of two sets of data, a document where notes and commentary run alongside the main text at matching vertical positions. This kind of content has an inherent spatial logic that multiple columns express naturally. Forcing it into a single column either loses the parallelism (by running the content sequentially) or creates awkward interleaving.

Page format requirements is the third. A reference book with many short entries, a dictionary, a bibliography, a price list: these are formats where the brevity of individual items and the density of information make a single column wasteful and navigationally inconvenient. Multiple short columns allow the reader to scan vertically without losing their place across a wide expanse of page.

When none of these conditions apply — when the line length is comfortable, the content is sequential, and the format is standard — a single column is almost certainly correct. The burden of proof for multiple columns is on the designer, not on the single column. The default should always be the simpler structure.

LINE TOO LONG — SPLIT IT PARALLEL CONTENT — COMPARE SHORT ENTRIES — SCAN → split into two columns ~100 chars/line → ~48 chars/line Main text ↔ commentary/translation Short entries scanned vertically

Figure 15.1 — Three valid reasons for multiple columns. Left: line length too long for a single column — splitting into two brings each line within the legibility range. Centre: genuinely parallel content — main text and commentary running side by side at matching vertical positions, a relationship a single column cannot express. Right: a reference format with many short entries — three narrow columns allow efficient vertical scanning without traversing a wide page. In each case, multiple columns solve a specific problem. Without the problem, a single column is the better choice.

· · ·

Column width, gutter, and readability The geometry of legible columns

Column width in a multicolumn layout is constrained from both sides. The upper limit is legibility: as established in Chapter 12, lines longer than about 75 characters are uncomfortable to read, because the eye must travel too far across the page before returning. The lower limit is also legibility: lines shorter than about 45 characters are awkward, because the eye returns too frequently, disrupting the reading rhythm and creating excessive hyphenation.

In practical terms, this means that for a typical body text typeface at 11–13pt, a column should be between approximately 55mm and 90mm wide. A narrower column than this produces short, choppy lines and excessive hyphenation. A wider column produces lines that are too long for comfortable reading and, if the text is justified, irregular word-spacing as the compositor (in our case, the browser's text engine) struggles to fill lines of inconsistent word count.

The gutter — the space between columns — must be wide enough that the reader's eye does not accidentally continue from the end of one column into the adjacent column. The minimum functional gutter width is roughly one em at the body text size — approximately 11pt at a 11pt body. The preferred width is between 1.5 and 2 ems. A gutter narrower than one em is a navigational hazard. A gutter wider than 2.5 ems begins to look like two unrelated columns rather than a coherent two-column layout. A column rule — a thin vertical line in the gutter — can be used to clarify the boundary when the gutter is on the narrow side, but it is not a substitute for adequate gutter width.

The relationship between column width and gutter also determines how many columns a given page can support. A 148mm-wide text area (A5 page with standard margins) can support two 60mm columns with a 28mm gutter — barely adequate. The same text area cannot support three columns of usable width. An A4 text area of approximately 160mm can support three narrow columns with generous gutters. Column count is not a free variable; it is determined by the page dimensions and the typographic requirements.

GUTTER TOO NARROW GUTTER CORRECT GUTTER TOO WIDE gutter: 4px (~0.3em) Eye may read across columns min. ≈ 1em gutter: 16px (~1.5em) Clear separation, comfortable reading ideal: 1.5–2em gap gutter: 56px (~5em) Columns feel unrelated; no visual connection between them

Figure 15.2 — Gutter width and its effect on column readability. Left: a 4px gutter — the columns are so close together that the eye may accidentally read across them rather than returning to the start of the next line. Centre: a 16px (approximately 1.5em) gutter — sufficient separation that the columns read as distinct while clearly related. Right: a 56px gutter — the columns are so far apart that they feel like two unrelated elements on the page rather than a coherent two-column layout. The gutter should be wide enough to prevent accidental cross-column reading, and no wider.

· · ·

Spanning elements across columns Headings, images, and pull quotes

Multi-column layouts gain much of their expressive power from the ability to span elements across some or all of the columns. A full-width heading that spans all columns provides a visual anchor above the text, clearly indicating that what follows belongs together. A wide image spanning all columns creates a moment of visual pause in the reading. A pull quote spanning both columns creates emphasis and page structure without requiring a full-width break in the content flow.

In the CSS Multi-column specification, spanning is controlled with column-span: all, which causes an element to span the full width of the multi-column container, creating a break in the column flow above and below the spanning element. This is the correct tool for full-width headings and cross-column images within a multi-column text flow.

The limitation of column-span is its binary nature: an element either spans all columns (column-span: all) or spans none (column-span: none, the default). There is no way to span two columns out of three, or to span a fraction of the column width. For more precise control over which tracks an element occupies — spanning two of three columns, spanning from column two to the right edge, placing an element in a specific column regardless of the text flow — CSS Grid is the correct tool, not CSS Multi-column.

Column spanning — live example column-span: all

The garden teaches the same lesson as the compositing room: beneath every apparently natural arrangement there is a structure, invisible until you look for it, that makes the whole coherent. You do not see the grid in a well-tended garden any more than you see the baseline grid in a well-typeset page.

My teacher used to say that the grid is what allows you to be free. Without a spatial system to push against, decisions become arbitrary. With one, every deviation is legible — the reader can tell that something is different because they know what the norm is.

A spanning pull quote sits across all columns — full width, a visual pause in the flow.

The planting calendar in the third chapter of this book lists forty-seven varieties by month of sowing. It is set in two columns, not one, because the entries are short and the list is long. A single column of forty-seven two-line entries would require the reader to traverse three-quarters of the page height to reach the middle of the list.

Two columns halve that distance and allow the reader to compare spring and autumn sowings without turning a page. The layout is a response to the content's nature, not an aesthetic preference.

Figure 15.3 — Column spanning in practice. A two-column text flow with a pull quote set to column-span: all. The text flows into both columns above the spanning element, then resumes below it. The spanning element reads as a visual break and emphasis point — a pause in the column flow that draws the eye before it returns to the continuing text. Note that the column content above the span is balanced — the browser distributes text evenly across both columns before the span.

· · ·

CSS Multi-column vs. CSS Grid Choosing the right tool

CSS provides two distinct mechanisms for multi-column layout, and understanding when to use each is one of the most practically important decisions in document CSS. They are not interchangeable, and they are not in competition — they solve different problems.

CSS Multi-column (the column-count and column-width properties) is designed for flowing text. You define the column structure and the browser distributes the content automatically, balancing the columns where possible and flowing excess content to the next page in a paginated document. You do not control which content lands in which column. The flow is automatic. This makes CSS Multi-column ideal for body text that you want to flow through multiple columns — a reference section, a bibliography, a continuous article in a two-column format. It is inappropriate when you need explicit control over which elements appear in which columns.

CSS Grid is designed for explicit placement. You define the column structure and then deliberately place each element in a specific position. The browser does not make placement decisions for you. This makes CSS Grid ideal when the spatial arrangement of elements matters independently of their source order — a page where a wide image must appear in specific columns regardless of where it falls in the text flow, or a layout where the relationship between elements in different columns must be preserved.

The practical decision rule is this: if the content should flow naturally and automatically through the columns, use CSS Multi-column. If specific elements need to occupy specific column positions, use CSS Grid. For a document that mixes both requirements — flowing body text and specifically placed figures — use CSS Multi-column for the text and CSS Grid for the page-level structure that positions elements relative to the overall page layout.1

/* ── CSS Multi-column — flowing text ──────────── */
.bibliography {
  column-count:  2;
  column-gap:    2rem;
  column-rule:   1px solid var(--rule);
}

/* Heading spans all columns                     */
.bibliography h2 {
  column-span:   all;
  margin-bottom: var(--space-sm);
}

/* Each entry stays together across column break  */
.bibliography .entry {
  break-inside:  avoid;
}

/* ── CSS Grid — explicit placement ─────────────── */
.page-spread {
  display:               grid;
  grid-template-columns: 1fr 1fr;
  column-gap:            2rem;
}

/* Wide image placed explicitly in both columns   */
.spread-image {
  grid-column:           1 / -1;
}

/* Caption placed in right column only            */
.spread-caption {
  grid-column:           2;
}
CSS Multi-column — automatic flow
auto-balanced auto-balanced column-count: 2 — browser flows content
CSS Grid — explicit placement
grid-column: 1 / -1 grid-column: 2 display: grid — designer places each element

Figure 15.4 — CSS Multi-column versus CSS Grid. Left: CSS Multi-column — the browser automatically distributes and balances the text across both columns. The designer has no control over which specific content lands in which column. Right: CSS Grid — the designer explicitly places the full-width heading in column 1 through 4, the body text in the left column, and the image and its caption in the right column. The arrangement reflects deliberate spatial choices, not automatic flow. These are not competing tools — they solve different problems and are often combined within the same page.

For the project document

The Compositor's Garden uses CSS Multi-column in one specific place: the planting calendar in Chapter 3, which lists forty-seven seed varieties in short two-line entries. The entries flow automatically across two columns within the chapter body, with a spanning subheading and a break-inside: avoid on each entry to prevent entries from splitting across columns. Everything else in the document uses the single-column CSS Grid layout defined in Chapter 13.

The report and editorial documents in Part Five use CSS Multi-column more extensively — the report bibliography runs in two columns, and the editorial layout uses a combination of CSS Grid (for the page structure) and CSS Multi-column (for sections of flowing text). Those implementations are covered in the relevant chapters of Part Five.

· · ·

With this chapter, Part Three is complete. The project document now has its typographic foundation (Part Two), its column structure (Chapter 13), its page geometry (Chapter 14), and its multicolumn strategy (this chapter). The next step is to give the document its temporal structure — the running headers, page numbers, break controls, and pagination logic that turn a collection of styled HTML into a paginated book. That is the work of Part Four, beginning with Chapter 16: Thinking in Pages.