Grid

Tandis qu’une flexbox est unidimensionnelle (les éléments sont disposés en ligne ou en colonne), un grid crée une grille en deux dimensions (les éléments sont disposés librement sur une ligne et colonne). Cela permet de créer des layouts plus complexes, comme par exemple une mosaïque.

JSFiddle grid
JSFiddle grid:hover
Codepen Use grid instead of containers

grid-auto (container)

Exemple:

{
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 60px;
}
{
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(60px, auto);
}

grid-gap (container)

Exemple:

{
  grid-template-columns: repeat(3, 1fr);
  grid-column-gap: 20px;
}
{
  grid-template-columns: repeat(3, 1fr);
  grid-row-gap: 20px;
}

align-items (container)


grid-template (container)

Par défaut, une grid place automatiquement les éléments en colonne et en ligne, dans l’ordre. Plutôt que de définir des colonnes et des lignes, on peut définir des emplacements sur lesquels on pourra par la suite placer les éléments.

Exemple:

{
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: 50px 60px 70px;
}
{
  grid-template-columns: 30% 20% 50%;
}
{
  grid-template-columns: 1fr 2fr 1fr;
}
{
  grid-template-columns: repeat(3, 1fr);
}
.wrapper{
  display: grid;
  grid-template: "head head" 50px  /* height of row 1:  50px */
     "nav  main" 100px   /* height of row 2: 100px */
     "nav  footer" 30px  /* height of row 3:  30px */
     / 120px 1fr;  /* width of columns: 120px and auto */
}
header { grid-area: head; }
nav { grid-area: nav; }
main { grid-area: main; }
footer { grid-area: footer; }

JSFiddle grid-template


grid-area (child)

Définit dans quelle zone afficher l’élément [CSS3]
Zone définie par le container avec grid-template-areas

grid-area: <string>

grid-column (child)

Exemple:

{
  grid-template-columns: repeat(6, 1fr);

  &:first-child {
    grid-column: 1/3;
  }
}
{
  grid-template-columns: repeat(3, 1fr);

  &:nth-child(2) {
    grid-column: span 2;
  }
}

grid-row (child)

Exemple:

{
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows: repeat(4, 1fr);

  &:nth-child(2) {
    grid-column-start: 2;
    grid-row: 1/4;
  }
}

align-self (child)

Exemple:

{
  grid-template-columns: 1fr 1fr 1fr;

  &:first-child {
    grid-column: 1/3; /* de 1 à 3 */
  }
  &:nth-child(2) {
    grid-column: span 3; /* de n à n+3 (où n est la position par défaut de l'élément) */
  }
}

CSS Grid Guide
A Complete Guide to Grid