🎯 Селектори: як вибрати не всі елементи, а тільки потрібні
🎬 Проблема: три абзаци, три різні стилі
Уявіть, що ви пишете сторінку про свій клас. На ній є три абзаци <p>:
- Перший — просто розповідь. Має бути сірим.
- Другий — важливе оголошення. Має бути червоним.
- Третій — просто розповідь. Теж має бути сірим.
Ось як виглядає ця сторінка зараз — звичайний HTML без стилів:
📺 Вигляд у браузері
Мій клас
Наш клас дуже дружний. Ми разом ходимо в походи та готуємося до свят.
Увага! У п’ятницю класна година о 14:00.
У нашому класі 25 учнів — 12 хлопців і 13 дівчат.
Усі три абзаци — чорні. Ніякого виділення. Нудно.
🥴 Спроба №1: стилізуємо через тег-селектор
Пишемо правило для тега <p> — хочемо, щоб усі абзаци були сірими:
p {
color: gray;
}
Ось результат:
📺 Вигляд у браузері
Мій клас
Наш клас дуже дружний. Ми разом ходимо в походи та готуємося до свят.
Увага! У п’ятницю класна година о 14:00.
У нашому класі 25 учнів — 12 хлопців і 13 дівчат.
Результат: усі три абзаци стали сірими. Перший і третій — правильно. А другий мав бути червоним!
Тег-селектор не розрізняє елементи. Він каже: «усі <p> — однакові». І не дає вибрати тільки другий.
🥴 Спроба №2: перевизначимо через inline-стиль
«Ага, — думаємо ми, — зараз виправлю!» І додаємо inline-стиль тільки до другого абзацу:
<p>Перший абзац — сірий.</p>
<p style="color: red;">Другий абзац — червоний.</p>
<p>Третій абзац — сірий.</p>
А CSS залишаємо таким:
p {
color: gray;
}
Ось результат:
📺 Вигляд у браузері
Мій клас
Наш клас дуже дружний. Ми разом ходимо в походи та готуємося до свят.
Увага! У п’ятницю класна година о 14:00.
У нашому класі 25 учнів — 12 хлопців і 13 дівчат.
Результат досягнуто! Другий абзац став червоним. Перший і третій — сірими.
Здається, все працює. Але подивіться на код уважно.
😱 Що не так із цим кодом?
Проблема №1. Ми змішали дві різні речі в одному місці.
- Одні стилі — в окремому блоці
<style>. - Один стиль — прямо в тегу через
style.
Це як писати книгу, де всі розділи надруковані, а один — від руки на полях.
Проблема №2. Код стає важким для читання.
Якщо таких «особливих» абзаців буде 10 — у вас буде 10 inline-стилів, розкиданих по всьому HTML. І кожен треба шукати окремо.
Ось як виглядає такий код у редакторі — зверніть увагу, як важко знайти потрібний стиль:
<style>
p {
color: gray;
}
</style>
<h1>Мій клас</h1>
<p>Наш клас дуже дружний...</p>
<p style="color: red;">Увага! У п'ятницю класна година о 14:00.</p>
<p>У нашому класі 25 учнів...</p>
Стилі в одному місці (у <style>), а один — посеред HTML. Спробуй знайди потрібне.
🏗️ Головна ідея, яку ми порушили
Пам’ятаєте, ми говорили: HTML — це структура, CSS — це оформлення?
- HTML відповідає що є на сторінці: заголовки, абзаци, списки, картинки.
- CSS відповідає як це виглядає: колір, розмір, шрифт.
І це розділення — не просто гарна ідея. Це принцип, на якому тримається вся сучасна веб-розробка.
А коли ми пишемо style="color: red;" прямо в HTML-тегу — ми змішуємо структуру з оформленням.
- HTML більше не чистий — він тепер містить ще й кольори, розміри, шрифти.
- CSS більше не єдиний — частина стилів «загубилася» в HTML.
- Змінити щось стає важко — треба переглядати весь файл вручну.
🤔 То як правильно?
Ось яку проблему треба вирішити:
Ми хочемо стилізувати окремі елементи — але не порушувати правило «HTML — структура, CSS — стилі».
Тобто:
- HTML має залишатися простим: тільки теги, ніяких
style="...". - CSS має містити усі стилі в одному місці.
- І при цьому ми маємо вміти вибрати тільки ті елементи, які нам потрібні.
Саме для цього придумали класи.
❓ Поміркуйте:
- Чому тег-селектор не завжди підходить?
- Що не так з «перевизначенням» через inline-стиль?
- Якби у вас було 50 абзаців і 10 з них «особливі» — що станеться з кодом?
- Чому важливо тримати HTML і CSS окремо?
🏷️ Що таке клас і як він працює
💡 Клас — це ярлик для елемента
Раніше ми розібрали ситуацію: якщо писати стилі прямо в тегах (inline), код стає заплутаним і важким для читання. Ми хочемо стилізувати окремі елементи — але без цього хаосу. І при цьому не порушувати правило «HTML — структура, CSS — стилі».
Уявіть, у вас на сторінці три абзаци. І ви хочете, щоб два з них були сірими, а один — червоним. Якщо написати p { color: gray; } — усі три стануть сірими. А якщо p { color: red; } — усі червоними.
Треба якось позначити потрібний елемент. Сказати браузеру: «ось цей конкретний абзац — особливий, стилізуй його інакше».
Для цього в HTML існує атрибут class.
Клас — це атрибут HTML, який ми додаємо в тег, щоб позначити елемент. Потім у CSS ми пишемо правило для цієї позначки — і воно діє тільки на ті елементи, які її мають.
Простими словами: клас — це як ярлик, який ми клеїмо на елемент. І потім кажемо: «усі елементи з таким ярликом — отримують такий вигляд».
🔧 Як це виглядає в коді
Крок 1. У HTML додаємо атрибут class до потрібного елемента.
<p>Наш клас дуже дружний...</p>
<p class="important">Увага! У п'ятницю класна година о 14:00.</p>
<p>У нашому класі 25 учнів...</p>
Тут до другого абзацу ми додали атрибут class зі значенням important. Це наша позначка. Ми назвали цей клас important, бо він позначає «важливий» абзац.
Крок 2. У CSS пишемо правило для цього класу.
p {
color: gray;
}
.important {
color: red;
}
📌 Зверніть увагу: перед назвою класу в CSS стоїть крапка — .important. Це означає: «усі елементи з класом important».
Крок 3. Дивимось результат.
📺 Вигляд у браузері
Наш клас дуже дружний…
Увага! У п’ятницю класна година о 14:00.
У нашому класі 25 учнів…
Що сталося:
- Перше правило
p { color: gray; }— стилізує усі<p>, робить їх сірими. - Друге правило
.important { color: red; }— стилізує тільки елементи з класомimportant. - Другий абзац має обидві позначки — і тег
<p>, і класimportant. Тому правило з класом перемогло, і він став червоним.
Результат: перший і третій — сірі, другий — червоний. І все це без жодного inline-стилю.
⚠️ Назва класу — це ПРОСТО назва
Це найважливіше в цьому блоці. Дуже часто початківці думають: «Клас important робить текст червоним».
Це не так!
Клас — це просто ярлик. Він нічого не робить сам по собі. Колір визначає CSS-правило, яке ми до нього прив’язали.
Доведемо це.
Ось ми маємо клас important, і CSS-правило робить його червоним:
<p class="important">Увага!</p>
.important {
color: red;
}
Результат: текст червоний.
А тепер давайте перейменуємо клас у HTML і CSS одночасно — назвемо його mega-cool:
<p class="mega-cool">Увага!</p>
.mega-cool {
color: red;
}
Результат — той самий. Текст червоний. Бо колір визначає не назва класу, а правило в CSS.
І навпаки — можемо залишити назву important, але змінити колір у CSS:
.important {
color: green;
}
Результат: текст зелений, хоч клас і називається important.
📌 Запам’ятайте: назва класу — це для вас, щоб ви розуміли, що це за елемент. Для браузера назва — просто набір символів. Він не знає, що означає слово «important». Він просто порівнює: чи є в HTML така сама назва класу, як у CSS.
📝 Правила найменування класів
Раз клас — це просто назва, виникає питання: а як правильно його називати? Ось головні правила.
1. Назва починається з літери.
- Можна:
warning,header,main-title. - Не можна:
1warning,2block.
Причина: браузер може подумати, що 1warning — це число, а не назва.
2. Використовуйте маленькі літери.
- Рекомендується:
warning,menu-item. - Не рекомендується:
Warning,Menu_Item.
Браузер розрізняє регістр — warning і Warning для нього різні класи. Тому краще писати все маленькими — щоб не заплутатися.
3. Кілька слів — через дефіс.
- Добре:
main-title,menu-item,warning-block. - Погано:
mainTitle,menu_item,menu item.
Дефіс — це стандарт у веб-розробці. Він читабельний і не створює проблем.
4. Не використовуйте пробіли.
class="main title" — це два різних класи main і title, а не один. Пробіл розділяє класи.
5. Назва має описувати роль, а не вигляд.
- Погано:
red-text,big-font. - Добре:
warning,title,important-note.
Чому? Бо завтра ви захочете зробити попередження оранжевим — і назва red-text стане брехнею. А от warning — завжди залишиться «попередженням», незалежно від кольору.
6. Англійська — стандарт у веб-розробці.
Технічно браузер дозволяє писати назви класів будь-якою мовою — навіть українською:
<p class="важливе">...</p>
.важливе {
color: red;
}
Це працює. Але на практиці так не роблять. Ось чому:
- Документація й приклади англійською. Якщо ви шукатимете допомогу в інтернеті — усі приклади будуть із
important,warning,button. - Командна робота. У реальних проєктах код читають інші розробники. Англійські назви зрозумілі всім.
- Стандарт галузі. Це як мова програмування — англійська просто прийнята як універсальна.
📌 У нашому курсі ми писатимемо класи англійською — щоб звикати до справжнього стилю роботи.
📊 Підсумок правил найменування
| Правило | Добре | Погано |
|---|---|---|
| Починається з літери | warning | 1warning |
| Маленькі літери | warning | Warning |
| Кілька слів — через дефіс | menu-item | menu_item |
| Без пробілів | main-title | main title |
| Описує роль, не вигляд | warning | red-text |
| Англійською | button | кнопка |
🔄 Один клас — багато елементів
Клас — це група. Одна й та сама позначка може бути на багатьох елементах.
Наприклад, у вас на сторінці є три попередження — у різних тегах:
<p class="important">Увага! Контрольна робота в п'ятницю.</p>
<h2 class="important">Зміна розкладу</h2>
<li class="important">Домашнє завдання здати до четверга</li>
І одне правило в CSS:
.important {
color: red;
}
Що станеться: усі три елементи — незалежно від того, що вони різні теги — стануть червоними. Бо всі вони мають клас important.
📺 Вигляд у браузері
Увага! Контрольна робота в п’ятницю.
Зміна розкладу
• Домашнє завдання здати до четверга
📌 Це і є сила класів. Одна позначка — і один стиль — працюють для будь-яких елементів.
🎨 Кілька класів на одному елементі
Елемент може мати не один, а кілька класів одночасно. Для цього їх пишуть через пробіл:
<p class="important big">Терміново! Важлива інформація.</p>
Тут у абзацу два класи: important і big. У CSS ми пишемо правила для кожного окремо:
.important {
color: red;
}
.big {
font-size: 24px;
}
Що станеться: абзац стане червоним (бо має клас important) і великим (бо має клас big).
Ось приклад із трьома абзацами — різні комбінації класів:
<p class="important">Просто попередження.</p>
<p class="important big">Термінове велике попередження.</p>
<p class="big">Просто великий текст.</p>
📺 Вигляд у браузері
Просто попередження.
Термінове велике попередження.
Просто великий текст.
📌 Класи — як конструктор LEGO. Додав один клас — додав одну властивість. Можна комбінувати як завгодно.
📌 Що запам’ятати про класи:
- Клас — це атрибут у HTML-тегу:
<p class="important">. - Клас — це позначка, а не сам стиль. Стиль пишемо окремо в CSS.
- У CSS клас вибирається через крапку:
.important { ... }. - Один клас — багато елементів. Один і той самий клас може бути на різних тегах.
- Елемент може мати кілька класів — через пробіл:
class="important big". - Імена класів описують роль, а не вигляд, і пишуться англійською.
❓ Поміркуйте:
- Що таке клас — це стиль чи позначка?
- Як браузер розуміє, що ми маємо на увазі саме клас, а не тег?
- Чи може клас
importantробити текст зеленим?- Чому назва класу має описувати роль, а не вигляд?
- Навіщо на одному елементі може бути кілька класів?
🆔 Що таке id і навіщо він потрібен
Ми вже знаємо про класи. Клас — це як ярлик для групи. Один клас може бути на багатьох елементах: на трьох абзацах, двох кнопках, будь-якій кількості тегів. І це дуже зручно — одне правило, багато елементів.
Але уявіть іншу ситуацію.
На вашій сторінці є 20 абзаців. Ви хочете зробити так: коли користувач натискає кнопку «Виділити головне» — тільки один конкретний абзац (найважливіший) змінює колір. Не всі 20, а лише цей один.
Щоб це зробити — треба спочатку знайти цей абзац серед інших. І ось тут виникає питання: як його позначити?
🤔 Варіант 1: через клас
Можна дати цьому абзацу якийсь клас — наприклад, highlight. Але клас — це «ярлик для групи». І ось у чому проблема: завтра ви (або інший розробник, який допрацьовує сторінку) можете випадково повісити цей самий клас ще на два-три абзаци. Бо клас — для багатьох. І тоді замість одного «виділеного» абзацу стане три. А кнопка мала змінювати колір тільки одного.
✅ Варіант 2: через id
А ось id — це саме те, що нам треба. Він каже: «цей елемент — єдиний такий на всій сторінці. Його можна знайти за цим ідентифікатором».
id — це унікальний ідентифікатор елемента. Як номер паспорта — він є тільки в одного елемента на сторінці. І за цим «номером» цей елемент завжди можна знайти.
📌 Коли використовувати id, а не клас:
- Коли елемент на сторінці один-єдиний.
- Коли треба знайти саме цей елемент серед багатьох.
- Коли в майбутньому до нього прив’яжуть якусь дію — наприклад, натискання кнопки, яке змінює саме цей елемент.
Приклади таких елементів на реальних сайтах:
- Шапка сайту — вона одна.
- Головне меню — воно одне.
- Кнопка «Наверх» — вона одна.
- Поле пошуку — воно одне.
✍️ Як писати id у коді
Давайте розберемо окремо, як саме записується id у HTML і в CSS.
Крок 1. У HTML — це атрибут у тегу.
<h1 id="main-title">Мій клас</h1>
📌 Зверніть увагу:
- Атрибут називається
id(маленькими літерами). - Значення пишеться в лапках —
"main-title". - Назва
id— у лапках, без решітки.
Крок 2. У CSS — це селектор із решіткою #.
#main-title {
color: navy;
}
📌 Зверніть увагу:
- Перед назвою стоїть решітка
#. - Після решітки — та сама назва, що й у HTML:
main-title. - Без лапок.
Ось як це виглядає разом:
<h1 id="main-title">Мій клас</h1>
#main-title {
color: navy;
}
📌 Запам’ятайте різницю:
| У HTML | У CSS |
|---|---|
id="main-title" | #main-title { ... } |
| Без решітки, у лапках | З решіткою, без лапок |
Те саме стосується класу, тільки замість решітки — точка:
| У HTML | У CSS |
|---|---|
class="important" | .important { ... } |
| Без точки, у лапках | З точкою, без лапок |
💡 Клас vs id: коротке порівняння
| Клас | id | |
|---|---|---|
| Скільки елементів? | Багато | Тільки один |
| Для чого? | Позначити групу | Позначити унікальний елемент |
| У HTML | <p class="important"> | <p id="main-title"> |
| У CSS | .important (з точкою) | #main-title (з решіткою) |
| Аналогія | Ярлик групи | Номер паспорта |
⚠️ Важливе уточнення: id — багато в CSS, один в HTML
Це момент, який часто плутають. Розберімо уважно.
У CSS ми можемо описати скільки завгодно різних id:
#header {
background-color: navy;
}
#main-title {
color: red;
}
#footer {
color: gray;
}
#search {
font-size: 18px;
}
Чотири різних id — і це нормально. Кожен описує свій унікальний елемент.
Але в HTML кожен з цих id можна використати тільки ОДИН раз:
<h1 id="main-title">Мій клас</h1>
<!-- ✔ ОК — це єдиний елемент з таким id -->
<footer id="footer">...</footer>
<!-- ✔ ОК -->
<div id="header">...</div>
<!-- ✔ ОК -->
<form id="search">...</form>
<!-- ✔ ОК -->
А ось так — помилка:
<h1 id="main-title">Мій клас</h1>
<p id="main-title">Це теж заголовок?</p>
<!-- ✘ ПОМИЛКА — два елементи з однаковим id -->
📌 Просте правило:
- У CSS —
idможе бути багато різних. - У HTML — кожен
idвикористовується тільки один раз.
Так само, як у паспортній системі: може бути багато різних номерів паспортів, але один номер — тільки в однієї людини.
📌 У нашому курсі — переважно класи
Хоч ми й розібрали id, у нашому курсі ми будемо переважно використовувати класи. Ось чому:
- Класи гнучкіші. Один клас — на багато елементів. Не треба думати «а чи не буде конфлікту?».
- Класи безпечніші. Якщо випадково повторите клас — нічого не зламається. А якщо повторите
id— браузер «з’їсть» один із них. - Так роблять у реальних проєктах. У сучасній веб-розробці для стилів майже завжди використовують класи. У сучасній веб-розробці для стилів майже завжди використовують класи — вони гнучкіші й безпечніші. А
idзалишають для інших задач: наприклад, коли треба знайти конкретний елемент у коді скрипта (щоб при натисканні кнопки щось змінилося) або створити посилання на певний блок сторінки. У нашому курсі ми працюватимемо зі стилями, тому для нас основне — це класи.
📌 id треба знати — бо він є в HTML і ви будете його зустрічати в чужому коді. Але використовувати для стилів ми будемо майже завжди класи.
🔧 Повний приклад
<h1 id="main-title">Мій клас</h1>
<p>Наш клас дуже дружний...</p>
<p class="important">Увага! У п'ятницю класна година.</p>
<p class="important">Не забудьте щоденники!</p>
#main-title {
color: navy;
text-align: center;
}
.important {
color: red;
}
📺 Вигляд у браузері
Мій клас
Наш клас дуже дружний…
Увага! У п’ятницю класна година.
Не забудьте щоденники!
Що сталося:
- Заголовок
<h1>маєid="main-title"— він один такий на сторінці. Тому правило#main-titleзастосувалося саме до нього. - Два абзаци мають клас
important— вони обидва стали червоними, бо клас може бути на багатьох елементах.
📌 Що запам’ятати про id:
id— унікальний ідентифікатор. Одинid— один елемент.- У HTML — це атрибут:
<h1 id="main-title">. - У CSS — вибирається через решітку:
#main-title { ... }. - У CSS може бути багато різних
id, але в HTML кожен використовується лише раз. - У нашому курсі для стилів ми будемо майже завжди використовувати класи.
id— знати треба, але для стилів він використовується рідко.
❓ Поміркуйте:
- Чим
idвідрізняється від класу?- Чому
idне можна використовувати двічі на одній сторінці?- Що станеться, якщо дати двом елементам однаковий
id?- Коли краще використати клас, а коли —
id?
✅ Підсумок
Ми розібрали тему селекторів — як вибирати не всі елементи, а тільки потрібні. Ось головне, що варто запам’ятати.
1. До цього ми стилізували через тег-селектор.
p { color: gray; } діє на усі <p> на сторінці. Це зручно, коли треба однаковий стиль для всіх. Але не підходить, коли треба вибрати окремі елементи.
2. Клас — це позначка для групи елементів.
У HTML додаємо атрибут: <p class="important">. У CSS пишемо правило з крапкою: .important { color: red; }.
3. Клас — це просто позначка, а не сам стиль.
Назва класу нічого не робить сама по собі. class="important" не робить текст червоним — колір задає правило в CSS. Тому клас можна назвати будь-як, і результат буде той самий.
4. Один клас — багато елементів.
Той самий клас може бути на різних тегах: <p class="important">, <h2 class="important">, <li class="important">. І одне правило в CSS зробить їх усіх однаковими.
5. На одному елементі може бути кілька класів.
Через пробіл: <p class="important big">. У CSS — окремі правила для кожного класу. Це як конструктор: комбінуєш класи — комбінуєш стилі.
6. Правила найменування класів.
Маленькі літери, англійською, кілька слів — через дефіс (main-title), починати з літери, не описувати вигляд (warning, а не red-text).
7. id — унікальний ідентифікатор.
На відміну від класу, id — тільки один на сторінці. У HTML — <h1 id="main-title">. У CSS — з решіткою: #main-title { ... }.
8. У CSS може бути багато різних id, але в HTML кожен використовується один раз.
Два елементи з однаковим id — помилка. Браузер не видасть попередження, але поведеться дивно.
9. У нашому курсі — переважно класи.
Для стилів майже завжди використовують класи. id — знати треба, але для стилів він використовується рідко.
❓ Перевірте себе
Спробуйте відповісти на кожне запитання самостійно — а потім натисніть, щоб перевірити себе.
1. Чому тег-селектор не завжди підходить?
Бо він діє на усі елементи цього тега. Іноді треба стилізувати тільки деякі — і тоді тег-селектор не допоможе.
2. Що таке клас — це стиль чи позначка?
Це позначка. Він нічого не робить сам по собі — лише позначає елемент. А колір, розмір тощо задає правило в CSS.
3. Як CSS розуміє, що ми маємо на увазі саме клас, а не тег?
Перед назвою класу в CSS стоїть крапка — .important. А перед тегом — нічого, просто p. Ось так браузер і розрізняє.
4. Як назвати клас? Які правила?
Маленькі літери, англійською, кілька слів — через дефіс (main-title). Починати з літери (не з цифри). Назва описує роль, а не вигляд (warning, а не red-text).
5. Чим id відрізняється від класу?
id — унікальний. Він може бути тільки в одного елемента на сторінці. А клас — на багатьох. У CSS id вибирається через решітку (#header), а клас — через крапку (.important).
6. Що станеться, якщо двом елементам дати однаковий id?
Браузер не видасть помилку. Але правило #id { ... } застосується тільки до першого знайденого елемента. Другий залишиться без стилів.