← Back to all tutorials

How to create a responsive bento grid with Tailwind CSS

bento grid
Published and written on Aug 10 2024 by Michael Andreuzza

A bento grid, today that’s what we are going to create. It’s a grid layout that allows you to place items in a specific pattern, like a bento box.

What are bento grids?

A Bento grid is a structured, compartmentalized grid layout inspired by the traditional Japanese bento box. Each item in a Bento grid is placed in a distinct, predefined area, allowing for a clean and organized presentation. The compartments can be of consistent or varying sizes, but they remain clearly separated, ensuring that each piece of content is visually distinct and neatly arranged.

This grid design is particularly useful for organizing diverse types of content in a way that is both functional and aesthetically pleasing, offering a balance between structure and flexibility.

Use Cases:

  • Dashboards: Organizing various widgets or data visualizations in distinct sections, ensuring clarity and ease of navigation.
  • Portfolios: Displaying different projects or artworks in separate compartments, giving each piece its own space to shine.
  • Product Displays: Arranging multiple products or product features in a structured layout, enhancing the browsing experience.
  • Content Management: Separating articles, videos, and images in a blog or news site to maintain a clean and organized interface.
  • E-commerce: Structuring product categories or features in a way that guides users through the shopping experience with clear visual separation.

The Bento grid is ideal for any situation where organization and clarity are paramount, and you want to maintain a visually appealing, compartmentalized layout.

Now, the markup

Lets create the wrapper with the grid and the content inside the boxes.

  • grid: This is a utility class that sets the display property of the element to grid.
  • grid-cols-1: This is a utility class that sets the grid-template-columns property of the element to a single column.
  • md:grid-cols-4: This is a responsive utility class that sets the grid-template-columns property of the element to 4 columns on medium-sized screens and up.
  • gap-4: This is a utility class that sets the grid-gap property of the element to 1rem (4px).
  • lg:grid-cols-6: This is a responsive utility class that sets the grid-template-columns property of the element to 6 columns on large-sized screens and up.
<div class="grid grid-cols-1 md:grid-cols-4 gap-4 lg:grid-cols-6">
    <!-- All boxes goes inside here -->
</div>

Now, the boxes, one by one

Let’s create the 10 boxes we need for this grid so you see how the grid works. Note that styling is not important, we are just going to create the boxes with the key classes, so the clases for visual styling are gone together with the content of this ones.

The first box

  • md:col-span-2: This is a responsive utility class that sets the grid-column property of the element to 2 columns on medium-sized screens and up.
  • md:row-span-2: This is a responsive utility class that sets the grid-row property of the element to 2 rows on medium-sized screens and up.
<div class="md:col-span-2 md:row-span-2">
  <!-- Content goes here -->
</div>

The second box

  • md:row-span-2: This is a responsive utility class that sets the grid-row property of the element to 2 rows on medium-sized screens and up.
<div class="md:row-span-2">
  <!-- Content goes here -->
</div>

The third box

  • md:row-span-3: This is a responsive utility class that sets the grid-row property of the element to 3 rows on medium-sized screens and up.
  • lg:row-span-2: This is a responsive utility class that sets the grid-row property of the element to 2 rows on large-sized screens and up.
<div class="md:row-span-3 lg:row-span-2">
  <!-- Content goes here -->
</div>

The fourth box

  • md:col-span-2: This is a responsive utility class that sets the grid-column property of the element to 2 columns on medium-sized screens and up.
<div class="md:col-span-2">
  <!-- Content goes here -->
</div>

The fifth box

  • lg:row-span-2: This is a responsive utility class that sets the grid-row property of the element to 2 rows on large-sized screens and up.
  • lg:col-span-2: This is a responsive utility class that sets the grid-column property of the element to 2 columns on large-sized screens and up.
<div class="md:row-span-2 lg:col-span-2">
  <!-- Content goes here -->
</div>

The sixth box

  • md:col-span-2: This is a responsive utility class that sets the grid-column property of the element to 2 columns on medium-sized screens and up.
<div class="md:col-span-2">
  <!-- Content goes here -->
</div>

The seventh box

  • lg:col-span-2: This is a responsive utility class that sets the grid-column property of the element to 2 columns on large-sized screens and up.
<div class="lg:col-span-2">
  <!-- Content goes here -->
</div>

The eighth box

  • md:col-span-3: This is a responsive utility class that sets the grid-column property of the element to 3 columns on medium-sized screens and up.
<div class="md:col-span-3">
  <!-- Content goes here -->
</div>

The ninth box

  • lg:col-span-2: This is a responsive utility class that sets the grid-column property of the element to 2 columns on large-sized screens and up.
<div class="lg:col-span-2">
  <!-- Content goes here -->
</div>

The tenth and last box

  • col-span-full: This is a utility class that sets the grid-column property of the element to the number of columns in the grid.
  • lg:col-span-1: This is a responsive utility class that sets the grid-column property of the element to 1 column on large-sized screens and up.
<div class="col-span-full lg:col-span-1">
  <!-- Content goes here -->
</div>

The full markup

Here is the full code, without visual style classes and boxes content.

As you can see that the grid is responsive and adjusts to different screen sizes when you resize the browser. While some boxes share the same classes, others have unique ones, which gives the grid its flexibility.

<div class="grid grid-cols-1 md:grid-cols-4 gap-4 lg:grid-cols-6">
  <!-- 1 Large box spanning 2x2 -->
  <div class="rounded-xl md:col-span-2 md:row-span-2"></div>
  <!-- 2 Tall box spanning 2 rows -->
  <div class="rounded-xl md:row-span-2"></div>
  <!-- 3 Regular box -->
  <div class="rounded-xl md:row-span-3 lg:row-span-2"></div>
  <!-- 4 Wide box spanning 2 columns -->
  <div class="rounded-xl md:col-span-2"></div>
  <!-- 5 Tall box spanning 2 rows -->
  <div class="rounded-xl md:row-span-2 lg:col-span-2"></div>
  <!-- 6 Regular boxes -->
  <div class="rounded-xl md:col-span-2"></div>
  <!-- 7  box -->
  <div class="rounded-xl lg:col-span-2"></div>
  <!-- 8 Wide box spanning 3 columns -->
  <div class="rounded-xl md:col-span-3"></div>
  <!-- 9 Regular boxes -->
  <div class="rounded-xl lg:col-span-2"></div>
  <!-- 10 box -->
  <div class="rounded-xl col-span-full lg:col-span-1"></div>
</div>

Conclusion

This is a complex grid that demonstrates how to use Tailwind CSS to create a grid with a predefined set of styles. It’s a great way to organize content and make it more visually appealing and user-friendly.

Hope you enjoyed this tutorial and have a great day!

/Michael Andreuzza

Did you like this tutorial? Please share it with your friends!

Reviews and opinions

Get lifetime access to every theme available today for $199 and own them forever. Plus, new themes, lifetime updates, use on unlimited projects and enjoy lifetime support.

No subscription required!

Lexington

Beautifully designed HTML, Astro.js and Tailwind themes! Save months of time and build your startup landing page in minutes.