Ось готовий урок, створений за твоїм майстер-промптом.
🎨 УРОК: CSS Змінні (Custom Properties) — Магія керування хаосом
Привіт, друзі! Це CS50 (умовно 😉), і сьогодні ми поговоримо про те, як не збожеволіти, коли ваш проект розростається до тисяч рядків коду.
1. 🔥 Вступ: Проблема та мотивація
Уявіть ситуацію. Ви працюєте над величезним інтернет-магазином. Дизайнер обрав дуже специфічний відтінок синього для бренду — #0056b3. Ви сумлінно використали цей колір для кнопок, посилань, рамок, іконок та підкреслень. Усього 500 разів у 10 різних файлах.
За день до запуску приходить клієнт і каже: "Знаєте, цей синій трохи сумний. Давайте зробимо його яскраво-фіолетовим (#6f42c1)!"
Ваші дії? 1. Відкрити пошук (Ctrl+F) і робити "Find & Replace"? А якщо ви випадково заміните синій колір там, де не треба (наприклад, у фотографії товару або в іншій частині коду)? 2. Міняти вручну кожен рядок? (Прощавай, вихідні).
Риторичне питання: Хіба не було б круто, якби ми могли змінити колір в одному місці, і він автоматично оновився б на всьому сайті?
Аналогія: "Майстер-рубильник"
Уявіть, що у вашому будинку кожна лампочка підключена до окремого дроту, який йде на електростанцію. Щоб вимкнути світло, треба дзвонити туди 50 разів. Це — старий CSS. CSS Змінні — це як головний рубильник у вашій квартирі. Клац — і все світло змінилося.
Без цієї теми ви будете писати код, який неможливо підтримувати. З нею — ви стаєте архітектором, а не різноробом.
2. 🧠 Теоретична база (Як це працює під капотом)
CSS змінні (правильна назва — Custom Properties) — це контейнери для збереження значень, які можна використовувати повторно.
Як це виглядає?
Синтаксис дуже схожий на звичайні властивості CSS, але з однією особливістю.
- Оголошення (Створення): Ім'я змінної обов'язково починається з двох дефісів
--. - Використання: Ми використовуємо функцію
var(), щоб дістати значення.
element {
--main-color: red; /* Оголошення */
color: var(--main-color); /* Використання */
}
Де їх зберігати? (Scope / Область видимості)
Це найважливіше.
* Якщо ви хочете, щоб змінна була доступна всюди на сайті, ви кладете її в :root. Це як глобальна змінна в C або Python. :root відповідає тегу <html>, тобто найвищому рівню.
* Якщо ви оголосите змінну всередині .card, вона буде видна тільки всередині карток.
Що треба запам'ятати залізно:
CSS змінні підпорядковуються правилам каскаду (Cascading). Якщо ви перевизначите змінну нижче по коду або всередині конкретного елемента, нове значення "переможе" старе.
3. 🧪 Приклади (Від простого до реального)
Приклад 1: "Hello World" у світі змінних
Давайте просто пофарбуємо заголовок.
❓ Питання до вас: Що станеться, якщо я напишу цей код?
:root {
--my-favorite-color: tomato;
}
h1 {
color: var(--my-favorite-color);
}
Відповідь: Усі h1 стануть кольору tomato. Просто, правда?
Приклад 2: Реальний кейс (Кнопки)
Зазвичай у нас є основний колір (Primary) і колір тексту.
:root {
--primary: #007bff; /* Синій */
--text-light: #ffffff;
}
.btn {
background-color: var(--primary);
color: var(--text-light);
padding: 10px 20px;
border: 1px solid var(--primary); /* Рамка того ж кольору */
}
.btn:hover {
/* Тут ми можемо трохи схитрувати з фільтрами,
але поки залишимо так для простоти */
opacity: 0.8;
}
Чому це круто? Якщо ми змінимо --primary в одному місці, зміняться і фон кнопки, і її рамка.
Приклад 3: "Магія" (Темна тема)
Ось тут починається справжня сила. Ми можемо змінювати значення змінних залежно від умов!
❓ Питання: Що буде, якщо ми додамо клас .dark-mode на <body>, і всередині нього змінимо значення тих самих змінних?
/* Стандартні (світлі) кольори */
:root {
--bg-color: white;
--text-color: black;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
transition: 0.3s; /* Щоб перехід був плавним */
}
/* Перевизначення для темної теми */
body.dark-mode {
--bg-color: #333;
--text-color: #f0f0f0;
}
Результат: Вам не треба писати нові стилі для кожного елемента (h1, p, div). Ви просто змінили значення змінних на рівні body, і завдяки каскаду весь сайт перефарбувався.
4. 🛠 Практична частина
Час забруднити руки кодом! Відкривайте редактор (VS Code, CodePen).
🔹 Завдання 1: База
Створіть :root з трьома змінними:
1. --main-bg: світло-сірий (#f4f4f4).
2. --card-bg: білий (#fff).
3. --accent: ваш улюблений яскравий колір.
Застосуйте їх до body (фон), div (картка) і button (кнопка).
🔹 Завдання 2: Локальний бунт
Створіть клас .special-card. Всередині цього селектора перевизначте змінну --card-bg на чорний, а --accent на білий.
Перевірте: чи змінилися інші картки? Чому ні?
🔹 Завдання 3: План "Б" (Fallback)
Що буде, якщо змінна не існує?
Спробуйте написати: color: var(--non-existent-variable, red);.
Видаліть змінну (або зробіть помилку в назві) і подивіться, чи спрацює червоний колір. Це ваш "запасний парашут".
🔹 Завдання 4: Математика
Змінні можна комбінувати з calc().
Створіть змінну --base-size: 16px.
Задайте розмір шрифту заголовка як calc(var(--base-size) * 2).
Змініть --base-size на 20px і подивіться, як масштабується все.
🔹 Завдання 5: Міні-кейс "Світлофор"
У вас є три div-кола.
Зробіть одну змінну --lamp-color.
Задайте кожному колу свій стиль (атрибут style="..." прямо в HTML або окремі класи), змінюючи лише значення цієї однієї змінної локально для кожного кола (червоний, жовтий, зелений).
5. 💡 Мислення як у розробника
Як відрізнити новачка від профі, дивлячись на CSS змінні?
❌ Типова помилка новачка: Назви кольорів
:root {
--red: #ff0000;
}
.error { color: var(--red); }
Чому це погано? Завтра дизайнер скаже: "Помилки мають бути помаранчевими". Ви змінюєте код на #orange, але змінна досі називається --red. Це збиває з пантелику!
✅ Як думає профі: Семантичні назви (За змістом)
:root {
--error-color: #ff0000;
--brand-color: #0056b3;
}
Тепер, якщо помилка стане помаранчевою, змінна --error-color просто отримає нове значення. Назва змінної описує функцію, а не вигляд.
Порада:
Використовуйте змінні для всього, що повторюється більше 2 разів: кольори, відступи (--spacing-unit: 8px), радіус заокруглення, шрифти. Це робить вашу дизайн-систему цілісною.
6. 🧩 Підсумок
Отже, що ми сьогодні зробили?
1. Зрозуміли, що "хардкодити" кольори — це шлях до болю.
2. Навчилися створювати --змінні в :root (глобально) і локально.
3. Побачили, як легко робити теми (Light/Dark mode) зміною значень, а не переписуванням стилів.
4. Навчилися називати змінні правильно (семантично).
Тепер ви вмієте: Керувати стилем усього сайту з одного місця. Ви створили свій "Центр керування польотами".
🔍 Тизер:
А знаєте, що найкрутіше? CSS змінні може бачити та змінювати JavaScript.
У наступних уроках ми навчимося робити так, щоб користувач натискав кнопку, JS змінював значення змінної --hue, і сайт миттєво змінював колірну гаму без перезавантаження.
А поки що — практикуйтеся! Це був CS50. Побачимось! 👋