Селектори за зростом специфічності:
type.class,[attribute]#id- inline
style="..."
Якщо вдаватися в деталі, специфічність — це число, де частини нижчого рангу представляють нижчі порядки:
[ inline ][ id ][ class/attribute/pseudo-class ][ type/pseudo-element ]
Наприклад, для селектора
span.visually.hidden:not(:focus, :focus-within) —
[0][0][3][1] = 31 (:not() має специфічніть того, що всередині).
Властивості позначені !important кладуться в окрему пріоритетну чергу.
Специфічніть в пріоритетній черзі поміж елементами визначається таким же чином, але всі важливі властивості будуть мати вищу специфічність, ніж будь-який селектор в нормальній черзі.
Дозволяє комбінувати довгі селектори зручніше.
Для :is() специфічність рахується так само, ніби вони були розвернуті без :is().
Наприклад, селектор довільної секції, яка йде зразу після довільної секції:
:is(article, aside, section, nav) + :is(article, aside, section, nav) {
margin-block-start: 1rem;
}Це аналогічно до перебору усіх комбінацій:
article + article,
article + aside,
article + section,
article + nav,
aside + article,
/* ... 11 селекторів опущено */
nav + nav {
margin-block-start: 1rem;
}:where() працює аналогічно, але має специфічність 0.
Дозволяє стилізувати елемент, який має певні дочірні або сусідні елементи, які відповідають селектору всередині.
article:has(h2) — це така стаття, всередині якої є заголовок другого рівня.
::before та ::after для того, щоб можна було дадавати презентаційний контент елементам —
такий, що не несе смислового навантаження, ні візуального, ні текстового.
Якщо без контенту в них не можна обійтися, або треба, щоб він копіювався,
цей контент має бути в розмітці, а не в стилях.
::before та ::after не можна виділити чи скопіювати, їх немає в replaced elements (img, input); вони додаються тільки коли є content, і стандартно мають display: inline.
Інші псевдо-елементи додволяють стилізувати те, чого явно немає в дереві документу —
виділення (::selection),
маркери списків (::marker),
текст-підказка (::placeholder),
першу літеру чи рядок (::first-letter, ::first-line).
Список псевдо-елементів на MDN
Для того, щоб можна було доступитися до специфісних станів елементів, наприклад, :visited, :invalid.
Використовуйте rem та em для віступів та полів (margin, padding, gap тощо).
Використовуйте ці та інші відносні до розміру шрифту величини — ch, lh, ex, cap, а також відсотки (%) для встановлення розмірів елементів, де це необхідно.
Це робить дизайн гнучким до налаштувань шрифту користувача.
Використовуйте новий синтаксис для написання кольорів:
Старий:
rgba(r, g, b)
rgb(r, g, b)
Новий:
rgb(r g b / a)
hsl(h s l / a)
Генерувати кольорові схеми з логічною градацією світності найзручніше в просторах LAB та OKLAB:
lch(lighness chroma hue / alpha)
oklch(lighness chroma hue / alpha)
Список на MDN Специфікація про кольори: CSS Color Module Level 4
Специфікація: CSS Box Model Level 4
Відображення елемента є:
- зовнішнє — те, як він веде себе в просторі батькіського елемента; та
- внутрішнє — те, яке середовище він створює для дочірніх елементів.
Специфікація: CSS Display Level 3
Різні мови записуються по-різному.
Наприклад, японська зазвичай пишеться зверху вниз та справа наліво.
Для роботи з цим є writing-mode, який має наступні значення:
| horizontal-tb | vertical-rl | vertical-lr |
|---|---|---|
![]() |
![]() |
![]() |
| горизонтальний | вертикальний спрва наліво | вертикальний зліва направо |
Різні методи письма може й не знадобляться для того,щоб працювати з різними мовами, але необхідні для розуміння логічних властивотей для розміру та полів 👇
Специфікація: CSS Writing Modes Level 3
Фізичні відповідають сторонам пристрою. Логічні відповідають методу написання.
Застосовуються для margin, padding, border, border-radius, позиціонування та розмірів.
Використовуте ті, які вам потрібні в контексті. Якщо це відступ між абзацами, то це логічний відступ. Якщо це поля контейнера, то це або фізичний, або логічний відступ.
Приклад для margin:
| Фізичні | Логічні для англійської/української |
|---|---|
| margin-top | margin-block-start |
| margin-bottom | margin-block-end |
| margin-left | margin-inline-start |
| margin-right | margin-inline-end |
Специфікація: CSS Logical Properties and Values Level 1
- BEM — суто компонентний підхід
- ACSS (Tailwind) суто утилітний підхід
Недоцільно мати утиліти, які буквально повторюють одну CSS-властивість із заданим значенням, як от pb-4.
Так само недоцільно для кожного компонента повторювати, що в нього повинні бути заокруглені кути, білий фон і сіра рамка.
Краще бути десь посередині. Наприклад:
.box {
padding: 1rem;
border: 1px solid #eee;
border-radius: .25rem;
background-color: #fff;
}- Atomic Design
- OOCSS
- SMACSS
Найпопулярніша методологія запозичена з recess:
- позиція
- дисплей
- флекси/ґріди
- розміри й поля
- шрифти й текст
- рамки й фони
- анімації
Якщо використовувати Stylelint, то трохи легше.
Препроцесори генерують із мета-CSS — CSS. Постпроцесори (процесори) перетворюють CSS в CSS.
Коли вам необхідно геренувати із мета-коду CSS, використовуйте препроцесор. В усіх інших випадках їх використання не є доцільним. CSS-процесор доцільно використовувати, коли хочеться писати сучасний CSS, мати чистий код і при цьому підтримувати старіші браузери.
Приклад для препроцесора — генерація типографічної шкали:
Приклад для процесора — перетворення кольорів з новго синтаксису й простору у старіший, щоб підтримувати ширший спектр браузерів.
На сьогодні активний — SASS.
До речі, про nesting, не використовуйте. Це прикольно, але без нього легше. Чим ближче ви до стандарту, тим зрозуміліший код.



