CSS column-span Property

Beginner
5 min read
Updated: Oct 2026
3 examples
Live preview

Definition and Usage

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.

CSS Syntax

syntax.css
column-span: none | all | initial | inherit;

One keyword. Study and production: none or all.

Property Values

ValueDescriptionTry it
noneStays inside one column. Initial valueTry it
allSpans every column in the multi-column containerTry it
initialSets this property to its default value, noneTry it
inheritInherits this property from the parent elementTry it

How to Use column-span

Create columns first, then mark the block that should break across them.

  1. Put text in a container with column-count or columns.
  2. Choose an in-flow block child (often a heading or banner).
  3. Set column-span: all on that child so it spans the full width.
  4. Leave other elements at the default none so they stay in the column flow.
PieceRequired?Role
Multi-column parentYesWithout columns, column-span has nothing to span
In-flow block childYesApplies to block-level in-flow elements, not floats
all on the spannerFor breakoutsCreates a full-width band; columns restart below
Partial spanNot availableNo browser value spans only some columns

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

column-span: all

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>
Try It Yourself

How It Works

  1. Create columns. column-count: 3 turns the article into a multi-column box.
  2. Keep the default behavior. column-span: none is the initial value — the heading does not break out.
  3. Heading stays narrow. It sits in the column flow like any other block.
  4. 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>
Try It Yourself

How It Works

  1. Same multi-column parent. Three columns still come from column-count.
  2. Make a spanner. column-span: all is the lesson — the heading crosses every column.
  3. Flow restarts. Content after the heading fills a new set of columns below it.
  4. 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>
Try It Yourself

How It Works

  1. Content above balances. Text before the banner is distributed across the columns first.
  2. Banner breaks out. column-span: all stretches the callout full width.
  3. Content below restarts. New columns begin under the spanner — text does not jump over it.
  4. Keep styling light. Background and padding help you see the band; they are not required for spanning.

Edge Cases & Pitfalls

If the spanner does not stretch, one of these is usually why.

parent

Needs a multi-column ancestor

column-span: all does nothing without column-count, column-width, or columns on a parent.

partial

No partial span in browsers

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.

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 Chrome 50+
Full support
Mozilla Firefox 71+
Full support
Apple Safari 9+
Full support
Microsoft Edge 12+
Full support
Opera 37+
Full support
Samsung Internet 5+
Full support
Internet Explorer 10+
Full support
column-span Widely 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.

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.

Next: column-width

Learn how to set each column’s ideal width for responsive multi-column text.

column-width tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

8 people found this page helpful