Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CSS Variables Learning

Покрокове навчання CSS custom properties (змінних) у форматі урок → завдання → фідбек, керованому Claude Code.


Про що цей репозиторій

Це навчальний проєкт-курс для самостійного освоєння CSS-змінних (custom properties). Багато онлайн-курсів цю тему пропускають або згадують побіжно — а вона критично важлива для сучасного фронтенду: дизайн-системи, темізація, responsive без дублювань, інтерактивні стилі через JS.

Курс повністю інтерактивний. Claude (асистент) виступає в ролі персонального викладача:

  • Готує теорію і практичні завдання
  • Підготовляє HTML-розмітку, щоб ти зосередився на CSS
  • Перевіряє твої рішення і дає конкретний фідбек
  • Веде журнал прогресу і адаптується під твій темп

Курс складається з 7 тематичних уроків і 1 фінального екзамену, що поєднує всі теми в один проєкт.


Чому CSS-змінні важливі

Без змінних Зі змінними
Зміна одного кольору = пошук-заміна по 30 файлах Один рядок у :root оновлює все
Темізація — окремий клас на кожному селекторі Перевизначи 5 змінних у [data-theme="dark"]
Responsive — повторити правила в кожному @media Перевизнач змінні, стилі залишаються одні
Інтерактивна зміна стилів — el.style.background = ... setProperty('--accent', value) оновлює всю сторінку
Варіанти компонента — дублювати правила під кожен Перевизначити одну змінну на модифікаторі

Як працює навчання

Цикл одного уроку

1. Читаєш lesson.md           ← теорія від Claude
2. Дивишся index.html         ← готова розмітка з класами
3. Відкриваєш solution.css    ← порожній стартовий файл, пишеш у нього стилі
4. Пишеш "перевір 0X"         ← Claude читає твій код
5. Отримуєш фідбек            ← конкретні зауваження + похвала
6. Доробляєш якщо треба
7. Переходиш далі

Розподіл відповідальності

  • Claude робить: теорія (lesson.md), завдання (task.md), HTML-розмітка (index.html), перевірка
  • Студент робить: заповнює solution.css (а в уроках 06 і 08 ще solution.js) — вони вже створені порожніми у кожній папці уроку

Це навмисне рішення: тема навчання — CSS-змінні, не верстка. Готова розмітка дозволяє повністю зосередитись на CSS.


Структура проєкту

css-root-learn/
│
├── CLAUDE.md                        Контекст для Claude (твій профіль, прогрес, конвенції)
├── README.md                        Цей файл — як користуватися курсом
│
└── lessons/
    │
    ├── 01-basics/                   Урок 1 — Основи CSS-змінних
    │   ├── lesson.md                  Теорія: --name, var(), :root
    │   ├── task.md                    Завдання: картка профілю
    │   ├── index.html                 Готова розмітка
    │   └── solution.css               ← порожній стартовий файл, пишеш сюди
    │
    ├── 02-scope-cascade/            Урок 2 — Scope і каскад
    │   ├── lesson.md
    │   ├── task.md
    │   ├── index.html
    │   └── solution.css               ← порожній стартовий файл, пишеш сюди
    │
    ├── 03-fallbacks/                Урок 3 — Fallback-значення
    │   ├── lesson.md
    │   ├── task.md
    │   ├── index.html
    │   └── solution.css               ← порожній стартовий файл, пишеш сюди
    │
    ├── 04-theming/                  Урок 4 — Темізація (light/dark)
    │   ├── lesson.md
    │   ├── task.md
    │   ├── index.html
    │   └── solution.css               ← порожній стартовий файл, пишеш сюди
    │
    ├── 05-calc-and-math/            Урок 5 — calc() і скейли
    │   ├── lesson.md
    │   ├── task.md
    │   ├── index.html
    │   └── solution.css               ← порожній стартовий файл, пишеш сюди
    │
    ├── 06-with-js/                  Урок 6 — Взаємодія з JavaScript
    │   ├── lesson.md
    │   ├── task.md
    │   ├── index.html
    │   ├── solution.css               ← порожній стартовий файл, пишеш сюди
    │   └── solution.js                ← порожній стартовий файл, пишеш сюди
    │
    ├── 07-responsive/               Урок 7 — Змінні в media queries
    │   ├── lesson.md
    │   ├── task.md
    │   ├── index.html
    │   └── solution.css               ← порожній стартовий файл, пишеш сюди
    │
    └── 08-final-exam/               Фінальний екзамен — Дашборд
        ├── exam.md                    Завдання-сумарій з чек-листом по всіх темах
        ├── index.html
        ├── solution.css               ← порожній стартовий файл, пишеш сюди
        └── solution.js                ← порожній стартовий файл, пишеш сюди

Що означають типи файлів:

  • lesson.md — теоретичне пояснення з прикладами коду, типовими помилками і резюме
  • task.md — практичне завдання з критеріями виконання і бонусними пунктами
  • index.html — готова HTML-структура з потрібними класами; редагувати не треба
  • solution.css / solution.js — твої файли з рішенням; HTML уже їх підключає
  • exam.md — для фінального екзамену; містить чек-лист по всіх 7 темах

