Стилизация Компонентов
Данный документ описывает правила стилизации компонентов во frontend‑п риложении Magnet.
1. Библиотека стилизации
В проекте используется библиотека Stitches — современное CSS‑in‑JS решение, обеспечивающее высокую производительность и типобезопасность стилей.
2. Запрет на инлайн‑стили
Инлайн‑стили (style={{ ... }}) не используются в проекте. Все стили определяются через styled‑компоненты или через проп sx в Material‑UI для динамических случаев.
3. Конфигурация тем и стилей
Основная конфигурация Stitches находится в следующих файлах:
apps/frontend/src/shared/styles/stitches.styles.ts— основная конфигурация для приложенияapps/frontend/src/widgets/landing/lib/shared/styles/stitches.styles.ts— конфигурация для лендинга
Конфигурация включает:
media— набор breakpoints для адаптивности (toMobile,toTablet,toDesktopи т. д.)theme— базовые цвета темы (background,card)
4. Подход к стилизации компонентов
При создании стилизованных компонентов используется следующий паттерн:
- Сначала создаётся компонент через
let. - Затем он перезаписывается с помощью
styled.
Пример 1: стилизация через Stitches
const Content = styled('div', { display: 'flex', gap: 40, marginBottom: 40 });
Пример 2: сти лизация через Material‑UI
const CustomCard = styled(Card)(({ theme }) => ({
backgroundColor: theme.palette.primary.main,
borderRadius: '1rem',
}));
5. Импорт кастомного styled
Всегда импортируйте styled из нашей кастомной конфигурации, а не напрямую из библиотек.
Правильно:
import { styled } from '@shared/styles';
Неправильно:
import { styled } from '@stitches/react'; // Не использовать!
6. Лучшие практики
- Используйте
styledдля статических стилей. - Избегайте инлайн‑стилей (
style={{ ... }}). - Используйте предопределённые media‑запросы из конфигурации (
toMobile,toTabletи т. д.). - Создавайте именованные компоненты для повторно используемых стилей.
7. Пример полного компонента
import { FC } from 'react';
import { styled } from '@shared/styles';
let MyComponent: FC = () => {
return (
<div>
<h1>Заголовок</h1>
</div>
);
};
MyComponent = styled(MyComponent, {
display: 'flex',
flexDirection: 'column',
gap: 20,
'@toMobile': {
gap: 10,
},
});
export { MyComponent };
Придерживайтесь описанных практик для поддержания качества и согласованности кода.