Основы 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 и небольшим количеством JS кода. Для реализации потребуется всего около 60 строк стилей и js кода.

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

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

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

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

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

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

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

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

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

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

Комментарии

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