Краткая справка по CSS

1. Активация Grid

.container {
    display: grid; /* или inline-grid */
}

2. Создание сетки (родительский элемент)

Колонки и строки

.container {
    display: grid;
    grid-template-columns: 100px 200px auto;  /* 3 колонки */
    grid-template-rows: 80px 100px;           /* 2 строки */
}

Дробные единицы (fr) — гибкие доли

grid-template-columns: 1fr 2fr 1fr;  /* 4 части: 1, 2, 1 */

Повторение

grid-template-columns: repeat(4, 1fr);  /* 4 колонки по 1fr */
grid-template-rows: repeat(3, auto);    /* 3 строки */

Комбинация

grid-template-columns: 100px repeat(2, 1fr) 200px;

Отступы между ячейками (gaps)

gap: 20px;              /* одинаковые */
gap: 10px 20px;         /* row-gap column-gap */

3. Размещение элементов (дочерние элементы)

По линиям сетки (линии нумеруются с 1)

.item {
    grid-column-start: 1;
    grid-column-end: 3;   /* занимает колонки 1 и 2 */
    grid-row-start: 2;
    grid-row-end: 4;
}

Сокращённая запись

.item {
    grid-column: 1 / 3;   /* старт / конец */
    grid-row: 2 / 4;
}

С ключевым словом span

grid-column: 2 / span 3;   /* с колонки 2, ширина 3 ячейки */
grid-row: span 2;          /* занять 2 строки */

С именами линий (если заданы)

grid-template-columns: [start] 1fr [middle] 2fr [end];
.item {
    grid-column: start / end;
}

4. Области сетки (очень удобно)

.container {
    display: grid;
    grid-template-areas: 
        "header header header"
        "sidebar main main"
        "footer footer footer";
}
.header  { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main    { grid-area: main; }
.footer  { grid-area: footer; }

Точка (.) — пустая ячейка:

grid-template-areas: 
    "header header header"
    ".       main   main";

5. Выравнивание

В контейнере (всей сетке)

justify-content: start | center | space-between;  /* по горизонтали */
align-content: start | center | space-between;    /* по вертикали */

Внутри ячеек

justify-items: start | center | stretch;  /* по горизонтали внутри ячейки */
align-items: start | center | stretch;    /* по вертикали внутри ячейки */

Для отдельных элементов

.item {
    justify-self: end;
    align-self: center;
}

6. Автоматическое заполнение

/* Адаптивная сетка — минимальная 200px, максимальная 1fr */
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));

7. Пример простой страницы

.page {
    display: grid;
    grid-template-columns: 250px 1fr;
    grid-template-rows: auto 1fr auto;
    gap: 10px;
    height: 100vh;
}
.header  { grid-column: 1 / 3; }
.footer  { grid-column: 1 / 3; }