Explain Codes LogoExplain Codes Logo

Make grid container fill columns not rows

html
responsive-design
grid-auto-flow
grid-template-columns
Anton ShumikhinbyAnton Shumikhin·Feb 28, 2025
TLDR

To make a grid layout fill columns before rows, assign grid-auto-flow: column; to your container. This instructs the grid to populate along the vertical path sooner than beginning a new row.

.container { display: grid; grid-auto-flow: column; }

This nifty alteration ensures your items align in a top-down order within the columns first. The powerful CSS Grid is now at your service!

Understanding the game-changing grid-auto-flow

Now, let's unwrap what magic happens when we use grid-auto-flow. Essentially, this directive controls the direction in which new grid items are slotted. By default, it's set to row, which populates grid cells left to right and then top to bottom. A process you might liken to window shopping: browsing through goods displayed in a shop window, scanning left to right, row by row.

Switching to grid-auto-flow: column;, now we turn the browser into a librarian, filling shelves: inspecting one column at a time before moving onto the next. "Row" becomes "Column," and the default horizontal layout becomes vertical.

.container { display: grid; grid-auto-flow: column; /* Now the container's an elegant librarian */ }

This, however, presents its own challenges: forget to define your columns, and the librarian might over stack a single shelf, creating a too-long column. Yes, grid-auto-flow: column; is diligent but needs some managing!

Tailoring the grid to your content

Assign the grid-template-columns rule to keep our librarian in check, dictating how many items (books) can be added to a single column (shelf):

.container { display: grid; grid-auto-flow: column; grid-template-columns: repeat(4, 1fr); /* "Max 4 books per shelf!" */ }

Here, we use repeat() for less verbose syntax, defining four columns with equal width.

Grasping the grid-gap

Remember, books (grid items) need breathing room! A specified grid-gap prevents grid items from squishing together:

.container { display: grid; grid-auto-flow: column; grid-template-columns: repeat(4, 1fr); gap: 10px; /* The books appreciate some personal space! */ }

Note, the gap property can't animate in line with the whims of CSS transitions. You might want to use the transform property that allows dynamic adjustments like rotation or scaling instead.

Handling dynamic content

Discover the power of JavaScript to tackle dynamic grid adjustments. Rely on it to interact with the CSS Object Model (CSSOM), altering styles or even reshaping your grid, dynamically adapting to user actions or changes in content.

Dispelling CSS Grid complexities

Achieve good browser compatibility or command more advanced semantics using grid-column or CSS Multi-Column Layout. These are helpful when CSS Grid alone can't do the job:

.container { display: grid; grid-auto-flow: column; column-count: 3; /* Now it carves text like a newspaper */ }

Advanced CSS Grid strategies

While a grid provides a solid structure, it's not always perfect for all content. For content that doesn’t split neatly into columns or rows, use grid-column to stretch items across multiple columns or precisely control item positioning.

The CSS Columns method might be your perfect cup of coffee for better browser consistency, especially when dealing with legacy or constrained environments.

Taking your grids to the next level

Make sure you put CSS Multi-Column Layout into your CSS utility belt. This can be a life-saver for vertical content flow with text-heavy content or when CSS Grid might be overwhelming to use, more so with properties like column-count.

Adding some razzle-dazzle

To separate the best from the rest, use inline-grid to render grid containers as inline-level elements or employ the transform property for individual grid items.

Remember: with great power comes great responsibility! Use CSS selectors tactfully, as too much deviation can defeat the purpose of your beautiful grid-based design.