Flexible Layouts Made Easy with CSS Flexbox
October 10, 2015
Flexbox gives you a one‑dimensional layout system that aligns, distributes, and reorders items with just a few lines of CSS.
By late 2015 most evergreen browsers shipped full Flexbox support, replacing many float or table hacks.
Core ideas
- A flex container establishes a new layout context using
display: flex
orinline-flex
. - Items inside can grow, shrink, and wrap automatically along the main axis.
- Alignment happens along two axes with
justify-content
andalign-items
. - The order of items is independent of source order via the
order
property.
Common patterns
1. Perfect centering
.centered {
display: flex;
justify-content: center; /* horizontal */
align-items: center; /* vertical */
min-height: 100vh;
}
<div class="centered">
<p>Centered with Flexbox</p>
</div>
2. Responsive navbar
.navbar {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0.5rem 1rem;
}
.navbar ul {
display: flex;
gap: 1rem;
list-style: none;
margin: 0;
padding: 0;
}
@media (max-width: 600px) {
.navbar ul {
flex-direction: column;
align-items: flex-start;
}
}
<header class="navbar">
<strong>Logo</strong>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/">Docs</a></li>
<li><a href="/">About</a></li>
</ul>
</header>
The menu shifts from a row to a stacked column on narrow screens without extra markup.
3. Simple equal‑height columns
.columns {
display: flex;
gap: 1rem;
}
.columns > article {
flex: 1; /* same width */
background: #fafafa;
padding: 1rem;
}
<section class="columns">
<article>Left</article>
<article>Center</article>
<article>Right</article>
</section>
Each column stretches to the same height because flex items default to align-stretch
.
4. Auto‑wrapping card grid
.grid {
display: flex;
flex-wrap: wrap;
gap: 1rem;
}
.card {
flex: 1 1 200px; /* grow, shrink, base width */
background: #fff;
border: 1px solid #ddd;
padding: 1rem;
}
<div class="grid">
<div class="card">Card</div>
<div class="card">Card</div>
<div class="card">Card</div>
<!-- more cards -->
</div>
flex-wrap: wrap
lets items flow to a new line once they hit the minimum 200px
size, ideal for gallery or dashboard layouts.
Tips
- Use
gap
to add consistent spacing between items; fallback with margins for very old browsers. - Keep
flex: 1
shorthand asflex: grow shrink basis
(auto
for basis by default). - Provide a graceful fallback (
display: block
) for IE9 and below. - For complex grids, combine Flexbox with media queries or move to CSS Grid once support is stable.
Flexbox removes many layout headaches, bringing concise, predictable rules to everyday UI patterns.
Recent posts
- At-Least-Once vs. Exactly-Once - Understanding Message Delivery Guarantees
June 12, 2025
Learn about message delivery guarantees in distributed systems. Understand why most production systems implement at-least-once delivery with idempotency rather than attempting exactly-once delivery.
- How Idempotency Saves Your API from Chaos
June 11, 2025
Learn how to implement idempotency in your APIs to prevent duplicate actions and ensure data consistency. Includes practical examples with Supabase and Node.js.
- Vibe Coding ‑ Notes from the First Try
June 6, 2025
Quick lessons from spinning up a new blog with an AI pair‑programmer and Cursor.