Bhylu

Flex Responsive — Code Challenge

Put let a flex layout wrap before adding breakpoints into practice. Rebuild the example from its HTML, then compare your result with the CSS solution. Change the content and the viewport before calling it finished.

How it works

  • A sensible flex basis and wrapping handle many widths naturally. A small-screen direction change can then support a deliberate single-column arrangement.
  • Flexbox works along a main axis and a cross axis. Flex-direction chooses the main axis, so alignment names are more reliable than assuming horizontal or vertical.
  • The direct children become flex items. Give items room to shrink or wrap and test long text before fixing dimensions.

Your task

Use the HTML below to explore this rule: A sensible flex basis and wrapping handle many widths naturally. A small-screen direction change can then support a deliberate single-column arrangement. Write your own CSS before opening the solution. Then replace the heading with a longer one and verify that the content is still readable.

Review the CSS solution

.layout { display: flex; flex-wrap: wrap; gap: 16px; }
.card { flex: 1 1 240px; min-width: 0; }
@media (max-width: 540px) { .layout { flex-direction: column; } }

A solution to compare

The HTML supplies the content; the CSS below styles it. Open both together in the playground, then change the lesson rules at the end of the stylesheet.

HTML

<div class="layout"><article class="card"><span class="badge">This Saturday</span><h2>Neighbourhood repair club</h2><p>Bring a small project. Share a useful skill.</p><a href="#booking">View the workshop</a></article><article class="card"><span class="badge">This Saturday</span><h2>Build a bird box</h2><p>Bring a small project. Share a useful skill.</p><a href="#booking">View the workshop</a></article><article class="card"><span class="badge">This Saturday</span><h2>Mend a favourite shirt</h2><p>Bring a small project. Share a useful skill.</p><a href="#booking">View the workshop</a></article></div>
CSS

body { margin: 0; padding: 24px; font-family: system-ui, sans-serif; color: #25332d; background: #f4f7f2; }
.card { padding: 20px; background: white; border: 1px solid #d4dfd6; }
h2 { margin-top: 0; }
p { line-height: 1.6; }
a { color: #17634c; }
.badge { display: inline-block; margin-bottom: 12px; font-size: .8rem; }
.layout { display: grid; gap: 16px; }
.photo { width: 100%; height: 160px; background: linear-gradient(135deg, #e4af6b, #668cba); }
button, input, select { font: inherit; padding: 8px; }
label { display: block; margin-block: 12px 4px; }

/* This lesson */
.layout { display: flex; flex-wrap: wrap; gap: 16px; }
.card { flex: 1 1 240px; min-width: 0; }
@media (max-width: 540px) { .layout { flex-direction: column; } }

A sensible flex basis and wrapping handle many widths naturally. A small-screen direction change can then support a deliberate single-column arrangement.