Master CSS Flexbox: A Complete Guide to Responsive Layouts
CSS Flexbox Made Easy: Layouts in Minutes
What is Flexbox?
CSS Flexbox (Flexible Box Layout) is a one-dimensional layout method that makes it incredibly easy to arrange items in rows or columns. It solves common layout challenges like centering content, creating equal-height columns, and distributing space between elements.
Getting Started: The Flex Container
To use Flexbox, you need a flex container (parent) and flex items (children).
CSS1.container {
2 display: flex; /* This creates a flex container */
3}
Essential Flex Container Properties
1. flex-direction
Controls the direction of flex items.
CSS1.container {
2 flex-direction: row; /* Default: left to right */
3 flex-direction: column; /* Top to bottom */
4 flex-direction: row-reverse; /* Right to left */
5 flex-direction: column-reverse; /* Bottom to top */
6}
2. justify-content
Aligns items along the main axis (horizontally by default).
CSS1.container {
2 justify-content: flex-start; /* Default: items at start */
3 justify-content: center; /* Center items */
4 justify-content: flex-end; /* Items at end */
5 justify-content: space-between; /* Space between items */
6 justify-content: space-around; /* Space around items */
7 justify-content: space-evenly; /* Equal space everywhere */
8}
3. align-items
Aligns items along the cross axis (vertically by default).
CSS1.container {
2 align-items: stretch; /* Default: stretch to fill */
3 align-items: flex-start; /* Align to top */
4 align-items: center; /* Center vertically */
5 align-items: flex-end; /* Align to bottom */
6}
4. flex-wrap
Controls whether items wrap to new lines.
CSS1.container {
2 flex-wrap: nowrap; /* Default: all items on one line */
3 flex-wrap: wrap; /* Items wrap to new lines */
4}
Essential Flex Item Properties
1. flex-grow
Defines how much an item should grow relative to other items.
CSS1.item {
2 flex-grow: 1; /* Item will grow to fill available space */
3 flex-grow: 2; /* Item will grow twice as much as flex-grow: 1 items */
4}
2. flex-shrink
Defines how much an item should shrink when space is limited.
CSS1.item {
2 flex-shrink: 1; /* Default: item can shrink */
3 flex-shrink: 0; /* Item won't shrink */
4}
3. flex-basis
Sets the initial size of an item before free space is distributed.
CSS1.item {
2 flex-basis: 200px; /* Item starts at 200px wide */
3 flex-basis: 25%; /* Item starts at 25% of container */
4}
4. flex (shorthand)
Combines flex-grow, flex-shrink, and flex-basis.
CSS1.item {
2 flex: 1; /* flex-grow: 1, flex-shrink: 1, flex-basis: 0% */
3 flex: 1 0 200px; /* grow: 1, shrink: 0, basis: 200px */
4}
Common Layout Patterns
Perfect Centering
CSS1.center-container {
2 display: flex;
3 justify-content: center;
4 align-items: center;
5 height: 100vh; /* Full viewport height */
6}
Equal-Width Columns
CSS1.equal-columns {
2 display: flex;
3}
4
5.column {
6 flex: 1; /* Each column takes equal space */
7}
Header, Content, Footer Layout
CSS1.page-container {
2 display: flex;
3 flex-direction: column;
4 min-height: 100vh;
5}
6
7.header, .footer {
8 flex-shrink: 0; /* Don't shrink */
9}
10
11.content {
12 flex: 1; /* Takes remaining space */
13}
Navigation Bar
CSS1.navbar {
2 display: flex;
3 justify-content: space-between;
4 align-items: center;
5 padding: 1rem;
6}
7
8.nav-links {
9 display: flex;
10 gap: 1rem;
11}
Card Layout
CSS1.card-container {
2 display: flex;
3 flex-wrap: wrap;
4 gap: 1rem;
5}
6
7.card {
8 flex: 1 1 300px; /* Grow, shrink, min-width 300px */
9}
Quick Reference Cheat Sheet
Property | Purpose | Common Values |
---|---|---|
display: flex | Creates flex container | Required for all flex layouts |
justify-content | Horizontal alignment | center , space-between , space-around |
align-items | Vertical alignment | center , flex-start , flex-end |
flex-direction | Layout direction | row , column |
flex-wrap | Item wrapping | wrap , nowrap |
flex | Item flexibility | 1 , 1 0 200px |
gap | Space between items | 1rem , 20px |
Pro Tips
- Use
gap
for spacing instead of margins - it's cleaner and more predictable - Flex items are block-level by default, even if they're normally inline elements
align-items: center
is your best friend for vertical centeringflex: 1
makes items grow to fill available space equally- Combine with CSS Grid for complex layouts - use Flexbox for one-dimensional layouts
Browser Support
Flexbox has excellent browser support (99%+ of users). Safe to use in all modern projects without prefixes.
Common Gotchas
- Margins don't collapse in flex containers
float
,clear
, andvertical-align
have no effect on flex itemsmin-width: 0
may be needed for text overflow in flex items- Flex items create their own stacking context
Practice Exercise
Try creating a responsive card layout:
CSS1.card-grid {
2 display: flex;
3 flex-wrap: wrap;
4 gap: 1rem;
5 padding: 1rem;
6}
7
8.card {
9 flex: 1 1 calc(33.333% - 1rem);
10 min-width: 250px;
11 padding: 1rem;
12 border: 1px solid #ddd;
13 border-radius: 8px;
14}
This creates a responsive grid that shows 3 cards per row on larger screens and stacks on smaller screens.
Bookmark this guide for quick reference whenever you need to create flexible, responsive layouts with CSS Flexbox!