Каскад стилів
Каскад стилів має стосунок до процесу визначення та застосування стилів до елементів на веб-сторінці. Коли браузер рендерить сторінку, він використовує каскадні стилі для визначення, які стилі застосовуються до кожного елемента, і в якому порядку.
У CSS-файлі може бути кілька властивостей стилю, які стосуються якогось елемента. Якщо вони відрізняються, то в результаті вони комбінуються. А якщо це одна і та ж властивість, але з різними значеннями, то виникає конфлікт.
Браузеру якраз і потрібно правильно визначити пріоритетність застосування того чи іншого стилю. Розглянемо такий приклад.
<p class="text">Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>p {
color: white;
}
.text {
background-color: green;
}У такому випадку фінальний стиль до тексту застосується такий: білий текст на зеленому фоні.
Розглянемо наступний приклад.
p {
color: blue;
}
.text {
color: green;
}Тепер у нас два селектори мають різні значення однієї й тієї ж властивості.
Щоб браузер міг правильно визначити фінальний стиль він використовує два механізми: специфічність і наслідування.
Специфічність
Вага специфічності (Specificity): Якщо один елемент має декілька правил, браузер вибирає правило з більшою вагою специфічності. Тобто тут працює елементарна математика - браузер рахує специфічність кожного селектора і де вона буде більшою, той селектор і перемагає.
Існує чотири ранги специфічності.
Браузер перевіряє селектори 1 рангу й обирає той, де число більше. Якщо вони однакові, то браузер переходить до порівняння селекторів 2 рангу. І так далі аж до 4 рангу.
Якщо навіть після повної перевірки специфічність однакова, то обирається той стиль, який буде останнім у файлі css.

Селектори 4 рангу
До селекторів 4 рангу належать селектори елементів та псевдоелементів. Кожен селектор елементів та псевдоелементів додає одиницю до четвертого рангу.
Селектори 3 рангу
Кожен селектор класу, атрибута і псевдокласу додає одиницю до третього рангу специфічності.
Селектори 2 рангу
Кожен селектор ідентифікатора додає одиницю до другого рангу.
Селектори 1 рангу
Селектори 1 рангу - це інлайнові (вбудовані) стилі, які прописують в самому файлі html в атрибуті style. Ці стилі мають найвищу специфічність і їх не можна перевизначити через стилі в CSS.
Однакова специфічність
В селекторах з однаковою специфічністю браузер обере той, який розташований нижче у файлі CSS.
На практиці буває досить важко визначити специфічність. Тому селектори потрібно обирати якнайпростіші. Найкращий спосіб - використовувати селектори класу. Крім того, це покращує читабельність коду.
Є кілька варіантів організації стилізації в проєкті. Який обрати - залежить від уподобань розробника та стандартів розробки в команді.
Перший підхід уникнення складної специфічності
Батьківському елементу задають клас, а в файлі стилів відповідно звертаються до селектора тегу у якого батьком чи предком є спільний елемент із заданим класом.
Другий підхід уникнення складної специфічності
Кожному елементу дають назву класу, і його нащадкам також дають назви класів. І у файлі зі стилями звертаються за правилами опису стилів для нащадків та дітей.
Третій підхід уникнення складної специфічності
Кожному елементу потрібно задати свій клас і у файлі стилів напряму звертатися до елементів з таким класом. Спільному батьку дають назву класу, а всім його нащадкам теж назву класу у форматі назва_класу_батька-назва_класу_нащадка. Схожий підхід також використовують в методології BEM (утім, яка останнім часом здає позиції популярності).
У сучасній веброзробці це найпоширеніший підхід писати стилі.
Перебиваємо стиль за допомогою !important
!important - це ключове слово в CSS, яке можна додати до значення властивості, щоб надати йому найвищий пріоритет в каскаді стилів. Це означає, що будь-яке правило, яке має !important, буде переважати над усіма іншими правилами, навіть якщо вони мають більшу вагу специфічності чи знаходяться в останньому CSS-файлі.
У цьому прикладі, color: red !important; вказує, що колір тексту для всіх елементів з класом .example повинен бути червоний незалежно від будь-яких інших стилів, які можуть бути визначені для цього елемента.
Використання !important варто обирати з обачливістю. Це може ускладнити управління стилями, особливо на великих проєктах, тому що важко відстежувати, які стилі мають вищий пріоритет через !important. Якщо можливо, краще уникати його використання і намагатися вирішувати конфлікти стилів за допомогою правильного використання специфічності та порядку визначення стилів. Утім при використанні деяких бібліотек це може бути єдиним способом "перебити" стилізацію, особливо коли немає прямого доступу до файлу зі стилями.
Наслідування властивостей
Наслідування - це механізм, за допомогою якого стилі, встановлені для одного елементу на веб-сторінці, можуть бути автоматично успадковані іншими елементами в його дочірніх елементах. Це означає, що якщо встановити стиль для батьківського елемента, цей стиль може бути успадкований його дочірніми елементами без необхідності явно вказувати цей стиль для кожного дочірнього елемента окремо.
Наприклад, якщо встановити колір тексту для <body> елемента, всі текстові елементи всередині <body>, такі як <p>, <h1>, <span> і т. д., можуть успадкувати цей колір тексту, якщо для них не встановлено власний колір тексту. Наслідуються переважно властивості оформлення тексту.
Проте не всі властивості успадковуються. Зазвичай, такі властивості як margin, border, padding, і background не успадковуються від батьківського до дочірнього елемента.
Також, посилання не наслідують колір тексту. Щоб примусово змусити наслідувати якийсь стиль використовують спеціальне значення inherit, щоб не прописувати двічі це значення. Тоді при зміні властивості буде достатньо змінити тільки властивість батька.
Базові властивості для всього документу
Щоб зменшити файл стилів зазвичай додають в <body> базові найвживаніші стилі на сторінці, а потім там де треба точково їх модифікують. Це зокрема стосується кольору, шрифту, жирності шрифту, його розташування тощо.
Last updated