Програма курсу

Урок 01 — Основи CSS-змінних

Що вчиш:

  • Що таке custom properties і чим вони відрізняються від змінних Sass
  • Синтаксис оголошення: --name: value;
  • Використання: var(--name)
  • Селектор :root як глобальний scope
  • Правила іменування і типові помилки

Завдання: Картка профілю з 6 обов'язковими змінними (фон, текст, акцент, відступи).

Ключові концепції: --, var(), :root, kebab-case, повторне використання значень.


Урок 02 — Scope і каскад

Що вчиш:

  • Як змінні успадковуються від батька до нащадків
  • Локальний scope: оголошення змінних на компоненті
  • Перевизначення на нащадку через каскад
  • Чому це найкоротший шлях до варіантів компонента
  • Правила специфічності для змінних

Завдання: Три варіанти картки (звичайна, success, danger). Стилі картки пишуться один раз, варіанти створюються виключно перевизначенням змінних.

Ключові концепції: успадкування, локальний scope, варіанти без дублювання.


Урок 03 — Fallback-значення

Що вчиш:

  • Синтаксис var(--name, fallback)
  • Що буває, якщо змінна не оголошена
  • Ланцюжкові fallback'и: var(--a, var(--b, red))
  • Коли fallback не спрацює (некоректне значення ≠ відсутнє)
  • Кейс опційної кастомізації через інлайн style="--name: value"

Завдання: Кнопки з кастомізацією через fallback'и. Жодних змінних у :root — усі значення приходять або з fallback'ів, або з модифікаторів, або з інлайн-стилів.

Ключові концепції: значення за замовчуванням, безпечні стилі, перевикористовувані компоненти.


Урок 04 — Темізація (light / dark)

Що вчиш:

  • Як зробити дві теми через перевизначення набору змінних
  • Селектор [data-theme="dark"] vs клас vs prefers-color-scheme
  • Семантичні імена змінних (--bg-surface) vs імена за кольором (--white)
  • Які властивості зазвичай темізують, а які ні
  • Best-practice: prefers-color-scheme як дефолт + явний перемикач

Завдання: Сторінка-блог з двома темами. Перемикається в DevTools зміною атрибута data-theme (без JS — це урок про CSS).

Ключові концепції: темізація без дублювань, семантичні імена, decoupling стилів від теми.


Урок 05 — calc() і скейли

Що вчиш:

  • calc() всередині var() — арифметика зі змінними
  • Правила синтаксису (пробіли навколо +/-, множення тільки на безрозмірне число)
  • Побудова типографічного скейлу з одного --font-base і --type-ratio
  • Побудова spacing-скейлу з --space-base
  • Знайомство з min(), max(), clamp() для responsive

Завдання: Дизайн-система з типографічним і spacing-скейлами. Зміна однієї базової змінної має пропорційно змінити всі похідні.

Ключові концепції: одна точка істини → багато похідних значень, модульні скейли, responsive типографіка.


Урок 06 — Взаємодія з JavaScript

Що вчиш:

  • Чим CSS-змінні відрізняються від Sass-змінних (рантайм vs preprocess-time)
  • getComputedStyle(el).getPropertyValue('--name') — читання
  • el.style.setProperty('--name', value) — запис
  • el.style.removeProperty('--name') — видалення
  • Найкращий патерн для тем: JS міняє атрибут, CSS робить решту
  • Збереження вибору в localStorage
  • Тонкощі: значення як рядок, обмеження getComputedStyle за продуктивністю

Завдання: Інтерактивна панель з color-пікером для акценту, кнопкою перемикання теми і кнопкою скидання. Стан зберігається між перезавантаженнями.

Ключові концепції: реактивні стилі, інтерактивність без переписування CSS, persistent UI state.


Урок 07 — Змінні в media queries

Що вчиш:

  • Чому повторювати правила в кожному @media — антипаттерн
  • Перевизначення змінних на :root всередині media queries
  • Як стилі компонентів пишуться один раз
  • Mobile-first vs desktop-first підхід
  • Коли clamp() краще за media queries
  • Контейнер-queries (@container) як майбутнє responsive

Завдання: Адаптивний лендінг з 6 картками: 1 колонка на мобілі, 2 на планшеті, 3 на десктопі. Жодного media query для конкретного селектора — тільки на :root.

Ключові концепції: DRY responsive, mobile-first, дискретні (@media) vs плавні (clamp) адаптації.


Урок 08 — Фінальний екзамен (Дашборд)

Що демонструєш: Усі попередні теми разом в одному проєкті.

Завдання: Реалістичний дашборд з:

  • Топбаром з контролами (color-picker, theme toggle, reset)
  • Hero-секцією
  • Трьома stat-картками з модифікаторами (primary / success / warning)
  • Responsive-грідом постів (1/2/3 колонки)
  • Темізацією (light/dark)
  • Скейлами через calc()
  • JS-логікою з localStorage
  • Перевизначенням змінних у media queries

