Flexbox Cheat Sheet: The Complete CSS Layout Reference

Master every flexbox property with practical examples and code snippets for modern web layouts.

Why Flexbox Matters

Before flexbox, developers struggled with vertical centering, equal-height columns, and sticky footers using workarounds like float, table display, or absolute positioning. Flexbox solves these common layout challenges with a declarative, predictable model.

The key advantage lies in its flexibility: elements can grow to fill available space, shrink to prevent overflow, and automatically adjust their layout based on the container's dimensions. This makes flexbox ideal for navigation menus, card layouts, form controls, and any interface component requiring precise alignment.

Beyond visual appeal, proper layout structure also impacts how search engines interpret page content. When combined with search engine optimization best practices, well-structured flexbox layouts help crawlers understand content hierarchy and improve discoverability.

Sources: W3C CSS Flexible Box Layout Module Level 1

Container Properties

The flex container establishes the layout context for all child elements. Understanding these properties unlocks the full potential of flexbox layouts.

display: The Foundation

The display property activates flexbox formatting for the container and its direct children.

.container {
 display: flex; /* Creates a block-level flex container */
}

.inline-container {
 display: inline-flex; /* Creates an inline-level flex container */
}

Using display: flex establishes a block-level box that participates in the normal block formatting flow. The inline-flex value creates a container that behaves like an inline-level element while maintaining flex context for its children.

flex-direction: Defining the Main Axis

The flex-direction property establishes the primary axis along which flex items are arranged.

.container {
 flex-direction: row; /* Left to right (default) */
 flex-direction: row-reverse; /* Right to left */
 flex-direction: column; /* Top to bottom */
 flex-direction: column-reverse; /* Bottom to top */
}

The row value (the default) arranges items from left to right in left-to-right languages, with the main axis running horizontally. Reversing the direction with row-reverse mirrors this arrangement. For vertical layouts, column arranges items from top to bottom.

Source: MDN - Basic Concepts of Flexbox

flex-direction values
/* Row - default */
flex-direction: row;

/* Row reverse */
flex-direction: row-reverse;

/* Column */
flex-direction: column;

/* Column reverse */
flex-direction: column-reverse;

flex-wrap: Controlling Overflow Behavior

The flex-wrap property determines whether flex items force onto a single line or wrap across multiple lines.

.container {
 flex-wrap: nowrap; /* All items on one line (default) */
 flex-wrap: wrap; /* Items wrap to additional lines */
 flex-wrap: wrap-reverse; /* Items wrap from bottom to top */
}

By default, nowrap forces all flex items onto a single line, potentially causing them to shrink below their minimum content size. The wrap value allows items to flow to subsequent lines when space is insufficient.

Source: CSS-Tricks - Flexbox Guide

justify-content: Aligning Along the Main Axis

The justify-content property distributes space between and around flex items along the main axis.

.container {
 justify-content: flex-start; /* Items packed toward start (default) */
 justify-content: flex-end; /* Items packed toward end */
 justify-content: center; /* Items centered */
 justify-content: space-between; /* Equal space between items */
 justify-content: space-around; /* Equal space around items */
 justify-content: space-evenly; /* Uniform spacing including edges */
}

The flex-start value packs items toward the beginning, while flex-end packs them toward the end. Centering with center creates balanced layouts ideal for hero sections. The space distribution values provide different approaches for spacing items evenly.

align-items: Aligning Along the Cross Axis

The align-items property defines how flex items are aligned along the cross axis, perpendicular to the main axis.

.container {
 align-items: stretch; /* Items stretch to fill container (default) */
 align-items: flex-start; /* Items aligned to cross-start edge */
 align-items: flex-end; /* Items aligned to cross-end edge */
 align-items: center; /* Items centered along cross axis */
 align-items: baseline; /* Items aligned by text baseline */
}

For row layouts, this property handles vertical alignment. The stretch value (default) causes flex items to extend across the entire cross axis dimension.

flex-flow: The Container Shorthand

