CSS-in-JS — это методология, при которой стили для компонентов описываются прямо в JavaScript-коде, вместо использования отдельных CSS-файлов. Такой подход позволяет тесно интегрировать логику приложения с его визуальным представлением, улучшает поддержку динамических стилей и облегчает работу с изоляцией компонентов.
Стили как объекты или строки В большинстве библиотек CSS-in-JS стили описываются либо в виде объектов JavaScript, где ключи соответствуют свойствам CSS, либо в виде строк с синтаксисом CSS. Например:
const buttonStyle = {
backgroundColor: 'blue',
color: 'white',
padding: '10px 20px',
borderRadius: '5px'
};
При использовании строкового подхода часто применяется шаблонная строка:
const buttonStyle = `
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
`;Динамические стили Одним из сильных преимуществ CSS-in-JS является возможность использовать переменные и функции для генерации стилей на лету. Например, изменение цвета кнопки в зависимости от состояния:
const getButtonStyle = (isActive) => ({
backgroundColor: isActive ? 'green' : 'gray',
color: 'white',
padding: '10px 20px'
});Изоляция и уникальные классы Большинство библиотек генерируют уникальные имена классов, что исключает конфликты стилей между компонентами. Это особенно полезно в крупных проектах, где могут использоваться сотни компонентов с похожими именами CSS-классов.
Styled Components Позволяет описывать компоненты с помощью шаблонных строк, связывая стили напрямую с компонентами:
import styled from 'styled-components';
const Button = styled.button`
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
&:hover {
background-color: darkblue;
}
`;
Особенности:
Emotion Подходит для объектов и строкового синтаксиса. Обеспечивает высокую производительность и гибкость:
/** @jsxImportSource @emotion/react */
import { css } from '@emotion/react';
const buttonStyle = css`
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
`;
Поддерживает условное применение стилей и композицию нескольких стилей.
JSS Позволяет описывать стили как объекты и динамически применять их к компонентам. Часто используется с React:
const styles = {
button: {
backgroundColor: 'blue',
color: 'white',
padding: '10px 20px'
}
};
const useStyles = createUseStyles(styles);
function Button() {
const classes = useStyles();
return <button className={classes.button}>Click</button>;
}
Особенности:
CSS-in-JS является мощным инструментом для современных приложений, обеспечивая гибкость, контроль и удобство при работе с компонентами, особенно в экосистеме React и других библиотек, ориентированных на компонентный подход.