Темизация в FAST Element представляет собой механизм управления внешним видом компонентов через переменные CSS и стили, применяемые на уровне компонентов и глобально. Она обеспечивает гибкость интерфейса, позволяя создавать масштабируемые и настраиваемые темы для веб-приложений без необходимости переписывать логику компонентов.
FAST Element использует концепцию Design Tokens — централизованных переменных для цветов, размеров, отступов и других параметров стиля. Эти токены могут быть определены глобально или локально для конкретного компонента.
Пример объявления токена в FAST Element:
import { css } from "@microsoft/fast-element";
export const themeTokens = css`
:host {
--primary-color: #0078d4;
--secondary-color: #2b88d8;
--font-size-base: 16px;
}
`;
Ключевые моменты:
:host позволяет определять переменные непосредственно
на уровне компонента.var(--имя-переменной).Глобальная тема применяется ко всем компонентам,
если они используют одинаковые токены. Обычно объявляется на уровне
<body> или через отдельный <style>
в основном HTML или JS.
document.body.style.setProperty('--primary-color', '#ff5722');
Локальная тема задается внутри конкретного компонента или контейнера, переопределяя глобальные значения:
import { FASTElement, html, css } from "@microsoft/fast-element";
const localTheme = css`
:host {
--primary-color: #4caf50;
}
`;
class MyButton extends FASTElement {
static styles = localTheme;
render() {
return html`<button style="background-color: var(--primary-color)">Нажми меня</button>`;
}
}
Преимущество локальной темы — возможность адаптировать отдельные компоненты под разные контексты без изменения глобальных переменных.
FAST Element автоматически поддерживает наследование CSS-переменных через DOM. Если токен определен на родительском элементе, дочерние компоненты могут использовать его без повторного определения:
document.body.style.setProperty('--primary-color', '#6200ea');
const buttonTemplate = html`
<button style="color: var(--primary-color)">Кнопка</button>
`;
В этом примере все кнопки, использующие
var(--primary-color), автоматически получают цвет, заданный
на <body>.
FAST Element позволяет изменять тему во время выполнения приложения. Для этого используются методы установки CSS-переменных через JavaScript или реактивные свойства:
const toggleTheme = (darkMode) => {
const root = document.documentElement;
if(darkMode) {
root.style.setProperty('--background-color', '#121212');
root.style.setProperty('--text-color', '#ffffff');
} else {
root.style.setProperty('--background-color', '#ffffff');
root.style.setProperty('--text-color', '#000000');
}
};
Компоненты автоматически применяют новые значения без перерисовки или обновления шаблона.
FAST Design SystemFAST предоставляет встроенную систему темизации — Design
System, которая позволяет создавать и подключать темы
централизованно. Она использует FASTDesignSystemProvider и
готовые токены.
Пример подключения системы:
import { provideDesignSystem, FASTDesignSystemProvider } from "@microsoft/fast-foundation";
provideDesignSystem()
.register(FASTDesignSystemProvider);
const darkTheme = {
accentBaseColor: '#ff4081',
neutralForegroundRest: '#ffffff',
neutralFillRest: '#333333'
};
FASTDesignSystemProvider.prototype.designSystem = darkTheme;
Особенности:
Темизация в FAST Element построена на мощной комбинации CSS-переменных, реактивных свойств и централизованных токенов Design System. Она обеспечивает:
С помощью правильно структурированных токенов и системного подхода к темам можно создавать единообразные и адаптируемые интерфейсы для любых веб-приложений.