Skip to content

Tailwind CSS - Flex Grow

Welcome to the updated guide on Tailwind CSS’s Flex Grow utilities. This tutorial will teach you how to control the growth of flex items within a flex container, using modern best practices and real-world examples.

The flex-grow property in CSS defines the ability for a flex item to grow if necessary. It accepts a unitless value that serves as a proportion. It dictates what amount of the available space inside the flex container the item should take up.

Tailwind provides simple utility classes to manage this behavior.

Tailwind’s primary utilities for controlling flex growth are straightforward:

ClassCSS PropertiesDescription
growflex-grow: 1;Allows the flex item to grow and fill any available space in the container.
grow-0flex-grow: 0;Prevents the flex item from growing, retaining its default size.

Let’s see these utilities in action. We’ll build a common layout pattern: a card with a fixed-size icon, a growing content area, and a fixed-size button.

In this example, the middle div has the grow class. It will expand to occupy all remaining horizontal space in the flex container, pushing the third item to the far right. This is perfect for layouts where one element needs to be fluid.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tailwind Flex Grow Example</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-slate-100 p-8">
<h2 class="text-2xl font-bold mb-4">Card with a Growing Section</h2>
<div class="max-w-md mx-auto bg-white rounded-xl shadow-md overflow-hidden">
<div class="flex items-center p-4 border-b">
<!-- Item 1: No grow, fixed size -->
<div class="flex-none p-3 bg-sky-200 text-sky-800 rounded-lg">
<svg class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" /></svg>
</div>
<!-- Item 2: Grows to fill available space -->
<div class="grow ml-4">
<p class="text-slate-800 font-semibold">Information</p>
<p class="text-slate-500 text-sm">This section expands as needed.</p>
</div>
<!-- Item 3: No grow, content-based size -->
<div class="flex-none ml-4">
<button class="px-4 py-2 bg-blue-500 text-white text-sm font-medium rounded-md hover:bg-blue-600">Details</button>
</div>
</div>
</div>
</body>
</html>

Example 2: Preventing a Flex Item from Growing

Section titled “Example 2: Preventing a Flex Item from Growing”

Here, we apply grow-0 to the middle item. Notice how it now only takes up the space defined by its content and padding. The extra space in the flex container remains empty.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Tailwind Flex Grow-0 Example</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-slate-100 p-8">
<h2 class="text-2xl font-bold mb-4">Layout with a Non-Growing Section</h2>
<div class="w-full bg-white p-4 rounded-lg shadow-md">
<div class="flex bg-slate-200 p-2 rounded-md">
<div class="flex-none bg-indigo-500 text-white p-4 rounded">
Item 1 (flex-none)
</div>
<!-- This item will NOT grow -->
<div class="grow-0 bg-amber-500 text-white p-4 mx-4 rounded">
Item 2 (grow-0)
</div>
<div class="flex-none bg-indigo-500 text-white p-4 rounded">
Item 3 (flex-none)
</div>
</div>
</div>
</body>
</html>
  • Responsive Growth: Combine grow with responsive prefixes to change layout on different screen sizes. For example, md:grow will only apply the grow behavior on medium screens and up.
  • Combining with flex-shrink and flex-basis: For complex layouts, grow works alongside shrink (how an item shrinks) and basis (the ideal starting size of an item). Tailwind has utilities for these too (shrink, basis-*).
  • Modern Development Workflow: While the CDN is great for demos, real projects should use Tailwind CSS with a build tool like Vite or the Tailwind CLI. This enables features like purging unused styles for smaller production files and customizing your tailwind.config.js file.
  • Forgetting the flex Parent: The grow and grow-0 utilities only work on direct children of an element with display: flex (the flex class in Tailwind).
  • Using w-full on a Grow Item: Applying a width utility like w-full to an item with grow is often redundant, as grow is already designed to manage the item’s size along the main axis.