Кастомизация дизайн системы
Для удобного использования фреймворка Steroids, рекомендуем настроить дизайн систему под ваш проект. Есть несколько возможностей кастомизации дизайн системы Steroids:
- Настройка
scssпеременных. - Переопределение
viewчасти компонентов. - Создание своего npm-пакета для
ui-kitна основе@steroidsjs/bootstrap. - Кастомизация дизайн макета в
Figma(мы предоставляем открытые макеты).
Далее рассмотрим отдельно каждый способ.
Настройка scss переменных
Стилизация компонентов в Steroids построена на scss переменных, что позволяет полностью настроить их под конкретный проект.
1. Подключение кастомных переменных
На первом шаге нужно создать файловую структуру для добавление кастомных переменных. Ниже представлен пример такой структуры:
└── src
└── style
├── custom-variables
│ ├── colors.scss - файл с переменными цветов
│ ├── media.scss - файл с переменными для media выражений
│ ├── typography.scss - файл с переменными для типографики
│ └── index.scss - файл для подключения всех файлов с кастомными переменными
└── variables.scss - scss переменные (уже есть в boilerplate)В файл variables.scss подключаем кастомные переменные таким образом:
@import '~@steroidsjs/bootstrap/scss/mixins';
@import '~@steroidsjs/bootstrap/scss/variables';
@import './custom-variables';Теперь, осталось только добавить нужные переменные в соответствующие файлы.
2. Переопределение цветов приложения
Цвета в Steroids определяются через root-переменные, а после эти значения присваиваются scss-переменным. Root-переменные позволяют динамически менять цвета для разных тем приложения (например темной и светлой). При этом в коде используются только одноименные scss-переменные.
Например, чтобы переопределить primary и secondary цвета нужно добавить в файл custom-variables/colors.scss такую конструкцию:
:root {
--primary: red;
--secondary: blue;
}Если у вас в проекте есть темная тема, то для переопределения цветов в этой теме нужно добавить еще одну конструкцию:
html[data-theme="dark"] {
--primary: orange;
--secondary: purple;
}В дальнейшем в коде проекта можно будет использовать переменные цветов таким образом:
@use "style/variables";
.Block {
color: variables.$primary; // переменной $primary в Steroids присваивается значение var(--primary) - и так со всеми цветами
}3. Добавление и переопределение цветовых тем для кнопок
Для стилизации компонента Button в Steroids используется scss-переменная $color-themes. В ней обозначены четыре основных цвета для кнопки:
color:backgroundцвет кнопки.color-light:backgroundцвет в состоянииactive.color-dark:backgroundцвет в состоянииhover.text-color: цвет текста в кнопке.
С помощью кастомной переменной $color-themes можно как переназначать цветовые темы кнопок из Steroids, так и создавать новые.
Например, чтобы переназначить тему primary и добавить тему sub-button для кнопки, нужно добавить в файл custom-variables/colors.scss такую конструкцию:
@use "sass:map"; // без этой строчки не будет работать scss-функция map.merge()
@use "~@steroidsjs/bootstrap/scss/variables"; // использование переменных цветов из Steroids (по надобности)
$color-themes: (); // определение переменной color-themes (нужно по правилам scss при назначении переменной map.merge())
$color-themes: map.merge(
(
"primary": (
"color": red,
"color-dark": red,
"color-light": orange,
"text-color": white,
),
"sub-button": (
"color": variables.$blue,
"color-dark": variables.$blue-dark,
"color-light": variables.$blue-light,
"text-color": white,
),
),
$color-themes
);При этом, нужно учитывать, что переменная $color-themes полностью перезаписывается. Это значит, что при написании конструкции выше, в проекте будут определены только две темы для кнопок - primary и sub-button.
4. Кастомизация типографики
Для компонентов типографики Text и Title есть пропс type, который задает не только html-тег, но и определенные стили. За это отвечают scss-переменные $text-types, $title-types. Чтобы их переназначить, нужно добавить в файл custom-variables/typography.scss соответствующие конструкции для каждой переменной, например:
@use "sass:map";
@use "~@steroidsjs/bootstrap/scss/variables";
$title-types: ();
$title-types: map.merge(
(
"h1": (
"font-size": variables.$font-size-2xl,
"font-weight": variables.$font-weight-lg,
"line-height": variables.$line-height-2xl,
"color": variables.$text-color,
),
"h2": (
"font-size": variables.$font-size-xl,
"font-weight": variables.$font-weight-lg,
"line-height": variables.$line-height-xl,
"color": blue,
),
"sub": (
"font-size": 14px,
"font-weight": variables.$font-weight-lg,
"line-height": variables.$line-height-lg,
"color": blue,
),
),
$title-types
);Таким образом можно создавать кастомные типы для текста и заголовков. Использование типов в коде будет такое:
<Title
type='custom-title'
content='some content'
>Стили, которые можно записать в типы текста и заголовка:
font-familyfont-sizefont-weightline-heightcolortext-aligntext-transformtext-decoration
Кроме того, можно добавлять к ним префикс mobile или tablet для определения значений свойств на разных размерах экрана. Например, при добавлении префикса mobile свойства применятся в медиа выражении @media (max-width: media.$mobile-width), где $mobile-width можно задать прямо в проекте.
5. Переназначение переменных для media выражений
Чтобы переназначить media переменные, можно добавить их в файл custom-variables/media.scss, например:
$mobile-width: 500px;
$tablet-width: 1023px;Теперь все scss переменные настроены под ваш проект. Для более точной настройки отображения компонентов можно использовать другие способы кастомизации дизайн системы.
Переопределение view части компонентов
Чтобы изменить внешний вид компонента нужно заменить его view часть, а именно *.scss и *.tsx файлы. Можно заменить как оба файла так и только один из них - в зависимости от того, какие изменения нужны в отображении компонента.
1. Переопределение *.scss файлов.
Все файлы стилей подключаются в файле src/style/index.scss.
Для переопределения стиля необходимо изменить import интересующего компонента, например:
// Было
@use '~@steroidsjs/bootstrap/form/Button/ButtonView';
// Стало
@use './custom-bootstrap/ButtonView';Таким образом, у нас в проекте получится следующая структура:
└── style
├── index.scss - главный файл стилей, в нем подключаем 'ui/index.scss'
└── variables.scss - scss переменные
└── custom-bootstrap
└── ButtonView.scss2. Переопределение *.tsx файлов.
Если изменение стилей недостаточно и необходимо изменить tsx код компонента, то в этом случае полностью копируется *.tsx файл компонента. Подключаются эти файлы в src/ui/bootstrap.ts. Итоговая структура:
└── ui
├── bootstrap.tsx - главный файл, в нем переопределяем импорт компонента (например ButtonView)
└── form - группа компонентов, в котором располагается изменяемый компонент
└── Button - название компонента
└── ButtonView.tsx - файл с переопределением компонентаСоздание npm-пакета для ui-kit на основе Steroids
Чтобы создать свой npm-пакет для ui-kit проекта нужно:
1. Cклонировать репозиторий Steroids
Все файлы для отображения компонентов хранятся в репозитории react-bootstrap.
2. Изменить файлы компонентов
В репозитории react-bootstrap такая архитектура:
└── src
└── content/ - папки с группами компонентов
└── form/
└── Button/ - папка компонента
├── ButtonView.tsx - файл с версткой компонента, в который можно внести изменения
└── ButtonView.scss - файл со стилями компонента, в который можно внести измененияИзменение view файлов компонентов никак не повлияет на логику их работы.
3. Выгрузить получившийся репозиторий как npm-пакет
Подробнее как это сделать можно прочитать в статье Creating Node.js modules.
Кастомизация дизайн макета в Figma
Подробная инструкция по кастомизации дизайн макета доступна по этой ссылке.