Design tokens — это абстракция, которая позволяет централизовать и управлять стилями интерфейса, такими как цвета, размеры, шрифты, отступы и прочее. В контексте Stencil фреймворка, использование design tokens помогает создавать компоненты, которые можно легко адаптировать к различным темам и стилям.
Design tokens представляют собой значения, которые задаются в виде ключ-значение и могут быть использованы для генерации стилей в рамках различных UI-решений. Эти токены включают:
Они могут быть записаны в различных форматах, таких как JSON, YAML или даже SCSS переменные. Основное преимущество в том, что design tokens позволяют не только унифицировать стили, но и сделать их легко изменяемыми и масштабируемыми.
Для интеграции design tokens в Stencil необходимо понимать, как эти токены могут быть использованы в процессе разработки веб-компонентов. Рассмотрим несколько примеров.
Первым шагом в настройке design tokens является создание файла,
который будет хранить все необходимые значения. Например, можно создать
файл design-tokens.json:
{
"colors": {
"primary": "#6200EE",
"secondary": "#03DAC6",
"background": "#F5F5F5",
"text": "#212121"
},
"typography": {
"font-size": {
"small": "12px",
"medium": "16px",
"large": "20px"
},
"font-family": "Arial, sans-serif"
},
"spacing": {
"small": "8px",
"medium": "16px",
"large": "32px"
}
}
В данном примере определены основные токены для цветов, типографики и отступов, которые будут использоваться по всему проекту.
После того как файл с design tokens готов, необходимо внедрить его в компоненты Stencil. Это можно сделать через импорт JSON-файла или путем использования SCSS переменных, если проект настроен на использование SCSS.
Если использовать JSON-файл, его можно импортировать прямо в компонент:
import { Component, h } from '@stencil/core';
import tokens from './design-tokens.json';
@Component({
tag: 'my-button',
styleUrl: 'my-button.css',
shadow: true
})
export class MyButton {
render() {
return (
<button
style={{
backgroundColor: tokens.colors.primary,
color: tokens.colors.text,
padding: tokens.spacing.medium,
fontSize: tokens.typography.font-size.medium,
fontFamily: tokens.typography.font-family
}}
>
Click me
</button>
);
}
}
В этом примере компонента my-button использует значения
из файла design-tokens.json для задания цвета фона, текста,
отступов и шрифта.
Если проект настроен на использование SCSS, можно создать отдельные
SCSS файлы для design tokens и затем импортировать их в стилевые файлы
компонентов. Например, можно создать файл _tokens.scss:
$primary-color: #6200EE;
$secondary-color: #03DAC6;
$background-color: #F5F5F5;
$text-color: #212121;
$small-font-size: 12px;
$medium-font-size: 16px;
$large-font-size: 20px;
$small-spacing: 8px;
$medium-spacing: 16px;
$large-spacing: 32px;
Затем этот файл можно импортировать в стилевой файл компонента:
@import 'design-tokens';
button {
background-color: $primary-color;
color: $text-color;
padding: $medium-spacing;
font-size: $medium-font-size;
font-family: 'Arial', sans-serif;
}
Такой подход позволяет централизованно управлять стилями и поддерживать единообразие по всему проекту.
color1 и
color2, лучше использовать более осмысленные имена, такие
как primary и secondary.Design tokens играют ключевую роль в реализации динамических тем. С помощью этих токенов можно легко переключать стили в зависимости от предпочтений пользователя, например, для темной или светлой темы. Для реализации динамических тем можно использовать JavaScript или CSS custom properties (CSS переменные).
Пример использования CSS переменных для динамических тем:
:root {
--primary-color: #6200EE;
--secondary-color: #03DAC6;
--background-color: #F5F5F5;
--text-color: #212121;
}
[data-theme="dark"] {
--primary-color: #BB86FC;
--secondary-color: #03DAC6;
--background-color: #121212;
--text-color: #E1E1E1;
}
Переключение темы может быть выполнено с помощью Jav * aScript:
document.documentElement.setAttribute('data-theme', 'dark');
Такая гибкость позволяет проектировать интерфейсы, которые легко адаптируются под различные предпочтения пользователей, улучшая UX.
Внедрение и использование design tokens в Stencil позволяет создать удобный, масштабируемый и легко адаптируемый интерфейс. Этот подход не только улучшает поддержку кода, но и дает возможность гибко управлять стилями, что особенно важно при разработке сложных веб-приложений с множеством компонентов.