column-width

Sets ideal column width in multi-column layout. Browser auto-determines column count from available space.

Class Patterns

PatternExampleCSS
cw{N}pxcw200pxcolumn-width: 200px
cw{N}pxcw150pxcolumn-width: 150px
cw{N}remcw20remcolumn-width: 20rem
cw{N}remcw30remcolumn-width: 30rem

Visual Demo

The two boxes below hold the same text at the same width. The only difference is the column width value, and the browser decides the column count from it. Resize the window and watch columns appear and merge.

cw200px cg2rem

This is body copy flowing through several columns. Multi-column layout works like print: when the text fills one column it continues in the next. You never state how many columns you want, the container width decides.

That makes responsive multi-column copy possible without a single media query. Keep in mind that long text also grows taller, so decide up front whether to cap the height.

Narrow columns, so a wide viewport splits the text into several of them.

cw25rem cg2rem

This is body copy flowing through several columns. Multi-column layout works like print: when the text fills one column it continues in the next. You never state how many columns you want, the container width decides.

That makes responsive multi-column copy possible without a single media query. Keep in mind that long text also grows taller, so decide up front whether to cap the height.

Each column is wide, so the same box holds fewer of them.

Usage Examples

Specify column width and browser auto-calculates count. For newspaper layouts, multi-column text.

<!-- 200px reference auto columns -->
<div class="cw200px cg2rem">
  <p>First paragraph. The browser automatically determines column count based on available space.</p>
  <p>Second paragraph. If the container is wide, it splits into multiple columns.</p>
  <p>Third paragraph.</p>
</div>

<!-- Using rem units -->
<div class="cw25rem cg16px">
  <p>Auto-arranged with 250px reference column width.</p>
</div>

Class Details

cw200pxcolumn-width: 200px

Sets the column width in pixels. The smaller the value, the more columns fit in the same box. For body copy, aim for a width that fits roughly forty to sixty characters per line.

<!-- Dense list: many narrow columns on wide screens -->
<ul class="cw200px cg2rem">
  <li class="fs14px c71717A">Seoul</li>
  <li class="fs14px c71717A">Busan</li>
  <li class="fs14px c71717A">Incheon</li>
  <li class="fs14px c71717A">Daegu</li>
  <li class="fs14px c71717A">Gwangju</li>
</ul>

cw25remcolumn-width: 25rem

Sets the column width in rem. In this documentation one rem is ten pixels, so twenty-five rem is two hundred and fifty pixels. Because the width scales with the user's font size, it is the safer choice for accessibility.

<!-- Article body: columns grow with the user's font size -->
<div class="cw25rem cg3-2rem crw1px">
  <p class="fs14px c71717A lh1-7">First paragraph of the article.</p>
  <p class="fs14px c71717A lh1-7">It keeps flowing into the next column.</p>
</div>

Practical Example — Announcement Body and Tag List

Long announcement copy flowing across columns with a dense tag list underneath in narrow columns. Same property, very different density depending on the value.

<article class="p3-2rem bg18181B br8px">
  <h2 class="csa fs2-4rem fw700 cFAFAFA mb16px">Service notice</h2>

  <!-- Long copy: wide, readable columns -->
  <div class="cw25rem cg3-2rem mb3-2rem">
    <p class="fs14px c71717A lh1-7 mb16px">Scheduled maintenance runs on Saturday.</p>
    <p class="fs14px c71717A lh1-7">Sessions are preserved and no data is lost.</p>
  </div>

  <!-- Short items: narrow, dense columns -->
  <ul class="cw200px cg2rem">
    <li class="fs13px cA1A1AA">api</li>
    <li class="fs13px cA1A1AA">dashboard</li>
    <li class="fs13px cA1A1AA">billing</li>
    <li class="fs13px cA1A1AA">webhooks</li>
  </ul>
</article>

Tips / Caveats

It is a target width, not a minimum

When the container gets narrower than the value, the columns collapse into one and the width is simply ignored. Never assume a column can never be narrower than what you asked for.

For a fixed column count this is the wrong property

If you need exactly two columns regardless of viewport, reach for column-count. Using both makes the count an upper bound and the width a hint.

Without enough content it looks like nothing happened

Short content fills the first column and stops, so no second column appears. Demos and cards need enough height or enough text before the effect is visible.

Spanning elements must opt in

If a heading or banner should not be trapped inside one column, give that element a column-span class. Without it, it flows like any other block.

Gaps and rules are separate properties

If the columns look cramped, set a column-gap class; if you want a newspaper-style vertical rule between them, set a column rule width class as well.

Ideal width, not minimum

column-width specifies "ideal" width. Narrow containers reduce to one column; wider ones add more.

Use with column-gap

Control column spacing with cg (column-gap) classes.