intermediate
CSS-in-JS
Оценивайте runtime и compile-time CSS-in-JS для co-location, динамических стилей, SSR, кэширования и стоимости bundle.
CSS-in-JS размещает стили рядом с компонентами и выражает динамические варианты из props или state. Реализации делятся на runtime injection (styled-components, Emotion) и compile-time extraction (Linaria, vanilla-extract, Panda).
Runtime-библиотеки внедряют правила в браузере — гибко, но дорого для SSR streaming и cache без дисциплины. Compile-time инструменты выдают статические CSS-файлы с лучшим кешированием и меньшим весом на critical path.
// compile-time: класс на сборке
const button = css({ padding: '0.5rem', background: 'var(--accent)' });
// runtime: новые правила на каждое динамическое значение без cache
const Box = styled.div<{ $gap: number }>`
display: flex;
gap: ${({ $gap }) => $gap}px;
`;
На интервью: runtime cost, critical CSS, распространение темы и когда co-location лучше общего stylesheet.
Типовые ошибки: неограниченная генерация динамических стилей; баги порядка стилей при SSR; нет общего слоя tokens.
Чеклист:
- Runtime vs compile-time trade-offs.
- Порядок injection и hydration при SSR.
- Кешируйте или ограничивайте динамические значения.
- Темы через tokens, не разовые props.