The column-span property lets an in-flow block element span every column inside a multi-column container when set to all. That element is called a spanning element, or spanner.
The container needs a multi-column setup such as column-count, column-width, or the columns shorthand. The initial value is none. It is not inherited. Content before the spanner is balanced across columns; columns restart after it.
Baseline for none and all.
Not deprecated. Spec drafts also list integers and auto, but browsers do not implement them yet — use only none and all in real pages.
Choose an in-flow block child (often a heading or banner).
Set column-span: all on that child so it spans the full width.
Leave other elements at the default none so they stay in the column flow.
Piece
Required?
Role
Multi-column parent
Yes
Without columns, column-span has nothing to span
In-flow block child
Yes
Applies to block-level in-flow elements, not floats
all on the spanner
For breakouts
Creates a full-width band; columns restart below
Partial span
Not available
No browser value spans only some columns
Try it
Live Preview
The article stays in three columns. Only the banner’s column-span changes.
With all, the banner stretches across every column. With none, it stays in the first column flow.
Multi-column article
Short intro text flows into columns around the banner below.
Spanning banner
More copy continues after the banner. Columns restart below a spanner so the layout stays readable.
Extra lines help show how text balances across the columns on wider screens.
column-span: all
Code
CSS Examples
Each snippet focuses on column-span. Column count is only there so the span can show. Use Try It Yourself for a live editor.
Example 1 — Stay in a Column
Leave the heading in the normal column flow with none.
CSS
<style>
article {
column-count: 3;
}
h2 {
column-span: none;
}
</style>
<article>
<h2>In one column</h2>
<p>Text flows into three columns. The heading stays in the first column.</p>
<p>More text fills the remaining columns beside and below the heading.</p>
</article>
Text flows into three columns. The heading stays in the first column.
More text fills the remaining columns beside and below the heading.
How It Works
Create columns.column-count: 3 turns the article into a multi-column box.
Keep the default behavior.column-span: none is the initial value — the heading does not break out.
Heading stays narrow. It sits in the column flow like any other block.
Use this to compare. Flip to all in the next example to see the difference.
Example 2 — Heading Spans All Columns
Stretch a heading across the full multi-column width.
CSS
<style>
article {
column-count: 3;
}
h2 {
column-span: all;
}
</style>
<article>
<h2>Full-width heading</h2>
<p>After the heading, text balances into three columns again.</p>
<p>Spanners are common for article titles in newspaper-style layouts.</p>
</article>
After the heading, text balances into three columns again.
Spanners are common for article titles in newspaper-style layouts.
How It Works
Same multi-column parent. Three columns still come from column-count.
Make a spanner.column-span: all is the lesson — the heading crosses every column.
Flow restarts. Content after the heading fills a new set of columns below it.
Only two practical values. Browsers support none and all for this effect.
Example 3 — Mid-Article Banner
Place a spanning banner between paragraphs, not only at the top.
CSS
<style>
article {
column-count: 3;
}
.banner {
column-span: all;
background: #dbeafe;
padding: 8px;
}
</style>
<article>
<p>Opening text sits above the banner and balances across columns.</p>
<div class="banner">Callout across all columns</div>
<p>Text after the banner starts a fresh column set underneath.</p>
</article>
column-span: 2 is invalid today. Only none and all work. You cannot span two of three columns.
flow
In-flow blocks only
The property applies to in-flow block-level elements. Floated or absolutely positioned boxes are not spanners.
nest
Nested boxes can look odd
If the spanner sits inside a padded or bordered wrapper, the wrapper’s box may not match the full-width band. Prefer spanning a direct heading or a simple block.
table
Not HTML colspan
column-span is CSS multi-column. Table cells use the HTML colspan attribute instead.
Compatibility
Browser Support
column-span is a browser CSS property for multi-column layout. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
column-span
none and all are supported in modern browsers (Firefox 71+, Chrome 50+, Safari 9+, Edge 12+). Integer and auto values from newer drafts are not implemented.
97%+none and all
Google Chrome50+
Full support
Mozilla Firefox71+
Full support
Apple Safari9+
Full support
Microsoft Edge12+
Full support
Opera37+
Full support
Samsung Internet5+
Full support
Internet Explorer10+
Full support
column-spanWidely supported
Bottom line: Safe for none and all in production multi-column layouts. Do not rely on integer spans. It is not a runtime API.
Remember
Key Takeaways
Role: let a block span every column in a multi-column layout.
Initial value:none. Not inherited.
Practical values:none and all only in today’s browsers.
Needs columns first: set column-count or columns on a parent.
One line:column-span: all makes a heading or banner stretch across every column — after the parent already has columns.
Frequently Asked Questions
It controls whether an in-flow block element spans every column in a multi-column container. Use all for a full-width breakout; none keeps the element inside one column.
The initial value is none. The element stays in the normal column flow.
No. Browsers support none and all only. There is no partial span such as column-span: 2.
The element must be an in-flow block inside a multi-column container (column-count, column-width, or columns). Floats and out-of-flow boxes do not span.
No. column-span is for CSS multi-column layout. colspan is an HTML table attribute for table cells.
It is Baseline and widely available for none and all. It is a browser CSS property, not a Node.js feature.