CSS: изоляция стилей
Проблема глобальной области видимости CSS решается разными подходами к изоляции и именованию.
BEM (Блок, Элемент, Модификатор)
Компонентный подход к вёрстке: интерфейс делится на независимые блоки. Имена селекторов строятся по схеме block__element--modifier.
.card {}
.card__title {}
.card--featured {}Плюсы:
- упрощает код и рефакторинг;
- назначение селекторов очевидно из имён — не нужны комментарии;
- переиспользование фрагментов, в т.ч. на одном DOM-узле;
- предотвращает взаимное влияние компонентов.
CSS Modules
CSS-файлы, в которых все имена классов и анимаций по умолчанию локальны (scoped). Сборщик генерирует уникальные имена — снимает с разработчика ответственность за именование и коллизии.
import styles from "./Button.module.css";
<button className={styles.primary}>OK</button>;Atomic CSS
Подход, при котором используются маленькие однозадачные классы с именами по визуальной функции (например, mt-4, flex, text-center). Стилизация происходит композицией атомарных классов в разметке (идея Tailwind и подобных).
CSS-in-JS
Внешний слой функциональности, позволяющий писать CSS-свойства для компонентов через JavaScript (styled-components, Emotion). Стили привязаны к компоненту, поддерживают динамику через пропсы; изоляция достигается генерацией уникальных классов.