Ось урок, створений спеціально за твоїм майстер-промптом. Вмикай уяву, ми починаємо!
🎓 Урок: Grid vs Flexbox: Битва Титанів (і як їх подружити)
Привіт усім! Це CS50 (умовно 😉), і сьогодні ми розберемо одну з найбільших дилем фронтенд-розробки.
1. 🔥 Вступ: Хаос проти Порядку
Уявіть, що ви переїжджаєте в нову квартиру. У вас є купа коробок (це ваші HTML-елементи), і їх треба розставити в кімнаті (це ваш body або контейнер).
До появи сучасних інструментів, розробники поводилися як люди, які просто скидають коробки на купу в кутку, підпираючи їх милицями (float, tables, position: absolute). Якщо ви хотіли посунути одну коробку, падала вся гора. Це був жах.
Потім з'явився Flexbox. Це як розумна полиця: ви ставите книги, і вони самі посуваються, займаючи вільне місце. Але потім з'явився Grid. Це вже не просто полиця, це — креслення архітектора. Ви спочатку малюєте сітку на підлозі, а потім просто кидаєте речі в потрібні квадрати.
Питання до вас: Ви коли-небудь намагалися вирівняти кнопку ідеально по центру екрана і витрачали на це 20 хвилин? Якщо так, то ви знаєте біль.
Сьогодні ми раз і назавжди зрозуміємо: коли нам потрібна "розумна черга" (Flexbox), а коли — "архітектурна сітка" (Grid). І чому без них ви не побудуєте жоден сучасний інтерфейс.
2. 🧠 Теоретична база: Осі проти Площини
Давайте заглянемо "під капот", але без нудної документації.
Flexbox (Flexible Box) — Це про ОДИН вимір (1D)
Уявіть намисто з перлин. Ви можете нанизати перлини на нитку. * Нитка може йти зліва направо (рядок). * Або зверху вниз (колонка). * Але не одночасно!
Головна логіка: Flexbox каже елементам: "Хлопці, станьте в ряд і, якщо місця мало, потісніться або перенесіться на наступний рядок". Він ідеальний для вирівнювання контенту. Це Content-First підхід (форма залежить від вмісту).
Grid (CSS Grid Layout) — Це про ДВА виміри (2D)
Уявіть таблицю в Excel або шахову дошку. У вас є рядки І колонки одночасно. Ви можете сказати: "Ти, елемент А, займи клітинку в 2-му рядку і 3-й колонці".
Головна логіка: Grid каже: "Ось жорстка сітка. Елементи, залізайте в свої комірки". Це Layout-First підхід (вміст підлаштовується під форму).
🔑 Що треба запам'ятати (Mental Model):
- Flexbox — це потік. Як вода в трубі або люди в черзі.
- Grid — це каркас. Як розмітка фундаменту будинку.
3. 🧪 Приклади (Кодимо разом)
Приклад №1: Навігаційне меню (Flexbox)
Ситуація: У нас є логотип, посилання "Про нас", "Контакти" і кнопка "Вхід". Вони йдуть в один рядок.
Очікування: Як ви думаєте, що буде, якщо ми використаємо Grid? Ми б могли, але це зайве ускладнення. Нам просто треба розкидати елементи вліво і вправо.
.navbar {
display: flex; /* Вмикаємо магію */
justify-content: space-between; /* Лого зліва, логін справа, решта посередині */
align-items: center; /* Все рівненько по вертикалі */
}
Пояснення: Flexbox ідеально підходить тут, бо нам байдуже на чіткі колонки. Нам важливо, щоб елементи "розтікалися" по ширині.
Приклад №2: Галерея зображень (Grid)
Ситуація: У нас є 10 фотографій. Ми хочемо, щоб вони були в 3 колонки, з рівними відступами.
Очікування: Якщо робити це на Flexbox, нам доведеться рахувати ширину у відсотках (33.3%), морочитися з margin...
.gallery {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 3 рівні колонки */
gap: 20px; /* Відступи між фото - найзручніша річ у світі! */
}
Пояснення: Grid тут король. Ми задали структуру (3 колонки), і контент сам туди "впав". 1fr означає "одна частка вільного простору".
Приклад №3: Реальний світ — Комбінація (Flex у Grid)
Увага, це найважливіший момент уроку. У реальному проєкті (наприклад, картка товару в інтернет-магазині) ви будете використовувати обидва.
- Сітка товарів на сторінці — це Grid (щоб все було рівно).
- Вміст самої картки (ціна зліва, кнопка "Купити" справа) — це Flex.
/* Зовнішня сітка */
.shop-layout {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
}
/* Внутрішня картка */
.product-card-footer {
display: flex;
justify-content: space-between; /* Розводимо ціну і кнопку по краях */
}
4. 🛠 Практична частина
Час забруднити руки кодом! Відкрийте редактор (або CodePen) і спробуйте:
Завдання 1: "Центрування всього життя"
Створіть div з класом .box всередині .container. Зробіть так, щоб .box був ідеально по центру екрана, використовуючи Flexbox (лише 3 рядки CSS).
Завдання 2: "Шахівниця"
Створіть контейнер з 9-ма div-ами всередині. Використовуючи Grid, зробіть сітку 3x3.
Завдання 3: "Адаптивність без медіа-запитів"
Візьміть код із Прикладу №3 (auto-fit). Змінюйте розмір вікна браузера.
Питання: Чому картки перескакують на новий рядок самі, хоча ми не писали @media? (Підказка: магія функції minmax).
Завдання 4: "Поломка"
Спробуйте використати justify-content: space-between у Grid контейнері. Чому воно працює не так, як у Flexbox? (Це навчить вас розрізняти вирівнювання треків і вирівнювання контенту).
Завдання 5: Міні-кейс "Сайт-блог"
Намалюйте структуру:
* Header (на всю ширину)
* Sidebar (збоку, фіксована ширина 200px)
* Main Content (займає решту місця)
* Footer (на всю ширину)
* Підказка: Використайте Grid (grid-template-areas — це суперсила для таких задач).
5. 💡 Мислення як у розробника
Як досвідчений Senior розробник дивиться на макет дизайнера?
- Сканування: Він не дивиться на кольори. Він шукає прямокутники.
- Аналіз:
- "Це просто список елементів в один ряд?" -> Flexbox.
- "Це складна структура, де елементи перекриваються або мають чіткі координати?" -> Grid.
- "Це список карток?" -> Grid для списку, Flex для нутрощів картки.
Типові помилки новачків:
* ❌ Намагатися зробити всю сторінку одним великим Flexbox-ом (це призведе до пекла з вкладеностями).
* ❌ Використовувати Grid для простого вирівнювання іконки біля тексту (це стріляти з гармати по горобцях).
* ❌ Забувати про властивість gap. Раніше ми мучилися з margin-right: 20px, а для останнього елемента знімали марджин. gap працює і там, і там. Користуйтеся ним!
6. 🧩 Підсумок
Отже, що ми маємо в сухому залишку:
- Flexbox — це ваш інструмент для 1D (рядки АБО колонки). Ідеально для меню, кнопок, вирівнювання дрібниць.
- Grid — це ваш інструмент для 2D (весь макет, галереї). Ідеально для каркаса сторінки.
- Справжня магія стається, коли ви їх комбінуєте.
Що ви тепер вмієте: Ви більше не боїтеся макетів. Ви можете подивитися на будь-який сайт (навіть Facebook чи YouTube) і в голові розкреслити: "Ага, тут грід, а ось всередині цієї кнопки — флекс".
👉 У наступній серії: Ми зробили гарну сітку, але як зробити так, щоб на мобільному телефоні 3 колонки перетворювалися на одну? Ми поговоримо про Responsive Design та Media Queries. Готуйте свої смартфони!
А поки що — практикуйтеся. Побачимось на наступному уроці! 🚀