Верстка сайту з використанням CSS Grid Layout

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Верстка сайту з використанням CSS Grid Layout
Проста
~2-3 робочих дні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Верстка сайту з використанням CSS Grid Layout

CSS Grid — двовимірна система розташування, яка кардинально змінила підхід до складних макетів. Там де раніше потрібне було абсолютне позиціонування, JavaScript-плагіни або Bootstrap-сітки з 12 колонок, тепер достатньо декілька рядків CSS.

Коли Grid, коли Flexbox

Просте правило: Grid — для двовимірних розташувань (рядки І стовпці одночасно), Flexbox — для одновимірних (рядки АБО стовпці).

  • Основний макет сторінки (header / sidebar / main / footer) — Grid
  • Галерея карток — Grid
  • Навігаційний список — Flexbox
  • Кнопка з іконкою та текстом — Flexbox
  • Форма з полями — обидва варіанти залежно від складності

Макет сторінки

.layout {
  display: grid;
  grid-template-areas:
    "header  header"
    "sidebar main"
    "footer  footer";
  grid-template-columns: 280px 1fr;
  grid-template-rows: auto 1fr auto;
  min-height: 100dvh;
}

.layout__header  { grid-area: header;  }
.layout__sidebar { grid-area: sidebar; }
.layout__main    { grid-area: main;    }
.layout__footer  { grid-area: footer;  }

@media (max-width: 768px) {
  .layout {
    grid-template-areas:
      "header"
      "main"
      "sidebar"
      "footer";
    grid-template-columns: 1fr;
  }
}

grid-template-areas — візуальний запис розташування прямо в CSS. При зміні медіазапиту достатньо переформатувати grid-template-areas, не торкаючись дочірніх елементів.

Адаптивна сітка карток без медіазапитів

.cards-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 24px;
}

auto-fill + minmax(280px, 1fr) — сітка сама вирішує, скільки колонок поміститься. На мобільних — 1 колонка, на планшеті — 2–3, на десктопі — 4+. Жодного медіазапиту.

Різниця auto-fill vs auto-fit:

  • auto-fill — створює пусті трекі, якщо елементів менше ніж колонок
  • auto-fit — пусті трекі стискуються до нуля, елементи розтягуються

Для галереї з фіксованим розміром карток — auto-fill. Для списку з розтягуючими елементами — auto-fit.

Щільна упаковка (masonry-like)

.gallery {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 10px; /* Маленький крок */
  gap: 16px;
}

.gallery__item--tall  { grid-row: span 20; }
.gallery__item--short { grid-row: span 12; }

Або CSS-only masonry (Firefox 126+, Chrome з прапором):

.masonry {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-template-rows: masonry;
  gap: 16px;
}

Поки не везде підтримується — для продакшену потрібен поліфіл (JavaScript-based masonry) як резервний варіант.

Вирівнювання елементів

.hero {
  display: grid;
  place-items: center; /* justify-items + align-items: center одним рядком */
  min-height: 100vh;
}

/* Конкретний елемент — виштовхнути вправо */
.nav__cta {
  margin-inline-start: auto; /* або: justify-self: end в grid-контексті */
}

Перекриття елементів

Grid дозволяє накласти елементи один на одного без position: absolute:

.hero-banner {
  display: grid;
  grid-template-areas: "content";
}

.hero-banner__image,
.hero-banner__content {
  grid-area: content; /* Обидва займають одну клітинку — перекриваються */
}

.hero-banner__image {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.hero-banner__content {
  z-index: 1;
  padding: 48px;
  align-self: end;
  background: linear-gradient(transparent, rgba(0,0,0,0.7));
}

Підсітка (subgrid)

Підтримується у всіх сучасних браузерах з 2023 року. Дозволяє дочірнім елементам вирівнюватися по сітці батька:

.product-list {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

.product-card {
  display: grid;
  grid-row: span 3;
  grid-template-rows: subgrid; /* Заголовок, опис та кнопка вирівнені по всіх картках */
}

.product-card__title       { grid-row: 1; }
.product-card__description { grid-row: 2; }
.product-card__action      { grid-row: 3; align-self: end; }

Без subgrid вирівнювання вмісту карток по висоті вимагало JavaScript або костилів. Тепер — два властивості CSS.

Holy Grail layout (приклад з реальними одиницями)

.page {
  display: grid;
  grid-template:
    "header" 64px
    "main"   1fr
    "footer" auto
    / 1fr;
}

@media (min-width: 1024px) {
  .page {
    grid-template:
      "header  header  header"  64px
      "nav     main    aside"   1fr
      "footer  footer  footer"  auto
      / 240px  1fr     320px;
  }
}

Одна декларація grid-template включає grid-template-areas, grid-template-rows та grid-template-columns.

Поширені помилки

Grid для всього. Grid-контекст важче Flexbox. Для простого ряду кнопок — Flexbox швидше та простіше.

Явні рядки без auto.

/* Проблема — якщо контенту більше 3 рядків, він вийде за межі */
grid-template-rows: 200px 100px 300px;

/* Правильно */
grid-auto-rows: auto;
/* або */
grid-template-rows: auto 1fr auto;

Ігнорування gap на користь margin. В grid-контексті gap — правильний інструмент. margin на дочірніх елементах ламає вирівнювання.

Терміни

Тип верстки Час
Проста сторінка (hero + 3–4 секції) 1 день
Складний макет з sidebar + cards 1.5–2 дня
Дашборд з багатоколонковим лэйаутом 2–3 дні