Written by

in

DesignSetGo ships three foundational layout blocks: Section, Row, and Grid. On the surface they look redundant — they all hold other blocks and arrange them. In practice, each one is tuned for a different job, and picking the right one at the start saves you from a lot of CSS wrestling later.

Here’s a plain-English guide to which one to reach for, based on the shape of the layout in your head.

Section: vertical rhythm, one column

Use Section when: you want things arranged top to bottom with consistent spacing between them. Section is a vertical flex container — it exists because “a single column with a gap” is the single most common layout pattern on the web, and you shouldn’t have to set three controls to get it.

Classic Section use cases:

  • A hero’s inner content: heading, subheading, button — evenly spaced.
  • A feature card’s contents: icon, heading, paragraph, link.
  • A full page area with a background color, padding, and stacked content.
  • Any time you catch yourself adding matching bottom margins to every block.

The rule of thumb: if the children should never go side-by-side, use Section. You get one gap control, a predictable reading order for screen readers, and it doubles as your page-width container when you need full-width backgrounds with constrained content inside.

Row: horizontal-first, content-driven sizing

Use Row when: items should sit next to each other, their sizes should be driven by their content, and you want them to wrap gracefully when the container gets narrow.

Classic Row use cases:

  • A header with logo on the left, nav in the middle, CTA on the right.
  • A tag row where tags are different widths and wrap to a new line.
  • A testimonial row where three cards fit on desktop, two on tablet, one on mobile — without defining those breakpoints by hand.
  • An icon-plus-text pairing where the text should take the remaining space.
  • A pair of buttons that should sit side-by-side and wrap under each other on mobile.

Row is the right answer when you care about content-aware sizing: “make this button only as wide as its label,” “let this paragraph fill the leftover space.” Row gives you justify, align, and wrap — the three controls that solve 90% of horizontal layouts.

Grid: two-dimensional, fixed tracks

Use Grid when: you need columns of equal width or an explicit number of columns at each breakpoint — and especially when children need to align across rows as well as columns.

Classic Grid use cases:

  • A feature section with exactly 3 columns on desktop, 2 on tablet, 1 on mobile.
  • A pricing table where three plan cards must be identical widths regardless of content length.
  • A team page with a 4×3 employee portrait grid.
  • Any “card grid” where visual alignment is more important than content-driven sizing.

The tell: are you thinking about “columns”? If yes, Grid. If you’re thinking about “items that flow horizontally,” it’s Row.

The decision tree

  • Children only stack top-to-bottom? → Section
  • Children sit side-by-side, content-sized, may wrap? → Row
  • Fixed number of equal columns, cross-row alignment matters? → Grid

Common mistakes

Using Grid when you meant Row. Grid forces equal-width tracks. If your “3 columns” actually contains a wide article and a narrow sidebar, Grid is awkward. Use Row with two children and let each set its own width.

Using Row when you meant Section. Row with vertical orientation works, but you’ve just given yourself a handful of extra controls when Section is already tuned for it. Section is the vertical-first container — take the opinions.

Using Section when you meant Grid. If your content is three feature cards and you want them side-by-side on desktop, nesting cards in a Section and hoping CSS sorts it out is a tempting dance. Just start with Grid — set 1 column on mobile, 3 on desktop. Less markup, less fragility.

One more rule

Nest freely. A Section → Grid → Section → Row chain isn’t overengineered — it’s how real layouts work. The outer Section handles page-width constraints and padding. The Grid makes the columns. Each column is a Section containing a heading, paragraph, and button. And the button pair inside might be a Row with two buttons sitting next to each other. Each block is doing exactly one job, and replacing any one of them is trivial.

That’s the whole trick: pick the layout block whose defaults match your intent, and nest when the intent changes. You’ll write almost no custom CSS.

Comments

Leave a Reply