The flex-flow property combines flex-direction and flex-wrap into a single declaration.

.container {
 flex-flow: row wrap; /* Common responsive pattern */
 flex-flow: column nowrap; /* Vertical layout without wrapping */
}

This shorthand accepts any combination of valid flex-direction and flex-wrap values, simplifying container declarations while maintaining readability.

align-content: Distributing Multiple Lines

The align-content property controls the distribution of space between and around lines when flex items wrap onto multiple lines.

.container {
 align-content: stretch; /* Lines stretch to fill space (default) */
 align-content: flex-start; /* Lines packed toward start */
 align-content: flex-end; /* Lines packed toward end */
 align-content: center; /* Lines centered */
 align-content: space-between; /* Space distributed between lines */
}
Container Properties Quick Reference
PropertyValuesPurpose
displayflex, inline-flexActivates flexbox context
flex-directionrow, row-reverse, column, column-reverseMain axis direction
flex-wrapnowrap, wrap, wrap-reverseLine wrapping behavior
justify-contentflex-start, flex-end, center, space-between, space-aroundMain axis alignment
align-itemsstretch, flex-start, flex-end, center, baselineCross axis alignment
align-contentstretch, flex-start, flex-end, center, space-betweenMulti-line distribution
flex-flow[direction] [wrap]Shorthand for direction and wrap

Item Properties

Individual flex items can override container-level alignment and control their own sizing behavior through these properties.

order: Customizing Item Sequence

The order property specifies the order in which flex items appear, independent of their source order.

.item {
 order: 0; /* Default value for all items */
 order: -1; /* Appears before items with order: 0 */
 order: 1; /* Appears after items with order: 0 */
}

Items with the same order value appear in their original source order. This enables visual reordering without HTML modifications, useful for responsive layouts.

flex-grow: Controlling Growth

The flex-grow property defines the proportion by which a flex item grows when positive space is available.

.item {
 flex-grow: 0; /* Item does not grow (default) */
 flex-grow: 1; /* Item grows equally with others */
 flex-grow: 2; /* Item grows twice as much */
}

When the container has extra space, items with positive flex-grow values expand proportionally.

flex-shrink: Controlling Shrinkage

The flex-shrink property defines the proportion by which a flex item shrinks when space is constrained.

.item {
 flex-shrink: 1; /* Item shrinks as needed (default) */
 flex-shrink: 0; /* Item does not shrink */
 flex-shrink: 3; /* Item shrinks three times more */
}

When flex items exceed the container's width, items with positive flex-shrink values shrink proportionally.

flex-basis: Setting Initial Size

The flex-basis property specifies the initial size of a flex item before remaining space is distributed.

.item {
 flex-basis: auto; /* Size based on content or width/height (default) */
 flex-basis: 200px; /* Initial size of 200 pixels */
 flex-basis: 50%; /* Initial size as 50% of container */
}

flex: The Item Shorthand

The flex property combines flex-grow, flex-shrink, and flex-basis.

.item {
 flex: 0 1 auto; /* Default: don't grow, shrink, use auto basis */
 flex: 1; /* Short for 1 1 0% */
 flex: 1 1 200px; /* Grow and shrink, initial 200px */
 flex: none; /* Short for 0 0 auto */
}
Item Properties Quick Reference
PropertyValuesPurpose
orderintegerVisual ordering
flex-grownumberGrowth proportion
flex-shrinknumberShrink proportion
flex-basislength, percentage, auto, contentInitial size
flex[grow] [shrink] [basis]Shorthand for sizing
align-selfauto, stretch, flex-start, flex-end, center, baselineIndividual alignment

align-self: Overriding Item Alignment

The align-self property allows individual flex items to override the container's align-items setting.

.item {
 align-self: auto; /* Inherits from align-items (default) */
 align-self: flex-start; /* Override: align to cross-start */
 align-self: flex-end; /* Override: align to cross-end */
 align-self: center; /* Override: center alignment */
 align-self: stretch; /* Override: stretch to fill */
}

