DEV Community

Cover image for How to Create Advanced Nested Flex and Grid Layouts with Tailwind CSS
Rowsan Ali
Rowsan Ali

Posted on

How to Create Advanced Nested Flex and Grid Layouts with Tailwind CSS

Tailwind CSS has revolutionized the way developers build modern, responsive web layouts. Its utility-first approach allows for rapid prototyping and highly customizable designs. One of the most powerful features of Tailwind is its ability to create advanced nested layouts using Flexbox and CSS Grid. In this blog post, we’ll explore how to create complex, nested layouts by combining Flexbox and Grid with Tailwind CSS.

Table of Contents

  1. Introduction to Flexbox and Grid in Tailwind
  2. Creating a Basic Flex Layout
  3. Nesting Flex Containers
  4. Creating a Basic Grid Layout
  5. Nesting Grid Containers
  6. Combining Flex and Grid for Advanced Layouts
  7. Responsive Design with Tailwind
  8. Conclusion

1. Introduction to Flexbox and Grid in Tailwind

Tailwind CSS provides utility classes for both Flexbox and CSS Grid, making it easy to create layouts without writing custom CSS. Here’s a quick overview:

  • Flexbox: Tailwind provides utilities like flex, flex-row, flex-col, justify-*, and items-* to control alignment, direction, and spacing.
  • CSS Grid: Tailwind offers utilities like grid, grid-cols-*, grid-rows-*, gap-*, and place-* to define grid structures and positioning.

By combining these utilities, you can create sophisticated nested layouts.

2. Creating a Basic Flex Layout

Let’s start with a simple Flexbox layout. Suppose you want to create a header with a logo on the left and navigation links on the right.

<div class="flex justify-between items-center p-4 bg-gray-800 text-white">
  <div class="text-lg font-bold">Logo</div>
  <nav class="flex space-x-4">
    <a href="#" class="hover:text-gray-400">Home</a>
    <a href="#" class="hover:text-gray-400">About</a>
    <a href="#" class="hover:text-gray-400">Contact</a>
  </nav>
</div>
Enter fullscreen mode Exit fullscreen mode

In this example:

  • flex enables Flexbox.
  • justify-between spaces the logo and navigation apart.
  • items-center vertically centers the items.
  • space-x-4 adds horizontal spacing between navigation links.

3. Nesting Flex Containers

Now, let’s nest Flex containers to create a more complex layout. Imagine a card with an image on the left and text content on the right, where the text content itself has a nested Flex layout.

<div class="flex p-6 border rounded-lg shadow-lg">
  <!-- Image -->
  <img src="https://via.placeholder.com/150" alt="Placeholder" class="w-32 h-32 rounded-lg">

  <!-- Text Content -->
  <div class="flex flex-col justify-between ml-6">
    <div>
      <h2 class="text-xl font-bold">Card Title</h2>
      <p class="text-gray-600">This is a description of the card content.</p>
    </div>
    <div class="flex space-x-4">
      <button class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">Action 1</button>
      <button class="px-4 py-2 bg-gray-500 text-white rounded hover:bg-gray-600">Action 2</button>
    </div>
  </div>
</div>
Enter fullscreen mode Exit fullscreen mode

Here:

  • The outer flex container aligns the image and text side by side.
  • The inner flex container (inside the text content) arranges the buttons horizontally.

4. Creating a Basic Grid Layout

Next, let’s create a simple grid layout. Suppose you want a 3-column grid with equal-width items.

<div class="grid grid-cols-3 gap-4">
  <div class="p-4 bg-blue-100">Item 1</div>
  <div class="p-4 bg-blue-200">Item 2</div>
  <div class="p-4 bg-blue-300">Item 3</div>
</div>
Enter fullscreen mode Exit fullscreen mode

In this example:

  • grid enables CSS Grid.
  • grid-cols-3 creates three equal-width columns.
  • gap-4 adds spacing between grid items.

5. Nesting Grid Containers

Let’s nest a grid inside another grid. Imagine a dashboard layout with a sidebar and a main content area, where the main content area itself is a grid.

<div class="grid grid-cols-4 h-screen">
  <!-- Sidebar -->
  <aside class="col-span-1 bg-gray-800 text-white p-4">
    <h2 class="text-lg font-bold">Sidebar</h2>
    <ul class="mt-4 space-y-2">
      <li><a href="#" class="hover:text-gray-400">Link 1</a></li>
      <li><a href="#" class="hover:text-gray-400">Link 2</a></li>
    </ul>
  </aside>

  <!-- Main Content -->
  <main class="col-span-3 p-4">
    <div class="grid grid-cols-2 gap-4">
      <div class="p-4 bg-green-100">Widget 1</div>
      <div class="p-4 bg-green-200">Widget 2</div>
      <div class="p-4 bg-green-300">Widget 3</div>
      <div class="p-4 bg-green-400">Widget 4</div>
    </div>
  </main>
</div>
Enter fullscreen mode Exit fullscreen mode

Here:

  • The outer grid divides the layout into a sidebar and main content area.
  • The inner grid (inside the main content) creates a 2-column layout for widgets.

6. Combining Flex and Grid for Advanced Layouts

Now, let’s combine Flexbox and Grid to create a more advanced layout. Imagine a blog post layout with a header, a main content area, and a footer. The main content area uses Flexbox, while the footer uses Grid.

<div class="min-h-screen flex flex-col">
  <!-- Header -->
  <header class="p-4 bg-blue-500 text-white">
    <h1 class="text-2xl font-bold">My Blog</h1>
  </header>

  <!-- Main Content -->
  <main class="flex-1 p-4">
    <article>
      <h2 class="text-xl font-bold">Blog Post Title</h2>
      <p class="mt-2">This is the content of the blog post.</p>
    </article>
  </main>

  <!-- Footer -->
  <footer class="grid grid-cols-3 gap-4 p-4 bg-gray-800 text-white">
    <div>Footer Section 1</div>
    <div>Footer Section 2</div>
    <div>Footer Section 3</div>
  </footer>
</div>
Enter fullscreen mode Exit fullscreen mode

In this example:

  • The outer flex container creates a column layout for the entire page.
  • The flex-1 class ensures the main content takes up the remaining space.
  • The footer uses a 3-column grid for its sections.

7. Responsive Design with Tailwind

Tailwind makes it easy to create responsive layouts. Let’s make the blog post layout responsive by adjusting the footer grid on smaller screens.

<footer class="grid grid-cols-1 md:grid-cols-3 gap-4 p-4 bg-gray-800 text-white">
  <div>Footer Section 1</div>
  <div>Footer Section 2</div>
  <div>Footer Section 3</div>
</footer>
Enter fullscreen mode Exit fullscreen mode

Here:

  • On small screens (grid-cols-1), the footer sections stack vertically.
  • On medium screens and above (md:grid-cols-3), the footer sections align horizontally.

8. Conclusion

Tailwind CSS’s utility-first approach makes it incredibly powerful for creating advanced nested layouts with Flexbox and CSS Grid. By combining these tools, you can build complex, responsive designs without writing custom CSS. Whether you’re creating a simple card or a full-page dashboard, Tailwind’s flexibility and ease of use will save you time and effort.

Experiment with the examples provided, and don’t hesitate to explore Tailwind’s documentation for more advanced utilities and features. Happy coding!

Top comments (0)