intermediate
CSS Modules
Изолируйте имена классов на компонент, сохраняя обычный CSS, composition и build-time интеграцию.
CSS Modules компилируются в локально scoped имена классов при обычном синтаксисе CSS. Импортируйте стили как объекты; сборка переписывает селекторы в уникальные хеши на модуль.
/* Button.module.css */
.root { padding: 0.5rem 1rem; }
.primary { composes: root; background: var(--accent); }
import styles from './Button.module.css';
<button className={styles.primary}>Save</button>
Composition (`composes`) переиспользует declarations; `:global` выходит из scope для reset или сторонних hooks — умеренно.
На интервью: компромиссы scope, SSR, темизация, общие tokens и глобальные utility layers.
Типовые ошибки: локальные имена не чинят порядок cascade; избыточный :global стирает главную выгоду.
Компромисс: безопасность на сборке против всё ещё нужной стратегии глобальных tokens и layers.
Чеклист:
- Маленький явный API классов.
- Design tokens вне модулей.
- Ограничивайте :global.
- Проверяйте SSR и загрузку CSS при code split.