This property proves useful when most items should follow one alignment rule but a specific element requires different positioning. For example, a navigation bar might center most items but position a logo at the start edge.

Common Layout Patterns

Perfect Centering

The most celebrated use case for flexbox is centering elements both horizontally and vertically.

.centered-container {
 display: flex;
 justify-content: center; /* Horizontal centering */
 align-items: center; /* Vertical centering */
}

This pattern eliminates the need for transform-based centering hacks and works predictably regardless of content size.

Card Layouts with Equal Height

Flexbox automatically creates equal-height columns without requiring JavaScript.

.card-container {
 display: flex;
 flex-wrap: wrap;
 gap: 1rem;
}

.card {
 flex: 1 1 300px; /* Grow, shrink, 300px base width */
}

Responsive Navigation

Navigation menus benefit from flexbox's alignment and distribution capabilities.

.nav-container {
 display: flex;
 justify-content: space-between;
 align-items: center;
}

Sticky Footer

Creating a footer that stays at the bottom when content is short.

.page-wrapper {
 display: flex;
 flex-direction: column;
 min-height: 100vh;
}

main {
 flex: 1 0 auto; /* Grow to fill available space */
}

Source: GeeksforGeeks - Flexbox Guide

Responsive Considerations

Combining with Media Queries

Flexbox properties work seamlessly with CSS media queries to create adaptive layouts.

.flex-container {
 display: flex;
 flex-wrap: wrap;
}

.flex-item {
 flex: 1 1 300px;
}

@media (max-width: 600px) {
 .flex-container {
 flex-direction: column;
 }
 .flex-item {
 flex-basis: 100%;
 }
}

This pattern creates multi-column layouts on larger screens that stack vertically on mobile devices.

For teams looking to accelerate development workflows, AI-powered development tools can help automate repetitive layout tasks and ensure consistent responsive behavior across projects.

Performance Considerations

Flexbox performs well in modern browsers. Best practices for optimization:

  • Avoid changing flex-direction frequently, as this triggers layout recalculation
  • Use gap property instead of margin for consistent spacing calculations
  • Prefer flex shorthand over individual properties for cleaner code
  • Combine flex-grow and flex-shrink appropriately to prevent excessive reflow during resizing
Benefits of Flexbox

Efficient Space Utilization

Flexbox automatically adjusts element sizes to use available space effectively.

Centering Made Easy

Simple one-line solution for both horizontal and vertical centering.

Sticky Footer

Create footers that stay at the bottom without unwanted gaps.

Flexible Navigation

Design menus that adapt to screen sizes intuitively.

Responsive Layouts

Elements automatically adjust size and layout across devices.

Equal Height Columns

Automatic equal-height columns without JavaScript hacks.

Browser Support

Flexbox enjoys excellent browser support across all modern browsers, including Chrome, Firefox, Safari, Edge, and mobile browsers. The W3C specification reached Candidate Recommendation status, indicating stable implementation across major browsers.

For projects requiring support for older browsers like Internet Explorer, specific prefixes and partial implementations may be necessary. Most modern web development can rely on unprefixed flexbox properties without fallback concerns.

Source: W3C CSS Flexible Box Layout Module Level 1

Frequently Asked Questions

When should I use flexbox vs. CSS Grid?

Use flexbox for one-dimensional layouts (rows OR columns) and component-level layouts. Use CSS Grid for two-dimensional layouts (rows AND columns) and page-level layouts.

How do I center an element with flexbox?

Set the parent to `display: flex` with `justify-content: center` and `align-items: center`. This centers children both horizontally and vertically.

Why are my flex items shrinking?

By default, `flex-shrink: 1` allows items to shrink. Set `flex-shrink: 0` on items that should not shrink, or increase `flex-basis` to prevent unwanted shrinking.

How do I create equal-height cards with flexbox?

Simply use `display: flex` on the container. Flex items automatically stretch to match the tallest item in the row.

Ready to Build Modern Layouts?

Our team creates responsive, performant websites using the latest CSS layout techniques including flexbox and CSS Grid.