`grid-template` CSS property
Baseline Widely available
This feature is well established and works across many devices and browser versions. It's been available across browsers since October 2017.
The grid-template CSS shorthand property specifies the grid columns, grid rows, and grid areas.
Try it
grid-template: "a a a" 40px "b c c" 40px "b c c" 40px / 1fr 1fr 1fr;
grid-template: "b b a" auto "b b c" 2ch "b b c" 1em / 20% 20px 1fr;
grid-template: "a a ." minmax(50px, auto) "a a ." 80px "b b c" auto / 2em 3em auto;
<section class="default-example" id="default-example">
<div class="example-container">
<div class="transition-all" id="example-element">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
</div>
</section>
#example-element {
border: 1px solid #c5c5c5;
display: grid;
grid-gap: 10px;
width: 200px;
}
#example-element :nth-child(1) {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
grid-area: a;
}
#example-element :nth-child(2) {
background-color: rgb(255 0 200 / 0.2);
border: 3px solid rebeccapurple;
grid-area: b;
}
#example-element :nth-child(3) {
background-color: rgb(94 255 0 / 0.2);
border: 3px solid green;
grid-area: c;
}
Constituent properties
This property is a shorthand for the following CSS properties:
Syntax
/* Keyword value */ grid-template: none; /* grid-template-rows / grid-template-columns values */ grid-template: 100px 1fr / 50px 1fr; grid-template: auto 1fr / auto 1fr auto; grid-template: [line-name] 100px / [column-name1] 30% [column-name2] 70%; grid-template: fit-content(100px) / fit-content(40%); /* grid-template-areas grid-template-rows / grid-template-column values */ grid-template: "a a a" "b b b"; grid-template: "a a a" 20% "b b b" auto; grid-template: [header-top] "a a a" [header-bottom] [main-top] "b b b" 1fr [main-bottom] / auto 1fr auto; /* Global values */ grid-template: inherit; grid-template: initial; grid-template: revert; grid-template: revert-layer; grid-template: unset;
Values
-
none - Sets all three longhand properties to
none, meaning there is no explicit grid. There are no named grid areas. Rows and columns will be implicitly generated; their size will be determined by thegrid-auto-rowsandgrid-auto-columnsproperties. This is the default value. -
<'grid-template-rows'> / <'grid-template-columns'> - Sets
grid-template-rowsandgrid-template-columnsto the specified values, and setsgrid-template-areastonone. -
[ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]? -
Sets
grid-template-areasto the strings listed,grid-template-rowsto the track sizes following each string (filling inautofor any missing sizes), and splicing in the named lines defined before/after each size, andgrid-template-columnsto the track listing specified after the slash (ornone, if not specified).Note: The
repeat()function isn't allowed in these track listings, as the tracks are intended to visually line up one-to-one with the rows/columns in the "ASCII art".
Note: The grid shorthand accepts the same syntax, but also resets the implicit grid properties to their initial values. Use grid (as opposed to grid-template) to prevent these values from cascading in separately.
Formal definition
| Initial value | as each of the properties of the shorthand: |
|---|---|
| Applies to | grid containers |
| Inherited | no |
| Percentages | as each of the properties of the shorthand: |
| Computed value | as each of the properties of the shorthand: |
| Animation type | as each of the properties of the shorthand: |
Formal syntax
grid-template = none | [ <'grid-template-rows'> / <'grid-template-columns'> ] | [ <line-names>? <string> <track-size>? <line-names>? ]+ [ / <explicit-track-list> ]? <line-names> = '[' <custom-ident>* ']' <track-size> = <track-breadth> | minmax( <inflexible-breadth> , <track-breadth> ) | fit-content( <length-percentage> ) <explicit-track-list> = [ <line-names>? <track-size> ]+ <line-names>? <track-breadth> = <length-percentage> | <flex> | min-content | max-content | auto <inflexible-breadth> = <length-percentage> | min-content | max-content | auto <length-percentage> = <length> | <percentage>
Examples
Defining a grid template
CSS
#page {
display: grid;
width: 100%;
height: 200px;
grid-template:
[header-left] "head head" 30px [header-right]
[main-left] "nav main" 1fr [main-right]
[footer-left] "nav foot" 30px [footer-right]
/ 120px 1fr;
}
header {
background-color: lime;
grid-area: head;
}
nav {
background-color: lightblue;
grid-area: nav;
}
main {
background-color: yellow;
grid-area: main;
}
footer {
background-color: red;
grid-area: foot;
}
HTML
<div id="page"> <header>Header</header> <nav>Navigation</nav> <main>Main area</main> <footer>Footer</footer> </div>
Result
Specifications
| Specification |
|---|
| CSS Grid Layout Module Level 2 # explicit-grid-shorthand |
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | |
grid-template |
57 |
16 |
52 |
44 |
10.1 |
57 |
52 |
43 |
10.3 |
6.0 |
57 |
10.3 |
none |
57 |
79 |
52 |
44 |
10.1 |
57 |
52 |
43 |
10.3 |
7.0 |
57 |
10.3 |
See also
grid-template-rowsgrid-template-columnsgrid-template-areas- Line-based placement with CSS grid
- Grid template areas: grid definition shorthands
- Video: Grid template shorthand
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/grid-template