CSS column-fill Property

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

Definition and Usage

The column-fill property controls how content is distributed when an element uses multi-column layout. With balance (the default), the browser tries to make columns roughly equal in height. With auto, columns fill in order—first column first—so later columns can stay shorter or empty.

It applies to multicol elements (for example after you set column-count or columns), is not inherited, and the initial value is balance. The difference is clearest when the container has a fixed height.

Standard-track.

Not deprecated. balance and auto are widely available since 2017. The spec also defines balance-all for paged media, but no browser supports it yet.

Warning — interop quirks.

Browsers still disagree in edge cases. Chrome applies column-fill: auto only when the multicol box has a block size (such as height). Firefox may fill the first column even without a height.

CSS Syntax

syntax.css
column-fill: auto | balance | initial | inherit;

Use balance or auto in practice. Skip balance-all until browsers implement it.

Property Values

ValueDescriptionTry it
balanceDefault. Spread content so columns are roughly equal in heightTry it
autoFill columns sequentially. Later columns may be empty or shortTry it
balance-allSpec-only for balancing every fragment in paged media. Not supported yetN/A
initialResets to balanceTry it
inheritTakes the parent's column-fill (not inherited by default)Try it

How to Use column-fill

Create a multicol box, give it a height when you want to see auto, then choose balance or sequential fill.

  1. Enable columns with column-count, column-width, or columns.
  2. Set a block size (for example height: 7em) if you need sequential fill to show clearly—especially in Chrome.
  3. Choose column-fill: balance for even columns, or auto to fill top-to-bottom in order.
  4. Optional: add column-gap or column-rule so column edges are easier to see.
PieceRequired?Role
Multicol setupYescolumn-count, column-width, or columns
Block size (height)For clear autoLets sequential fill use column height before wrapping
column-fillOptionalDefaults to balance if omitted

Live Preview

Same short text, fixed height, three columns. Switch between balance and auto.

The demo box has a fixed height so sequential fill can leave later columns empty.

Result

London. Michaelmas term lately over, and the Lord Chancellor sitting in Lincoln's Inn Hall. Implacable November weather.

column-fill: balance

CSS Examples

Each snippet keeps only what column-fill needs. Use Try It Yourself for a live editor.

Example 1 — balance (Default)

Spread a short paragraph evenly across three columns inside a fixed-height box.

CSS
<style>
  p {
    height: 7em;
    columns: 3;
    column-fill: balance;
  }
</style>

<p>
  London. Michaelmas term lately over…
</p>
Try It Yourself

How It Works

  1. Enable columns. columns: 3 creates a three-column layout.
  2. Fix the height. height: 7em gives the box a clear block size for comparison.
  3. Balance the fill. column-fill: balance divides the text so columns stay roughly equal.
  4. Default behavior. Omitting column-fill does the same thing, because balance is the initial value.

Example 2 — auto (Sequential Fill)

Fill the first column first. Later columns may stay empty when content is short.

CSS
<style>
  p {
    height: 7em;
    columns: 3;
    column-fill: auto;
  }
</style>

<p>
  London. Michaelmas term lately over…
</p>
Try It Yourself

How It Works

  1. Same multicol setup. Still three columns and a fixed height.
  2. Change only the fill. column-fill: auto fills columns in order.
  3. Short content piles up. Text uses the first column’s height before spilling into the next.
  4. Height matters in Chrome. Without a block size, Chrome may ignore sequential fill and still look balanced.

Example 3 — Compare balance and auto

Two paragraphs, same height and column count—only column-fill differs.

CSS
<style>
  p {
    height: 7em;
    columns: 3;
    column-rule: 1px solid;
  }
  .balance { column-fill: balance; }
  .auto { column-fill: auto; }
</style>

<p class="balance">Balance: content is spread.</p>
<p class="auto">Auto: columns fill in order.</p>
Try It Yourself

How It Works

  1. Shared scaffold. Both paragraphs use the same height, column count, and rule.
  2. One keyword each. balance vs auto is the only difference that matters.
  3. Read the shapes. Balanced text looks even; sequential fill piles into early columns.
  4. Study tip. Keep content short so empty later columns are obvious under auto.

Edge Cases & Pitfalls

If auto looks balanced, check height and browser behavior first.

height

No height, little difference

Without a fixed block size, columns often grow with content and balance vs auto look similar. Set a height to study sequential fill.

Chrome

Chrome needs a block size for auto

Chrome consults column-fill: auto only when the multicol container has a size in the block dimension. Firefox may fill the first column even without that size.

spec

balance-all is not usable yet

The CSS Multi-column Level 2 value balance-all is defined for fragmented/paged contexts, but no browser implements it. Prefer balance.

long

Long content fills every column

If text is taller than all columns combined under auto, every column fills and the contrast with balance shrinks. Use shorter sample text when teaching.

multicol

Only works on multicol boxes

column-fill has no effect until the element is a multicol container via column-count, column-width, or columns.

Browser Support

column-fill is a browser layout property. Node.js, Deno, and Bun do not apply it.

✓ Baseline · Widely available since 2017

column-fill

Chrome 50+, Firefox 52+, Safari 9+, Edge 12+. Interop quirks remain for auto without a height.

97% modern browsers
Google Chrome 50+
Full support
Mozilla Firefox 52+
Full support
Apple Safari 9+
Full support
Microsoft Edge 12+
Full support
Opera 37+
Full support
Samsung Internet 5.0+
Full support
Internet Explorer 10+
Partial / quirks
column-fill Widely supported

Bottom line: Safe for modern sites. Always give a height when relying on column-fill: auto. Do not depend on balance-all yet.

Key Takeaways

  • Role: controls whether columns balance or fill in sequence.
  • Default: balance spreads content evenly.
  • auto: fills column 1, then 2, and so on—best with a fixed height.
  • Interop: Chrome needs a block size for reliable auto.

One line: column-fill chooses even columns (balance) or sequential fill (auto); give the multicol box a height when studying auto.

Frequently Asked Questions

column-fill controls how content is distributed across columns. balance spreads content so columns are roughly equal in height. auto fills columns in order, which can leave later columns shorter or empty.
The initial value is balance. Content is divided evenly across columns when possible.
Without a fixed height (block size) on the multicol container, both often look alike. Give the box a height so auto can fill the first column before overflowing into the next.
Yes. Chrome only applies sequential filling when the multicol container has a size in the block dimension (for example height). Firefox may apply auto even without a height.
The spec defines balance-all for balancing every fragment in paged media, but no browser supports it yet. Stick to balance and auto.
Chrome 50+, Firefox 52+, Safari 9+, Edge 12+, and Opera 37+. It is a browser layout property, not a Node.js feature.

Next: column-gap

Control the space between multi-column tracks.

column-gap 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