Kombai Logo

Tailwind CSS Grid Auto Rows

Grid Auto Rows defines the size of implicit grid rows—rows that are automatically created instead of explicitly defined with grid-template-rows.

Tailwind CSS provides grid utilities to help you implement grid properties quickly. Among these utilities is a set of classes specifically dedicated to grid-auto-rows, allowing both beginner and advanced developers to define implicit row sizing with minimal effort.

ClassPropertiesExample
auto-rows-autogrid-auto-rows: auto;<div className="auto-rows-auto"></div>
auto-rows-mingrid-auto-rows: min-content;<div className="auto-rows-min"></div>
auto-rows-maxgrid-auto-rows: max-content;<div className="auto-rows-max"></div>
auto-rows-frgrid-auto-rows: minmax(0, 1fr);<div className="auto-rows-fr"></div>

Overview of Grid Auto Rows

Adding the Grid Auto Rows

To define the size of implicit rows in a grid container, use the auto-rows-* utilities, e.g., auto-rows-max, auto-rows-fr, etc.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

States and Responsiveness

Hover and Focus States

Tailwind allows you to conditionally apply the grid-auto-rows on certain states like hover and focus. Use Tailwind's state modifiers like- hover, focus, etc. to apply the utility only when these states are active, e.g., hover:auto-rows-fr.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Breakpoint Modifiers

Tailwind CSS provides breakpoint modifiers to conditionally apply the grid-auto-rows only when the screen hits the defined breakpoint. Use Tailwind's breakpoint modifiers like- sm, md, etc., to apply the utility only on these breakpoints and above.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Custom Grid Auto Rows

Extending the Theme

One way to incorporate your own grid-auto-rows values is by extending the Tailwind theme configuration. In your tailwind.config.js, you can define gridAutoRows properties that map to custom sizes.

This is especially useful if you have repeated patterns in your design system—like rows that always need to be at least 200px long or 50% of the available space.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Using Arbitrary Values

Tailwind CSS also lets you specify arbitrary values by enclosing them in square brackets. This is a quick way to handle one-off sizing needs without updating your configuration file. It’s ideal if you’re experimenting with new designs or need a unique size for a specific situation.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Real World Examples

Recipe Card Grid

A collection of recipe cards with varying content lengths, using auto rows to maintain consistent heights.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Task Board Layout

A kanban-style task board with cards of varying content length, using auto rows for consistent card heights.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Team Member Directory

A grid of team member cards with photos and varying amounts of information, using auto rows for consistent presentation.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Blog Post Grid

A responsive grid of blog post cards with featured images and varying content lengths, using auto rows for consistent presentation.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

A responsive product grid showcasing electronics items with equal height rows, maintaining consistent spacing and alignment.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Customization Examples

Small Cards Layout

A grid of small product cards that automatically adjusts rows based on a fixed width.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Dynamic News Feed

A responsive news feed layout where rows adjust based on content density.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

A gallery of profile cards with auto-sizing rows that maintain visual hierarchy and spacing.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Best Practices

Maintain Design Consistency

Using the auto-rows-* utility in Tailwind CSS should align with a structured design system to ensure visual harmony. Defining consistent row sizes across different sections prevents unexpected layout shifts. When applying auto-rows-min or auto-rows-max, consider their impact on elements with dynamic content, such as user-generated text or interactive elements.

Maintaining a predictable structure is particularly important in large-scale applications, where multiple developers may contribute. By using auto-rows-fr, you can distribute space proportionally, creating a balanced interface that adapts to varying amounts of content.

Optimize for Reusability

A well-structured grid system using auto-rows-* should be designed for scalability and reusability. Creating reusable components that adapt to different content types ensures consistency throughout a project. By encapsulating grid layouts within these components, different sections can remain flexible without redundant code.

For example, a card layout can use auto-rows-min to prevent content-heavy cards from collapsing while keeping shorter content compact. A generic grid component that accepts auto-rows-* values as props improves adaptability across various contexts. This approach reduces maintenance effort and maintains a consistent design system.

Reusability also plays a key role in responsive design. Defining breakpoints within reusable components allows layouts to adjust seamlessly to different screen sizes. By focusing on scalability, auto-rows-* can be effectively used across multiple sections while ensuring a consistent user experience.

Accessibility Considerations

Enhance Readability and Navigability

When rows are too compressed, text and interactive elements can become difficult to distinguish, impacting readability. Using auto-rows-fr distributes space dynamically, maintaining an organized layout that improves user engagement.

For navigability, defining consistent row heights prevents erratic jumps when navigating through content with assistive technologies.

Additionally, pairing auto-rows-* with focus-visible:outline-* ensures that interactive elements remain accessible. Clear focus indicators guide users through interactive components, improving overall accessibility. By considering readability and navigability, auto-rows-* contributes to an inclusive design.

Focus on High Contrast

Ensuring sufficient contrast is crucial for users with visual impairments. When using auto-rows-* in grid layouts, maintaining clear text and background contrast improves accessibility. Pairing bg-* utilities with auto-rows-* prevents readability issues caused by blending colors.

For example, light-colored text on a white background can become unreadable, especially when text wraps across multiple lines. Using text-black or text-white ensures proper contrast. Adding border-* utilities alongside auto-rows-* helps separate sections, making content easier to distinguish.