Ось урок, підготовлений спеціально для тебе. Уяви, що ми зараз в аудиторії Сандерс-театру в Гарварді, я ходжу сценою, а ти сидиш у першому ряду. Поїхали!
🎓 Урок: Псевдокласи та Псевдоелементи. Магія станів і декору
Привіт, друзі! Сьогодні ми поговоримо про те, що перетворює звичайну, нудну сторінку на живий інтерфейс.
1. 🔥 Вступ: проблема та мотивація
Уявіть, що ви підходите до дверей. Звичайних дверей. Ви простягаєте руку до ручки... і нічого не відбувається. Ви не відчуваєте холоду металу, ручка не повертається, двері навіть не скриплять. Виглядає як двері, але поводиться як намальована картинка на стіні. Дивно, правда?
В інтернеті те саме. Користувач наводить мишку на кнопку, а вона — нуль реакції. Він клікає на посилання, а воно не змінює колір. Це збиває з пантелику.
Або інша ситуація: у вас є список із 1000 товарів у таблиці. Читати їх — це пекло для очей, бо всі рядки білі. Ви хочете, щоб кожен другий рядок був сірим (як у "зебрі").
Риторичне питання: Невже для цього нам треба йти в HTML і вручну дописувати клас class="grey-row" до кожного другого рядка? А якщо товарів стане 1001? Все поламається?
Чому без цього не обійтись: Сьогодні ми вивчимо інструменти, які дозволяють стилізувати елементи залежно від їхнього стану (наприклад, "на мене навели мишку") або створювати візуальні елементи, яких немає в HTML (наприклад, красиві лапки для цитат).
Це Псевдокласи та Псевдоелементи. Це як макіяж і аксесуари для вашого HTML: код залишається чистим, а вигляд змінюється кардинально.
2. 🧠 Теоретична база (без сухої академічності)
Давайте розберемося з термінологією, але не як у підручнику, а як інженери.
🔹 Псевдокласи (Починаються з :)
Уявіть хамелеона. Це все той же хамелеон, але коли він наляканий — він червоний. Коли він на листі — він зелений. Псевдоклас — це опис СТАНУ елемента.
Синтаксис: селектор:стан { ... }
:hover— коли мишка над елементом.:active— у момент кліку (поки кнопка миші натиснута).:focus— коли елемент обрано (наприклад, курсор у полі вводу). Це критично для доступності!:nth-child(n)— вибирає елемент за його номером (математика в CSS!).
🔹 Псевдоелементи (Починаються з ::)
Уявіть, що ви одягаєте капелюх. Капелюх — це не частина вашого тіла, це щось додане ззовні для краси. Псевдоелемент — це створення ВІРТУАЛЬНОЇ частини елемента. Її немає в HTML-коді, вона існує тільки на екрані.
Синтаксис: селектор::частина { ... }
::before— створює щось перед вмістом елемента.::after— створює щось після вмісту елемента.::first-letter— стилізує першу літеру (буквиця).
💡 Запам'ятайте головне: * Один знак
:— це СТАН (Псевдоклас). * Два знаки::— це ЧАСТИНА (Псевдоелемент). (Старі браузери розуміли один знак для всього, але ми пишемо сучасний код, тому дотримуємось стандарту).
3. 🧪 Приклади (від простого до реального)
Приклад 1: Жива кнопка (:hover)
Найпростіший приклад. У нас є кнопка.
button {
background-color: blue;
color: white;
transition: 0.3s; /* Щоб зміна була плавною */
}
Питання до вас: Що я маю дописати, щоб при наведенні кнопка ставала темно-синьою?
button:hover {
background-color: darkblue;
}
Пояснення: Браузер постійно стежить за курсором. Як тільки курсор перетинає межі button, браузер миттєво застосовує правила з блоку button:hover.
Приклад 2: Таблиця "Зебра" (:nth-child)
Уявіть список:
<ul>
<li>Елемент 1</li>
<li>Елемент 2</li>
<li>Елемент 3</li>
<li>Елемент 4</li>
</ul>
Ми хочемо зафарбувати кожен парний рядок.
li:nth-child(even) {
background-color: #f0f0f0;
}
Результат: Елементи 2 і 4 стануть сірими.
Магія: Якщо ми додамо ще один <li> в HTML, CSS автоматично перерахує порядок і зафарбує все правильно. Ніякої ручної роботи!
Приклад 3: Стильні цитати (::before)
Ми хочемо додати великі лапки перед цитатою, але не хочемо смітити в HTML символами.
<blockquote>Код — це поезія.</blockquote>
blockquote::before {
content: "«"; /* Обов'язкова властивість! */
color: red;
font-size: 3em;
margin-right: 10px;
}
Питання: Що станеться, якщо я забуду написати властивість content?
Відповідь: Нічого не з'явиться! Псевдоелемент ::before і ::after не працює без content, навіть якщо він порожній (content: "";). Це найчастіша помилка.
4. 🛠 Практична частина
А тепер ваша черга! Відкрийте редактор коду (або уявіть його).
Завдання 1: Світлофор
Створіть три div-круги (червоний, жовтий, зелений). Зробіть так, щоб при наведенні (:hover) на будь-який з них він ставав яскравішим (змінював opacity з 0.5 на 1).
Завдання 2: "Я тебе бачу" (Поле вводу)
Створіть <input type="text">. Зробіть так, щоб коли ви клікаєте в поле для друку (:focus), його рамка (border) ставала зеленою, а фон — ніжно-зеленим. Це дає користувачеві розуміння: "Я можу тут писати".
Завдання 3: Математик
Є список <ul> з 10 елементів. Використовуючи :nth-child(...), зафарбуйте червоним кожен третій елемент (3, 6, 9...).
Підказка: там можна писати формули типу 3n.
Завдання 4: Міні-кейс "Хлібні крихти"
У вас є навігація: Головна > Каталог > Товари.
В HTML це просто список посилань <a>. Використовуйте ::after для посилань, щоб додати символ стрілочки > після кожного пункту, окрім останнього.
(Це завдання із зірочкою: вам знадобиться комбінація :not(:last-child) і ::after).
5. 💡 Мислення як у розробника
Як думає досвідчений розробник, коли використовує ці інструменти?
-
Доступність (Accessibility) — це не опція, а база. Новачки часто прибирають "некрасиву синю рамку" навколо кнопок (
outline: none), забуваючи додати свій стиль для:focus. Як думає профі: "Якщо людина не може користуватися мишкою і перемикається клавішею TAB, вона має бачити, де вона зараз знаходиться. Я обов'язково пропишу стилі для:focus". -
HTML має бути "семантичним", а не "декоративним". Не додавайте в HTML порожні
divабоspan, щоб намалювати квадратик чи лінію. Як думає профі: "Мені потрібна іконка перед кнопкою? Я не буду пхати туди зайвий тег<i>. Я зроблю це через::before, щоб HTML код залишався чистим текстом кнопки". -
Порядок має значення (Правило LVHA). При стилізації посилань важливий порядок написання в CSS, інакше один стан перекриє інший:
- :Link (звичайне)
- :Visited (відвідане)
- :Hover (наведення)
- :Active (натискання) Мнемоніка: Lord Vader Handle All.
6. 🧩 Підсумок
Отже, що ми сьогодні зробили? Ми навчилися керувати часом (реакція на події через псевдокласи) і простором (створення нових об'єктів через псевдоелементи), не засмічуючи при цьому наш HTML.
Тепер ви вмієте:
* ✅ Робити інтерфейс інтерактивним (:hover, :active).
* ✅ Піклуватися про зручність вводу (:focus).
* ✅ Автоматизувати стилі для списків та таблиць (:nth-child).
* ✅ Додавати декор без зайвого коду (::before, ::after).
Що далі? Зараз наші кнопки змінюють колір миттєво, ривком. У наступному уроці ми додамо "масло" в цей механізм. Ми поговоримо про Transitions (Переходи) та Animations, щоб усе рухалося плавно, як у кіно.
А поки — експериментуйте! Це був CS50... тобто, наш урок CSS. До зустрічі!