CSS grid

View Output Full Screen Preview

The CSS grid property is a shorthand property for various grid properties.

If your browser supports CSS grids, the above example should look like this:

Screenshot of a grid using the so-called 'holy grail' layout.

The grid property is a convenient way to set several grid properties at once within your code. It relieves you from having to write out each property name individually.

The grid property sets the following properties:

Explicit Grid Properties
Implicit Grid Properties

Note that you can only set the explicit or implicit properties within a single grid declaration. Any subproperties you don't specify are set to their initial values.

Examples

Here's a code example to demonstrate how the grid shorthand property works.

This example, and others are explained below.

Using the repeat() Function

You can use the repeat() function to repeat a row or column definition as many times as required. The first parameter specifies how many occurrences of the definition should be displayed, and the second parameter specifies the track list.

3 Columns

In this example, we use the repeat() function to explicitly state how many columns should be displayed, and we apply auto-flow to the row. Applying auto-flow value to the row is the equivalent of using grid-auto-flow: row.

The result is that the grid contains 3 columns, and it has as many rows as it needs to fit all the grid items.

Here's a working example:

View Output Full Screen Preview

The above code results in the following grid:

Screenshot of a grid using the repeat() functional notation.
A grid with three columns, and as many rows as is required to fit all grid items.

3 Rows

This example is the same as the above example, except that we swap it around. Here, we explicitly specify how many rows the grid has, and we set auto-flow on the columns (the equivalent of grid-auto-flow: column).

Here's a working example:

View Output Full Screen Preview

The above code results in the following grid:

Screenshot of a grid using the repeat() functional notation.
A grid with three rows, and as many columns as is required to fit all grid items.

Using the "ASCII art" Syntax

The grid-template-areas property allows you to define the template areas using a kind of "ASCII art" syntax. This makes it extremely easy to visualize your grid, as the ASCII art represents exactly how the grid is laid out.

Seeing as grid-template-areas is one of the properties covered by the grid property, you can provide the ASCII art straight to the grid property.

The way it works is, you create a text-based grid using named grid areas. If a grid area is wider or taller than others, you simply repeat that name across (or down) the grid.

The named grid areas are provided as a series of strings, each one representing a different row.

Like this:

Here's a working example:

View Output Full Screen Preview

The above code results in the following grid:

Screenshot of a grid using the so-called 'holy grail' layout.
This grid could be used as a basis for a three-column website (sometimes referred to as the "holy grail layout"). The grid items in the middle row will all be the same height regardless of which one has the most content.

Named Lines

You can also modify the above example to use named lines, like this:

Named lines can make the grid easier to understand, as you can provide meaningful names to all of the lines in the grid.

Named lines can be either explicit or implicit.

Named lines are specified using a custom-ident value (a user defined identifier).

Syntax

Here's the official syntax of the grid property:

These values are explained below.

Possible Values

'grid-template'
This value sets the grid-template property (which is shorthand for the grid-template-rows, grid-template-columns, and grid-template-areas properties).
'grid-template-rows' / [ auto-flow && dense? ] 'grid-template-columns'?

This value sets up auto-flow by setting the row tracks explicitly via the grid-template-rows property (and setting the grid-template-columns property to none) and specifying how to auto-repeat the column tracks via grid-auto-columns (and setting grid-auto-rows to auto). The grid-auto-flow property is also set to column accordingly, with dense if it's specified.

All other grid sub-properties are reset to their initial values.

[ auto-flow && dense? ] 'grid-template-rows' / 'grid-template-columns'?

This value sets up auto-flow by setting the column tracks explicitly via the grid-template-columns property (and setting the grid-template-rows property to none) and specifying how to auto-repeat the row tracks via grid-auto-rows (and setting grid-auto-columns to auto). The grid-auto-flow property is also set to row accordingly, with dense if it's specified.

All other grid sub-properties are reset to their initial values.

In addition, all CSS properties also accept the following CSS-wide keyword values as the sole component of their property value:

initial
Represents the value specified as the property's initial value.
inherit
Represents the computed value of the property on the element's parent.
unset
This value acts as either inherit or initial, depending on whether the property is inherited or not. In other words, it sets all properties to their parent value if they are inheritable or to their initial value if not inheritable.

Basic Property Information

Initial Value
As each of the properties of the shorthand. These are:
Applies To
Grid containers
Inherited?
No (i.e. none of the shorthand properties are inherited)
Media
Visual
Animation type
Discrete (see example)

CSS Specifications

Browser Support

Browser support for CSS properties can vary, particularly for newer or experimental features. Check current browser compatibility before using a property in production, especially when supporting older browsers.

The following table provided by Caniuse.com shows the level of browser support for this feature.

Initial Value

CSS properties have an initial value that applies when the property has not been explicitly set. The initial value is different from the value inherited from a parent element and may vary between properties.

Inheritance

Some CSS properties inherit their computed value from their parent element by default, while others do not. The inherit, initial, unset, and revert keywords can also be used to control how a property gets its value.

Vendor Prefixes

Most modern CSS properties use the standard, unprefixed syntax. Vendor-prefixed properties such as -webkit- are mainly relevant to older browser versions or specific features and should only be used when required by your browser support targets.