Чек-лист на 25+ пунктів, оцінка по балах. Це твоя «фінальна перевірка» володіння темою.


Команди для Claude

Усі команди пиши прямо в чат з Claude:

Команда Що робить
перевір 01 ... перевір 07 Прочитати твій solution.csssolution.js для уроку 06), пройтись по чек-листу завдання, дати фідбек: що добре, де помилки, що покращити
перевір екзамен Перевірка фінального проєкту по всіх 7 темах, оцінка по балах
поясни ще раз X Додаткове пояснення теми (де X — назва концепції, наприклад «scope» або «calc»). Корисно якщо щось у теорії незрозуміло
дай ще завдання на цю тему Створити додаткове завдання на тому самому уроці (для закріплення)
покажи приклад X Показати код-приклад на конкретний кейс
порівняй X і Y Порівняти два підходи (наприклад «[data-theme] vs prefers-color-scheme»)
перейдемо до 0X Сигнал, що ти готовий перейти до конкретного уроку (необов'язково, можеш просто почати)

Якщо стоп — пиши вільним текстом. Claude розуміє контекст і може допомогти, навіть якщо команда не з цього списку.


Як почати

  1. Відкрий проєкт у Claude Code:

    cd "css-root-learn"
    claude
  2. Перейди в папку першого уроку:

    lessons/01-basics/
    
  3. Прочитай теоріюlesson.md

  4. Прочитай завданняtask.md

  5. Глянь HTMLindex.html, щоб зрозуміти які класи доступні

  6. Відкрий solution.css у тій самій папці (він уже існує, поки порожній) і пиши стилі

  7. Відкрий index.html у браузері (просто подвійний клік) — побач результат

  8. Як готово — пиши Claude: перевір 01

  9. Отримай фідбек, доробляй якщо треба

  10. Переходь до наступного уроку


Поради для ефективного навчання

Не пропускай теорію

lesson.md — це не довідник, а пояснення з мотивацією. Якщо одразу йти в task.md, можна виконати завдання механічно і не зрозуміти чому. CSS-змінні — це не синтаксис, це підхід до організації стилів.

Не дивись готові рішення з інтернету

Половина цінності курсу — в самостійному наборі коду і помилках, які ти зробиш. Якщо застряг — спершу спробуй сам, потім питай Claude. Готові відповіді з Stack Overflow дадуть результат, але не дадуть розуміння.

Експериментуй у DevTools

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

Не пропускай бонуси

У більшості завдань є необов'язкові бонусні пункти (prefers-color-scheme, clamp(), ланцюжкові fallback'и). Це не складніше, ніж основне завдання, але охоплює сценарії, з якими реально стикаєшся в продакшені.

Перевіряй сам перед перевір 0X

Спершу пройдись по чек-листу в task.md сам — частину помилок ти знайдеш швидше за Claude. Це теж навичка: вміти перевіряти свій код по специфікації.

Не бійся переписати з нуля

Якщо в процесі зрозумів, що структура CSS вийшла кривою — стерти і переписати чистіше нормально. Чистий код важливіший за збережений час.


Що далі після курсу

Після фінального екзамену ти будеш впевнено володіти CSS-змінними у всіх типових сценаріях. Подальші напрямки:

  • CSS-in-JS — фреймворки типу styled-components теж використовують custom properties під капотом
  • Дизайн-токени — як великі компанії будують design systems (Material Design, Atlassian, IBM Carbon)
  • Container queries@container для компонент-орієнтованого responsive
  • CSS @layer — керування каскадом і специфічністю
  • Tailwind CSS / UnoCSS — як утилітарні фреймворки використовують змінні для тем

Можеш попросити Claude додати урок на будь-яку з цих тем — структура курсу гнучка.


Технічні деталі

  • HTML/CSS: semantic HTML5, modern CSS (без префіксів — підтримка змінних 97%+ браузерів)
  • JS: vanilla, без фреймворків. ES6+ синтаксис
  • Інструменти не потрібні: жодного npm, build-кроку, dev-сервера. Просто відкривай index.html подвійним кліком
  • Браузер: будь-який сучасний (Chrome, Firefox, Safari, Edge — всі підтримують custom properties давно)

Внесок у проєкт

Курс — open source. Якщо знайшов помилку, неточність або хочеш запропонувати додатковий урок:

  • Відкрий issue на GitHub з описом
  • Або зроби fork → правки → pull request
  • Покращення вітаються: уточнення в теорії, додаткові завдання, переклади на інші мови

Ліцензія

Цей проєкт ліцензований під MIT License — повний текст у файлі LICENSE.

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


Якщо знайдеш помилку у завданні чи теорії, або хочеш запропонувати додатковий урок — просто скажи Claude про це у чаті.

About

Покроковий курс з CSS custom properties (змінних) у форматі урок → завдання → фідбек

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages