CSS Portal

CSS grid-template-rows Property

If this site has been useful, we’d love your support! Consider buying us a coffee to keep things going strong!

Description

The grid-template-rows property establishes the explicit set of row tracks for a grid container and determines how vertical space is partitioned among those tracks. It defines the number and sequence of rows the layout will consider when placing grid items, and therefore it directly affects how items span vertically, how they are positioned within the grid, and which tracks become available for placement. Because it creates the explicit grid along the block axis, it is a primary tool for controlling the overall vertical rhythm and structure of a grid-based layout.

When content is placed outside the explicit rows you declared, the layout will create implicit rows to accommodate it; the sizing behavior of those generated rows is governed separately by grid-auto-rows. On the paired axis, the equivalent control over column tracks is provided by grid-template-columns, and both row and column track definitions can be set together via the shorthand grid. How items are assigned to the explicit or implicit tracks — whether they fill rows in row-major order, column-major order, or follow other placement rules — is influenced by grid-auto-flow, so those properties work together to determine final placement and the generation of additional tracks.

The way tracks defined by grid-template-rows actually end up measuring on the page depends on a mix of the grid container’s available space, the intrinsic sizing behaviors of the grid items, and alignment rules. Vertical alignment of items within those rows is controlled by alignment properties, for example align-items, and overflow or content-driven growth can cause tracks to expand beyond an initially intended rhythm. In responsive layouts, adjusting the row-template structure lets you switch between predictable fixed-height rows and content-sized or flexible tracks to accommodate varying content and viewport sizes. In short, grid-template-rows provides the explicit vertical scaffolding of a grid, while its interactions with implicit-track rules, placement, and alignment determine the final spacing and behavior of grid content.

Definition

Initial value
none
Applies to
Grid containers
Inherited
No
Computed value
As specified
Animatable
Yes
JavaScript syntax
object.style.gridTemplateRows

Interactive Demo

One
Two
Three
Four
Five

Syntax

grid-template-rows: none | <track-list> | <auto-track-list>
where 
<track-list> = [ <line-names>? [ <track-size> | <track-repeat> ] ]+ <line-names>?
<auto-track-list> = [ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>? <auto-repeat>
[ <line-names>? [ <fixed-size> | <fixed-repeat> ] ]* <line-names>?
where 
<line-names> = '[' <custom-ident>* ']'
<track-size> = <track-breadth> | minmax( <inflexible-breadth> , <track-breadth> ) | fit-content( [ <length> | <percentage> ] )
<track-repeat> = repeat( [ <positive-integer> ] , [ <line-names>? <track-size> ]+ <line-names>? )
<fixed-size> = <fixed-breadth> | minmax( <fixed-breadth> , <track-breadth> ) | minmax( <inflexible-breadth> , <fixed-breadth> )
<fixed-repeat> = repeat( [ <positive-integer> ] , [ <line-names>? <fixed-size> ]+ <line-names>? )
<auto-repeat> = repeat( [ auto-fill | auto-fit ] , [ <line-names>? <fixed-size> ]+ <line-names>? )
where 
<track-breadth> = <length-percentage> | <flex> | min-content | max-content | auto
<inflexible-breadth> = <length> | <percentage> | min-content | max-content | auto
<fixed-breadth> = <length-percentage>
where 
<length-percentage> = <length> | <percentage>

Values

  • noneA keyword meaning that no explicit layout grid is created. Any columns will be generated implicitly, and their size will be determined using the grid-auto-columns property. This is the default value.
  • length / percentageSpecifies the size of the columns using a valid length value, or a percentage value. The value must be positive.
  • flexNon-negative value in "flexible" units of measure fr ( fractional unit ). Each column occupies a part of the remaining space in the container of the layout grid in proportion to the given coefficient. For example, when using the value 1fr 2fr , the columns will occupy ⅓ and ⅔ of the remaining space, respectively. The total size of such rows or columns is subtracted from the available space, which gives the remaining space, which is then divided between the rows and columns of flexible size in proportion to their coefficient. Values ​​between 0fr and 1fr have somewhat special behavior, when the sum of the coefficients is less than 1, they will occupy less than 100% of the remaining space. When the available space is infinite (the width or height of the layout grid container is undefined), the size of the flexible grid columns is determined by their contents while maintaining the appropriate proportions.
  • max-contentA keyword that sets the size of each column based on the largest item in the column.
  • min-contentA keyword that sets the size of each column based on the smallest item in the column.
  • minmax (min, max)Functional notation that defines a range of sizes greater than or equal to min and less than or equal to max . If max is less than min , then max is ignored, and the function is treated as min . The value in "flexible" units of measurement as the maximum value sets the coefficient of flexibility of the column, this is not acceptable for determining the minimum.
  • autoThe size of the columns is determined by the size of the container and the size of the contents of the elements in the column. As a maximum, it is identical to the value of max-content , but at least it represents the largest minimum size. Automatic column sizes can be stretched using align-content properties and justify-content.
  • fit-content (length | percentage)This is the formula min (max-content, max (auto, argument)) , which is calculated by analogy with auto (that is, minmax (auto, max-content) ), except that the size of the column is clamped by the argument value, if it is larger than the automatic minimum.
  • repeat ([positive-integer | auto-fill | auto-fit], track-list)Represents a repeated fragment of the track list, allowing a large number of columns that exhibit a recurring pattern to be written in a more compact form.

Example

<div class="grid">
<header class="item header">Header</header>
<main class="item main">Main content</main>
<aside class="item aside">Sidebar</aside>
<footer class="item footer">Footer</footer>
</div>
/* Grid demonstrating grid-template-rows */
.grid {
    display: grid;
    grid-template-columns: 1fr 300px;
    grid-template-rows: 80px 1fr 40px; /* header, content area, footer */
    gap: 12px;
    height: 480px;
    padding: 16px;
    box-sizing: border-box;
    background: #f7f9fb;
}

.item {
    padding: 16px;
    border-radius: 8px;
    color: #fff;
    font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 2px 6px rgba(20, 30, 40, 0.06);
}

.header {
    grid-column: 1 / -1; /* span both columns */
    grid-row: 1;
    background: linear-gradient(135deg, #4b6cb7, #182848);
}

.main {
    grid-column: 1 / 2;
    grid-row: 2;
    background: linear-gradient(135deg, #34a853, #0f9d58);
}

.aside {
    grid-column: 2 / 3;
    grid-row: 2;
    background: linear-gradient(135deg, #4285f4, #0b63d6);
}

.footer {
    grid-column: 1 / -1; /* span both columns */
    grid-row: 3;
    background: linear-gradient(135deg, #ff7a18, #af0812);
}

/* Responsive tweak: stack columns on narrow viewports */
@media (max-width: 640px) {
    .grid {
        grid-template-columns: 1fr;
        grid-template-rows: 64px 1fr 40px 40px;
    }

    .main { grid-column: 1; }
    .aside { grid-column: 1; }
    .footer { grid-column: 1; }
}

Browser Support

The following information will show you the current browser support for the CSS grid-template-rows property. Hover over a browser icon to see the version that first introduced support for this CSS property.

This property is supported by all modern browsers.
Desktop
Chrome
Edge
Firefox
Opera
Safari
Tablets & Mobile
Chrome Android
Firefox Android
Opera Android
Safari iOS
Samsung Internet
Android WebView
-

Last updated by CSSPortal on: 1st January 2026

If this site has been useful, we’d love your support! Consider buying us a coffee to keep things going strong!