## Введение
**CSS Grid Layout** — мощная система двумерной разметки, позволяющая создавать сложные макеты веб‑страниц с помощью строк и столбцов. В отличие от Flexbox (одномерной системы), Grid даёт полный контроль над расположением элементов сразу по двум осям.

## Основные понятия

  • - **Grid Container** — родительский элемент, к которому применяется `display: grid`.
  • - **Grid Items** — дочерние элементы контейнера.
  • - **Grid Lines** — линии, разделяющие строки и столбцы.
  • - **Grid Tracks** — пространство между двумя соседними линиями (столбец или строка).
  • - **Grid Cell** — единичная ячейка, образованная пересечением строки и столбца.
  • - **Grid Area** — область, состоящая из нескольких ячеек.


## Базовая настройка Grid
Чтобы превратить элемент в Grid‑контейнер, достаточно задать ему свойство:

Код
.container {
  display: grid;
}


## Определение колонок и строк
### 1. Свойство `grid-template-columns`

Задаёт размеры колонок. Возможные значения:

  • - длины (`px`, `%`, `fr`);
  • - ключевые слова (`auto`, `max-content`, `min-content`);
  • - функция `repeat()`.

**Пример:**

Код
.container {
  display: grid;
  grid-template-columns: 100px 200px 1fr;
}



  • Здесь:
  • - первая колонка — 100 px;
  • - вторая — 200 px;
  • - третья занимает оставшееся пространство (`1fr`).


### 2. Свойство `grid-template-rows`
Аналогично задаёт высоту строк.
**Пример:**


Код
.container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 100px 200px;
}


### 3. Сокращённое свойство `grid-template`
Объединяет `grid-template-rows` и `grid-template-columns`:

Код
.container {
  display: grid;
  grid-template: 100px 200px / 1fr 1fr;
}


## Размеры с единицей `fr`
Единица `fr` (fraction) распределяет доступное пространство:

Код
.container {
  display: grid;
  grid-template-columns: 1fr 2fr; /* 1/3 и 2/3 ширины */
}


## Функция `repeat()`
Упрощает создание повторяющихся треков:
Код
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr); /* 3 колонки по 1fr */
  grid-template-rows: repeat(2, 100px); /* 2 строки по 100px */
}


Можно комбинировать с другими значениями:

Код
grid-template-columns: repeat(2, 100px) 1fr;


## Отступы между элементами
- `grid-column-gap` — отступ между колонками;
- `grid-row-gap` — отступ между строками;
- `grid-gap` (сокращение) — задаёт оба отступа.
**Пример:**


Код
.container {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-gap: 20px 10px; /* 20px по вертикали, 10px по горизонтали */
}


## Позиционирование элементов
### 1. Свойства `grid-column` и `grid-row`
Задают начальную и конечную линию для элемента:


Код
.item {
  grid-column: 1 / 3; /* занимает колонки 1–2 */
  grid-row: 1 / 2; /* занимает строку 1 */
}


### 2. Сокращённые свойства `grid-column-start`, `grid-column-end`, `grid-row-start`, `grid-row-end`
**Пример:**


Код
.item {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-row-start: 1;
  grid-row-end: 3;
}


### 3. Свойство `grid-area`
Задаёт все четыре границы сразу (в порядке: строка‑начало, колонка‑начало, строка‑конец, колонка‑конец):

Код
.item {
  grid-area: 1 / 1 / 3 / 3;
}


## Именованные области (`grid-template-areas`)
Позволяет визуально описать макет:

Код
.container {
  display: grid;
  grid-template-columns: 1fr 2fr;
  grid-template-rows: auto auto;
  grid-template-areas:
  "header header"
  "sidebar content";
}

.header {
  grid-area: header;
}

.sidebar {
  grid-area: sidebar;
}

.content {
  grid-area: content;
}


## Выравнивание элементов
### Внутри ячейки
- `justify-self` — по горизонтали;
- `align-self` — по вертикали.


**Пример:**
Код
.item {
  justify-self: center;
  align-self: end;
}


### Внутри контейнера
- `justify-items` — для всех элементов по горизонтали;
- `align-items` — для всех элементов по вертикали.


Код
.container {
  justify-items: start;
  align-items: center;
}


## Автоматическое размещение
Если не задавать позиции явно, элементы размещаются по порядку:
Код
.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 100px; /* высота автоматически создаваемых строк */
}


## Пример полного макета

Код
<div class="layout">
  <header class="header">Шапка</header>
  <aside class="sidebar">Меню</aside>
  <main class="content">Контент</main>
  <footer class="footer">Подвал</footer>
</div>


Код
.layout {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: 80px 1fr 60px;
  grid-template-areas:
  "header header"
  "sidebar content"
  "footer footer";
  height: 100vh;
  gap: 10px;
}

.header {
  grid-area: header;
  background-color: #4CAF50;
}

.sidebar {
  grid-area: sidebar;
  background-color: #2196F3;
}

.content {
  grid-area: content;
  background-color: #f5f5f5;
}

.footer {
  grid-area: footer;
  background-color: #673AB7;
}


## Заключение
CSS Grid — гибкий инструмент для создания сложных макетов. Его ключевые преимущества:
- двумерная система разметки;
- точное управление расположением элементов;
- поддержка адаптивности;
- возможность именованных областей.
Освоив основные свойства, вы сможете создавать современные веб‑интерфейсы без использования сторонних фреймворков.

Комментарии

Минимальная длина комментария - 50 знаков. комментарии модерируются
HTMLSTART » CSS3 - JS - SVG Примеры » CSS3 - примеры, статьи » # CSS Grid Layout: подробное руководство