Flexbox Properties in Tailwind CSS: A Complete Guide
Flexbox is one of the most commonly used CSS layout systems for building responsive web interfaces. It makes it easier to arrange elements in rows or columns, control alignment, distribute available space, and create flexible layouts.
If you are using Tailwind CSS, you don't need to write traditional CSS
properties such as display: flex,
justify-content, or align-items manually.
Tailwind provides utility classes that map directly to these Flexbox
properties.
For example, traditional CSS might look like this:
.container {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
}
The same layout can be created in Tailwind CSS using:
<div class="flex items-center justify-center gap-4">
...
</div>
This makes Flexbox layouts faster to build while keeping your HTML closely connected to the layout rules.
In this guide, you'll learn the most important
Flexbox properties in Tailwind CSS, including
flex, flex-row, flex-col,
justify-*, items-*, flex-wrap,
gap-*, grow, shrink,
basis-*, and more.
What Is Flexbox?
Flexbox, short for Flexible Box Layout, is a CSS layout model designed to arrange elements along a single axis.
That axis can be:
- Horizontal
- Vertical
A Flexbox container has two important concepts:
Main Axis
The main axis is determined by the
flex-direction property.
For example:
flex-direction: row;
creates a horizontal main axis.
flex-direction: column;
creates a vertical main axis.
Cross Axis
The cross axis runs perpendicular to the main axis.
Main Axis →
┌────────┬────────┬────────┐
│ Item 1 │ Item 2 │ Item 3 │
└────────┴────────┴────────┘
↑
Cross Axis
Understanding the main axis and cross axis is important because
properties such as justify-content and
align-items operate relative to these axes.
Why Use Flexbox with Tailwind CSS?
Tailwind CSS provides utility classes for almost every commonly used Flexbox property.
Instead of writing:
display: flex;
you can use:
<div class="flex">
Instead of:
justify-content: space-between;
you can use:
<div class="justify-between">
And instead of:
align-items: center;
you can use:
<div class="items-center">
This approach provides several advantages:
- Faster development
- Responsive utilities
- Less custom CSS
- Consistent styling
- Easier component-level layout
- Simple breakpoint-specific changes
1. display: flex — The flex Utility
Before using most Flexbox properties, an element needs to become a flex container.
In traditional CSS:
.container {
display: flex;
}
In Tailwind CSS:
<div class="flex">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
The flex utility applies:
display: flex;
This changes the element into a Flexbox container and its direct children become flex items.
Example
<div class="flex">
<div class="p-4">One</div>
<div class="p-4">Two</div>
<div class="p-4">Three</div>
</div>
Without flex, the child elements will follow their
normal layout behavior.
2. Flex Direction
The CSS property flex-direction controls the direction
of flex items.
flex-row
<div class="flex flex-row">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
Equivalent CSS:
flex-direction: row;
This is the default direction for a flex container.
One → Two → Three
flex-row-reverse
<div class="flex flex-row-reverse">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
Equivalent CSS:
flex-direction: row-reverse;
The items are displayed in reverse horizontal order.
Three → Two → One
flex-col
<div class="flex flex-col">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
Equivalent CSS:
flex-direction: column;
Items are arranged vertically:
One
↓
Two
↓
Three
flex-col-reverse
<div class="flex flex-col-reverse">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
Equivalent CSS:
flex-direction: column-reverse;
The vertical order is reversed.
3. Justify Content
The CSS property justify-content controls how flex
items are distributed along the main axis.
justify-start
<div class="flex justify-start">
...
</div>
Equivalent CSS:
justify-content: flex-start;
Items are placed at the beginning of the main axis.
justify-end
<div class="flex justify-end">
...
</div>
Equivalent CSS:
justify-content: flex-end;
Items move toward the end of the main axis.
justify-center
<div class="flex justify-center">
...
</div>
Equivalent CSS:
justify-content: center;
Items are centered along the main axis.
justify-between
<div class="flex justify-between">
<span>Logo</span>
<span>Menu</span>
</div>
Equivalent CSS:
justify-content: space-between;
The first item is placed at the beginning and the last item at the end, with available space distributed between them.
This is especially useful for headers and navigation bars.
justify-around
<div class="flex justify-around">
...
</div>
Equivalent CSS:
justify-content: space-around;
Space is distributed around the flex items.
justify-evenly
<div class="flex justify-evenly">
...
</div>
Equivalent CSS:
justify-content: space-evenly;
Equal spacing is created between the items and the container edges.
4. Align Items
The CSS property align-items controls how flex items
are aligned along the cross axis.
items-start
<div class="flex items-start">
...
</div>
Equivalent CSS:
align-items: flex-start;
items-end
<div class="flex items-end">
...
</div>
Equivalent CSS:
align-items: flex-end;
items-center
<div class="flex items-center">
...
</div>
Equivalent CSS:
align-items: center;
This is one of the most frequently used Flexbox utilities in Tailwind CSS.
For example:
<div class="flex items-center">
<img src="/avatar.png" alt="User avatar" />
<span>John Doe</span>
</div>
The image and text will be vertically aligned when the flex direction is a row.
items-baseline
<div class="flex items-baseline">
...
</div>
Equivalent CSS:
align-items: baseline;
The flex items are aligned according to their text baselines.
items-stretch
<div class="flex items-stretch">
...
</div>
Equivalent CSS:
align-items: stretch;
Items stretch across the cross axis when possible.
5. Align Self
Sometimes you want to override the alignment of one individual flex item instead of changing the alignment of every item.
CSS provides the align-self property.
Tailwind provides utilities such as:
self-startself-endself-centerself-stretchself-baselineself-auto
Example:
<div class="flex items-center">
<div>Item 1</div>
<div class="self-start">
Item 2
</div>
<div>Item 3</div>
</div>
Here, the parent uses items-center, but
Item 2 overrides that alignment using
self-start.
6. Flex Wrap
By default, flex items try to remain on one line.
The CSS property flex-wrap controls whether items can
wrap onto multiple lines.
flex-nowrap
<div class="flex flex-nowrap">
...
</div>
Equivalent CSS:
flex-wrap: nowrap;
Items remain on a single line.
flex-wrap
<div class="flex flex-wrap">
...
</div>
Equivalent CSS:
flex-wrap: wrap;
Items move to another line when there is not enough space.
This is useful for:
- Card grids
- Tags
- Buttons
- Product lists
- Responsive navigation elements
Example:
<div class="flex flex-wrap gap-4">
<div class="w-48">Card 1</div>
<div class="w-48">Card 2</div>
<div class="w-48">Card 3</div>
<div class="w-48">Card 4</div>
</div>
flex-wrap-reverse
<div class="flex flex-wrap-reverse">
...
</div>
Equivalent CSS:
flex-wrap: wrap-reverse;
Items wrap in the reverse cross-axis direction.
7. Gap Between Flex Items
Tailwind's gap-* utilities make spacing between flex
items easy.
<div class="flex gap-4">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
This adds a consistent gap between the items.
Horizontal Gap
<div class="flex gap-x-4">
...
</div>
Vertical Gap
<div class="flex flex-wrap gap-y-6">
...
</div>
Using gap-* is often cleaner than adding individual
margins to children.
8. Flex Grow
The CSS property flex-grow controls whether a flex item
can grow to consume available space.
Tailwind provides:
grow
and:
grow-0
Example:
<div class="flex">
<div>Sidebar</div>
<div class="grow">
Main Content
</div>
</div>
The main content can grow and occupy the remaining available space.
You can also use grow-0 to prevent an item from growing.
9. Flex Shrink
The CSS property flex-shrink controls whether a flex
item can shrink when there isn't enough space.
Tailwind provides:
shrink
and:
shrink-0
For example:
<div class="flex">
<div class="shrink-0">
Sidebar
</div>
<div>
Content
</div>
</div>
shrink-0 prevents the sidebar from shrinking.
This is useful for fixed-width navigation panels, icons, buttons, and other elements that should preserve their size.
10. Flex Basis
The CSS property flex-basis defines the initial size of
a flex item before available space is distributed.
Tailwind provides utilities such as:
basis-1/2
basis-1/3
basis-1/4
basis-full
For example:
<div class="flex">
<div class="basis-1/2">
Left
</div>
<div class="basis-1/2">
Right
</div>
</div>
Each item starts with a basis of 50%.
This is useful when creating flexible two-column or multi-column layouts.
11. The flex-1 Utility
One of the most useful Tailwind utilities is:
flex-1
It allows a flex item to grow and shrink as needed while distributing available space.
Example:
<div class="flex gap-4">
<div class="flex-1">Column 1</div>
<div class="flex-1">Column 2</div>
<div class="flex-1">Column 3</div>
</div>
The columns can share the available space.
This is commonly used for:
- Dashboard layouts
- Navigation bars
- Form fields
- Two-column layouts
- Responsive components
12. Ordering Flex Items
CSS provides the order property to control the visual
order of flex items.
Tailwind provides utilities such as:
order-first
order-last
order-none
Tailwind also provides numbered order utilities.
Example:
<div class="flex">
<div class="order-2">First in HTML</div>
<div class="order-1">Second in HTML</div>
</div>
The second element will appear visually before the first.
This becomes especially powerful with responsive design.
<div class="flex flex-col md:flex-row">
<div class="order-2 md:order-1">
Main Content
</div>
<div class="order-1 md:order-2">
Sidebar
</div>
</div>
The visual order can change at the md breakpoint.
13. Flexbox with Responsive Design
One of the biggest advantages of Tailwind CSS is that Flexbox utilities can be combined with responsive prefixes.
For example:
<div class="flex flex-col md:flex-row">
<div class="flex-1">Content</div>
<div class="flex-1">Sidebar</div>
</div>
On smaller screens:
Content
Sidebar
On medium and larger screens:
Content | Sidebar
You can also change alignment responsively:
<div class="flex justify-center md:justify-between">
...
</div>
Or change direction and spacing:
<div class="flex flex-col gap-4 md:flex-row md:gap-8">
...
</div>
This makes responsive layouts much easier to build.
14. Practical Example: Responsive Navbar
Let's combine several Flexbox utilities to build a simple navigation layout.
<header class="flex items-center justify-between p-4">
<div class="text-xl font-bold">
My Website
</div>
<nav class="flex items-center gap-6">
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Blog</a>
<a href="#">Contact</a>
</nav>
</header>
Important utilities here are:
flex
items-center
justify-between
gap-6
Together, they create a horizontally aligned navigation bar with consistent spacing.
15. Practical Example: Responsive Card Layout
Flexbox can also be used to create responsive card layouts.
<div class="flex flex-wrap gap-6">
<article class="w-full md:w-[calc(50%-12px)] lg:w-[calc(33.333%-16px)]">
<h2>Card One</h2>
<p>Card content.</p>
</article>
<article class="w-full md:w-[calc(50%-12px)] lg:w-[calc(33.333%-16px)]">
<h2>Card Two</h2>
<p>Card content.</p>
</article>
<article class="w-full md:w-[calc(50%-12px)] lg:w-[calc(33.333%-16px)]">
<h2>Card Three</h2>
<p>Card content.</p>
</article>
</div>
The parent uses:
flex flex-wrap gap-6
This allows the cards to wrap when there isn't enough horizontal space.
16. Practical Example: Centering Content
One of the most common Flexbox requirements is centering content both horizontally and vertically.
With Tailwind CSS:
<div class="flex min-h-screen items-center justify-center">
<div>
<h1>Hello Tailwind</h1>
</div>
</div>
The important utilities are:
flex
items-center
justify-center
items-center handles the cross axis, while
justify-center handles the main axis.
When the container uses the default row direction, this results in horizontal and vertical centering.
17. Flexbox Utility Cheat Sheet
Here is a quick reference for commonly used Flexbox utilities in Tailwind CSS.
| CSS Property | Tailwind Utility |
|---|---|
display: flex |
flex |
flex-direction: row |
flex-row |
flex-direction: row-reverse |
flex-row-reverse |
flex-direction: column |
flex-col |
flex-direction: column-reverse |
flex-col-reverse |
justify-content: flex-start |
justify-start |
justify-content: flex-end |
justify-end |
justify-content: center |
justify-center |
justify-content: space-between |
justify-between |
justify-content: space-around |
justify-around |
justify-content: space-evenly |
justify-evenly |
align-items: flex-start |
items-start |
align-items: flex-end |
items-end |
align-items: center |
items-center |
align-items: baseline |
items-baseline |
align-items: stretch |
items-stretch |
flex-wrap: nowrap |
flex-nowrap |
flex-wrap: wrap |
flex-wrap |
flex-wrap: wrap-reverse |
flex-wrap-reverse |
flex-grow: 1 |
grow |
flex-grow: 0 |
grow-0 |
flex-shrink: 1 |
shrink |
flex-shrink: 0 |
shrink-0 |
flex: 1 |
flex-1 |
align-self: center |
self-center |
align-self: flex-start |
self-start |
align-self: flex-end |
self-end |
order |
order-* |
gap |
gap-* |
column-gap |
gap-x-* |
row-gap |
gap-y-* |
flex-basis |
basis-* |
Common Flexbox Mistakes in Tailwind CSS
Understanding the utility classes is important, but knowing common mistakes can save a lot of debugging time.
Mistake 1: Forgetting flex
This won't create a Flexbox layout:
<div class="justify-center items-center">
You need:
<div class="flex justify-center items-center">
Mistake 2: Confusing justify-* and items-*
Remember:
justify-* → Main Axis
items-* → Cross Axis
For the default flex-row direction:
justify → horizontal
items → vertical
But if you change to:
flex-col
the axes change.
Therefore, don't memorize
justify = horizontal and
items = vertical as universal rules.
Think in terms of main axis and cross axis.
Mistake 3: Using Margins Everywhere for Spacing
Instead of:
<div class="flex">
<div class="mr-4">One</div>
<div class="mr-4">Two</div>
<div>Three</div>
</div>
you can often use:
<div class="flex gap-4">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
This produces cleaner and more predictable spacing.
Mistake 4: Forgetting Flex Wrapping
If you have many items inside a narrow container, they may become squeezed or overflow.
Consider:
<div class="flex flex-wrap gap-4">
...
</div>
when your design requires items to move onto additional lines.
Flexbox vs Grid in Tailwind CSS
Flexbox and CSS Grid are both powerful layout systems, but they are designed for different types of problems.
Use Flexbox When:
- You are primarily working along one dimension.
- You need horizontal or vertical alignment.
- You are building navigation bars.
- You need flexible spacing between items.
- You are arranging buttons or form controls.
- You need content-based sizing.
Use Grid When:
- You need two-dimensional layouts.
- Rows and columns need to work together.
- You are creating complex page layouts.
- You need explicit column or row structures.
For example, a navigation bar is often a good Flexbox use case:
<nav class="flex items-center justify-between">
...
</nav>
A dashboard with structured columns may be better suited to Grid:
<div class="grid grid-cols-3 gap-6">
...
</div>
The important thing is not choosing one system for everything. Choose the layout system that matches the problem.
Best Practices for Using Flexbox in Tailwind CSS
1. Think About the Axis
Before choosing a utility, identify the main axis.
Ask:
Is my layout a row or a column?
Then choose your alignment utilities accordingly.
2. Prefer gap-* for Spacing
Use:
gap-4
when you need consistent spacing between flex items instead of adding unnecessary margins to individual children.
3. Use Responsive Utilities
Tailwind makes responsive Flexbox layouts straightforward:
flex-col md:flex-row
Instead of creating separate CSS media queries, you can express the layout directly in your markup.
4. Don't Use Flexbox for Everything
Flexbox is excellent for one-dimensional layouts, but CSS Grid can be more appropriate for complex two-dimensional layouts.
5. Keep Utility Classes Intentional
Avoid adding Flexbox utilities without understanding what each one changes.
For example:
<div class="flex items-center justify-between gap-4">
...
</div>
is useful because each utility has a clear purpose.
Conclusion
Flexbox is one of the most important layout systems to understand when working with Tailwind CSS.
Tailwind doesn't replace Flexbox. Instead, it provides convenient utility classes that map directly to Flexbox's CSS properties.
The most important utilities to remember are:
flex
flex-row
flex-col
justify-start
justify-center
justify-between
justify-evenly
items-start
items-center
items-end
flex-wrap
flex-nowrap
gap-*
grow
shrink
flex-1
basis-*
self-*
order-*
Once you understand the relationship between the main axis, cross axis, and these Tailwind utilities, building responsive layouts becomes much easier.
The key is to understand the underlying CSS property first and then use the corresponding Tailwind utility to implement it quickly.
Learn the CSS concept → Understand the Tailwind utility → Build the layout → Practice with responsive designs.

Post a Comment