Основы CSS Grid

Если вы хоть раз сталкивались с задачей выстроить элементы на странице так, чтобы они идеально ложились в сложный макет, вы наверняка слышали про CSS Grid. Это не просто очередной инструмент в арсенале фронтенд-разработчика — это настоящая революция в верстке, которая позволяет создавать адаптивные и гибкие layouts без боли и костылей. Сегодня мы разберем CSS Grid с нуля: от базовых понятий до создания сложных макетов, которые будут работать на любом устройстве. Даже если вы только начинаете свой путь в CSS, эта статья поможет вам освоить сеточную верстку и почувствовать себя уверенно. Поехали!

Зачем нужен CSS Grid?

CSS Grid появился в 2017 году и быстро стал must-have навыком для разработчиков. До его прихода мы мучились с float’ами, боролись с Flexbox в сложных макетах или писали тонны JavaScript, чтобы добиться нужного результата. Grid изменил правила игры: теперь у нас есть двухмерная система, которая позволяет управлять строками и столбцами одновременно.

Почему это важно? Представьте: вам нужно сделать страницу с шапкой, боковой панелью, контентом и футером, причем все это должно адаптироваться под мобильные устройства. С Grid это делается в несколько строк кода. Гибкость, читаемость, поддержка во всех современных браузерах — вот что делает CSS Grid незаменимым. Эта статья для тех, кто знает основы CSS (селекторы, свойства вроде margin и padding), но еще не погружался в сетки. Давайте начнем!

Основы CSS Grid

CSS Grid — это модуль CSS, который превращает элемент в контейнер сетки и позволяет управлять его дочерними элементами. В отличие от Flexbox, который работает в одном направлении (горизонтальном или вертикальном), Grid дает контроль в двух измерениях. Чтобы понять, как он работает, разберем ключевые понятия.

Ключевые термины

  • Grid Container: элемент с display: grid — родительская сетка.
  • Grid Items: дочерние элементы контейнера.
  • Grid Lines: линии, разделяющие сетку на строки и столбцы.
  • Grid Tracks: сами строки и столбцы.
  • Grid Cells: ячейки, образованные пересечением строк и столбцов.
  • Grid Areas: именованные области для упрощения верстки.

Создание базовой сетки

Давайте начнем с простого. Вот как создать сетку:

.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 50px 50px;
}

Этот код создает сетку с тремя столбцами по 100px и двумя строками по 50px. Дочерние элементы автоматически заполнят ячейки:

<div class="container">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
  <div>5</div>
  <div>6</div>
</div>
grid сетка 3х2

Результат: сетка 3x2, где элементы занимают ячейки слева направо и сверху вниз.

Расположение элементов

Можно явно указать позицию элемента, для этого нужно использовать grid-row и grid-column:

.item-pos {
	grid-row: 1;
	grid-column: 1;
	background-color: lightblue;
}
позиционирование элемента в grid

В данном случаи мы разместили последний элемент "6" в первой строке, в первом столбце.

.item {
  grid-row: 1 / 3; /* От первой до второй строки */
  grid-column: 2 / 4; /* От второго до четвертого столбца */
}
Растягивание элемента в grid

В данном случаи мы растянули элемент "5" на 2 строки и на 2 столбца.

Работа с промежутками (gaps)

Чтобы элементы не прилипали друг к другу, добавьте отступы с помощью gap:

.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  gap: 20px; /* Отступ между всеми элементами */
}

Есть возможность указать промежутки отдельно для строк и столбцов

.container {
  row-gap: 10px; /* Отступ между строками */
  column-gap: 15px; /* Отступ между столбцами */
}

Адаптивная верстка с CSS Grid

Grid становится по-настоящему мощным, когда нужно адаптировать макет под разные экраны. Вот несколько инструментов.

Относительные единицы (fr)

Единица fr (fraction) делит доступное пространство пропорционально:

.container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr; /* 25% - 50% - 25% */
}

Auto-fit и auto-fill

Для динамического количества столбцов используйте repeat с auto-fit или auto-fill:

.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
}

auto-fit растянет столбцы, а auto-fill создаст пустые, если элементов не хватит. Добавьте медиа-запросы:

@media (max-width: 600px) {
  .container {
    grid-template-columns: 1fr; /* Один столбец на мобильных */
  }
}

Выравнивание и позиционирование

Grid дает полный контроль над выравниванием.

Выравнивание всей сетки

  • justify-items: горизонтальное выравнивание элементов внутри ячеек (start, center, end).
  • align-items: вертикальное выравнивание.
  • justify-content и align-content: выравнивание всей сетки, если она меньше контейнера.

Пример:

.container {
  display: grid;
  justify-items: center;
  align-items: center;
}

Выравнивание отдельных элементов

Для конкретного элемента:

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

Сравнение с Flexbox

Grid и Flexbox часто сравнивают, но они решают разные задачи:

  • Flexbox: одномерная верстка (строки или столбцы).
  • Grid: двумерная (строки и столбцы одновременно).

Пример: для горизонтального меню лучше Flexbox, а для сложного макета страницы — Grid.

Браузерная поддержка

CSS Grid поддерживается всеми современными браузерами (Chrome, Firefox, Safari, Edge) с 2017 года. Для старых IE есть полифиллы или резервные стили с display: block.

Заключение

CSS Grid — это не просто инструмент, а новый способ думать о верстке. Вы научились создавать сетки, управлять их адаптивностью и выравниванием, а также строить сложные layouts с минимальным кодом. Теперь ваша очередь: откройте редактор, попробуйте повторить примеры и создайте что-то свое.

Рубрики: CSS

Если есть вопросы, что-то в статье не понятно или нашли ошибку, напишите об этом в комментариях, все комментарии читаются и по возможности материал будет доработан.
Читайте также
CSS простой горизонтальный слайдер

CSS простой горизонтальный слайдер

В статье приводится пример кода для создания простого горизонтального слайдера с использованием CSS и небольшим количеством JS кода. Для реализации...

Пример использования chatGpt в работе: flex order

Пример использования chatGpt в работе: flex order

В этой статье мы рассмотрим реальный пример использования ИИ (chatGpt, gigachat,YandexGPT) в работе для решения вопрос по верстке (css)

Магия CSS: сделать изображение чёрно-белым

Магия CSS: сделать изображение чёрно-белым

Узнайте, как использовать свойство CSS filter с параметром grayscale для создания черно-белых изображений. В статье написано как применять это свойство...

CSS магия: стилизации элементов на основе нумерации

CSS магия: стилизации элементов на основе нумерации

В статье как с помощью CSS добавить стили для каждого второго, третьего, четвертого элемента и т.д., для четных и нечетных...

Полезные библиотеки для web разработки

Полезные библиотеки для web разработки

Библиотеки помогают существенно сократить время разработки, поэтому иметь под рукой проверенные библиотеки для решения повседневных задач будет полезно.

Оценка задач по верстке

Оценка задач по верстке

В статье приведен список работ которые нужно учесть при оценке задач по верстке

Комментарии

Комментариев пока нет
Данный сайт использует файлы cookies. Продолжая просмотр сайта, вы соглашаетесь с использованием файлов cookies.
ОК