Ось готовий урок, створений за твоїм майстер-промптом у стилі David Malan (CS50).
🎓 Урок: Реальні кейси верстки (Layout Patterns)
Привіт, світе! 👋 Мене звати... (тут ваше ім’я), і це — CS50... тобто, курс із сучасної верстки!
Сьогодні ми не просто вивчатимемо теги чи властивості. Сьогодні ми перестанемо «розкидати» елементи по екрану навмання і почнемо будувати інтерфейси. Ми розглянемо патерни, які використовуються на 99% сайтів: від Google до Netflix.
Готові? Поїхали! 🚀
1. 🔥 Вступ: Проблема та мотивація
Уявіть, що ви переїжджаєте в нову квартиру. У вас є диван, телевізор і шафа. Якщо ви просто кинете їх у кімнату, вони впадуть абияк: диван перекриє двері, а телевізор опиниться екраном до стіни. Це — стандартна поведінка HTML-елементів (Normal Flow). Вони просто стають один під одним.
Але ви хочете, щоб диван стояв навпроти телевізора, а шафа — у кутку. Вам потрібна структура.
Питання до вас:
Ви коли-небудь намагалися поставити картинку праворуч від тексту, використовуючи margin-left: 500px, а потім відкривали сайт на телефоні, і все ламалося? 😅
Це класична помилка. Веб — це не друкований журнал, де все зафіксовано. Веб — це «гумова» кімната, яка постійно змінює розмір. Сьогодні ми навчимося розставляти «меблі» (контент) так, щоб вони виглядали ідеально і в маленькій комірчині (смартфон), і у величезному залі (4K монітор).
2. 🧠 Теоретична база (Без нудних лекцій)
Перш ніж писати код, зрозуміймо логіку. У верстці є два "королі", які вирішують більшість задач розташування: Flexbox та Grid.
Як це працює "під капотом"?
Уявіть Батьківський контейнер (Parent) і Дочірні елементи (Children). У CSS магія відбувається не на самих елементах, а на їхньому Батьку. Це він каже дітям, як поводитися.
-
Flexbox (Одразу в рядок)
- Аналогія: Намистини на нитці. Ви можете зсунути їх у початок, у кінець або розподілити рівномірно.
- Суть: Ідеально для одномірних макетів (тільки рядок або тільки стовпчик). Наприклад: меню навігації.
-
CSS Grid (Сітка)
- Аналогія: Шахівниця або таблиця Excel. Ви чітко кажете: "Ти займи клітинки з A1 по B2".
- Суть: Ідеально для двовимірних макетів (і рядки, і стовпці одночасно). Наприклад: галерея товарів.
🔑 Що треба запам'ятати залізно:
- Контейнер вирішує все. Ви пишете
display: flexдля батька, щоб вишикувати дітей. - Вісь (Axis). У Flexbox головна вісь — це напрямок, куди шикуються елементи.
- Gap (Відступи). Більше не треба мучитися з
margin-right, щоб розділити елементи. Властивістьgapробить це автоматично і чисто.
Інтуїтивно: Думайте про верстку як про коробки в коробках. Кожна секція сайту — це велика коробка, всередині якої лежать менші коробки.
3. 🧪 Приклади (Від простого до реального)
Кейс №1: Святий Грааль (Центрування) 🎯
Найпопулярніше питання на StackOverflow: "Як відцентрувати div?".
Питання: Як ви думаєте, скільки рядків коду потрібно, щоб розмістити текст ідеально по центру екрана? 10? 20?
Дивимось:
.container {
display: flex; /* Вмикаємо Flexbox */
justify-content: center; /* Рівняємо по горизонталі */
align-items: center; /* Рівняємо по вертикалі */
height: 100vh; /* На всю висоту екрана */
}
Чому так?
justify-content рухає елементи вздовж "нитки", а align-items рухає саму "нитку" вгору-вниз (або поперек осі). Вуаля!
Кейс №2: Навігаційна панель (Navbar) 🧭
Типовий сайт: Логотип зліва, посилання — справа.
<nav class="navbar">
<div class="logo">MyBrand</div>
<ul class="links">
<li>Головна</li>
<li>Про нас</li>
<li>Контакти</li>
</ul>
</nav>
.navbar {
display: flex;
justify-content: space-between; /* Головний секрет! */
align-items: center;
padding: 20px;
}
Що тут відбулося?
space-between бере все вільне місце і кидає його між елементами. Логотип притискається вліво, посилання — вправо. Жодних float: right або магічних відступів!
Кейс №3: Картки товарів (Responsive Grid) 🛍️
Задача: У нас є список товарів. На комп'ютері — 3 в ряд, на планшеті — 2, на телефоні — 1.
.product-grid {
display: grid;
/* Магія CSS Grid: повторюй колонки автоматично,
мінімум 300px шириною, максимум — розтягуйся на 1 частку (1fr) */
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px; /* Відступи між картками */
}
Чому це круто?
Ми навіть не використовували медіа-запити (@media)! Браузер сам порахує: "Ага, екран вузький, 300px не влазить три рази, значить поставлю по два". Це і є справжня адаптивність.
4. 🛠 Практична частина
Прийшов час забруднити руки кодом! Відкривайте редактор.
Завдання 1: Navbar своїми руками
Створіть хедер (шапку) сайту, де:
* Зліва: Назва сайту.
* По центру: Пошуковий рядок.
* Справа: Кнопка "Увійти".
* Підказка: Використовуйте display: flex і пограйтеся з justify-content або margin-left: auto.
Завдання 2: "Герой" (Hero Section) Зробіть блок на весь екран із фоновим зображенням. По центру має бути заголовок "Ласкаво просимо" і кнопка під ним. * Челлендж: Текст має бути білим, читабельним, і розміщеним чітко по центру.
Завдання 3: Виправити баг 🐛
У вас є ряд карток (display: flex), але коли тексту стає забагато, картки стискаються і стають занадто вузькими.
* Завдання: Знайдіть властивість flex-wrap і застосуйте її так, щоб картки переносилися на новий рядок.
Завдання 4: Міні-кейс "Картка профілю" Зверстайте картку користувача: * Фото (кругле) зверху. * Ім'я під ним. * Короткий опис. * Внизу — ряд іконок соцмереж (Facebook, Twitter, Instagram). * Питання: Який тип layout (Flex чи Grid) ви оберете для іконок соцмереж? Чому?
Завдання 5: А що, якщо...?
Що станеться з вашою сіткою товарів (приклад №3), якщо одне слово в назві товару буде дуже довгим (наприклад, "Супермегагігаекстрахолодильник")?
* Перевірте це. Якщо верстка зламалась, спробуйте додати word-wrap: break-word або overflow: hidden.
5. 💡 Мислення як у розробника
Вивчаючи верстку, новачки часто потрапляють у пастки. Як їх уникнути?
-
Заборона на фіксовану висоту (
height: 500px).- Помилка: Ви задали блоку висоту 300 пікселів.
- Реальність: Користувач зайшов з телефону, текст став більшим, не вліз у 300px і вивалився назовні.
- Як думає профі: "Контент сам визначає висоту". Використовуйте
min-heightабо простоpadding.
-
Магічні числа.
- Помилка:
margin-left: 137px;(щоб посунути "на око"). - Як думає профі: "Чому 137? А якщо екран зміниться?". Використовуйте
justify-content: centerабоauto. Довіряйте браузеру розрахунки.
- Помилка:
-
Дебаггінг кордонами.
- Якщо верстка "пливе" і ви не розумієте чому — додайте всім елементам тимчасову рамку:
* { border: 1px solid red; }- Це як рентген для вашого сайту. Ви одразу побачите, хто займає більше місця, ніж треба.
6. 🧩 Підсумок
Друзі, що ми маємо в сухому залишку?
- Ви зрозуміли, що Flexbox — це про лінію, а Grid — про площину.
- Ви навчилися центрувати елементи (святий Грааль досягнуто!).
- Ви побачили, як створювати адаптивні сітки без складних медіа-запитів.
Тепер ви не просто "кидаєте" теги на сторінку. Ви — архітектори простору браузера.
Що далі? Гарна структура — це круто. Але наш сайт поки що "мертвий". Він не реагує на кліки, не завантажує дані, не живе. На наступному уроці ми вдихнемо в нього життя. Готуйтеся, бо до нас приходить JavaScript! ⚡️
Це був CS50... тобто, наш урок верстки. Побачимось!