PassFront
  1. PassFront
  2. База знаний
  3. Основы CSS

В чем разница между CSS in JS и CSS модулей?

Основы CSS

CSS Modules изолируют стили на этапе сборки, CSS-in-JS описывает стили в JavaScript и часто генерирует их во время работы.

CSS Modules

/* Button.module.css */
.button { padding: 8px 16px; }
import styles from './Button.module.css';
<button className={styles.button} />;
  • Классы получают уникальные имена при сборке (Button_button__x7a2).
  • Обычный CSS, никакого рантайма.
  • Динамические значения — через CSS-переменные.

CSS-in-JS (styled-components, Emotion)

const Button = styled.button`
  padding: 8px 16px;
  color: ${(p) => (p.primary ? 'white' : 'black')};
`;
  • Стили рядом с компонентом, легко зависят от props.
  • Часто есть рантайм: стили генерируются в браузере, что стоит производительности и усложняет SSR и React Server Components.
  • Есть варианты без рантайма (vanilla-extract, Linaria).

Как выбирать

Для большинства проектов хватает CSS Modules с переменными. CSS-in-JS выбирают, если много динамики от props и уже есть экосистема.

Коротко для собеседования

CSS Modules — изоляция при сборке без рантайма, CSS-in-JS — стили в JS с удобной динамикой, но обычно с затратами на рантайм.

Подробнее: CSS Modules

Другие вопросы раздела