FAST Element — это современная библиотека для создания веб-компонентов на JavaScript, обеспечивающая гибкую систему стилей и мощные возможности для адаптивного оформления. Основное отличие FAST Element заключается в том, что стили компонентов не зависят напрямую от глобальных CSS, а определяются внутри компонентов, что позволяет создавать полностью изолированные и масштабируемые UI-элементы.
Стили в FAST Element задаются с помощью шаблонных литералов CSS и
функции css из пакета @microsoft/fast-element.
Основная структура подключения стилей выглядит так:
import { FASTElement, html, css } from "@microsoft/fast-element";
const template = html<MyComponent>`
<div class="container">
<p>${x => x.text}</p>
</div>
`;
const styles = css`
.container {
padding: 16px;
background-color: lightgray;
}
p {
font-size: 16px;
color: #333;
}
`;
export class MyComponent extends FASTElement {}
Ключевое отличие от обычного CSS в том, что стили компонуются внутри компонента, создавая локальный scope и предотвращая конфликты с внешними стилями.
FAST Element поддерживает использование CSS-переменных для гибкой кастомизации. Это особенно важно для адаптивных стилей, так как позволяет изменять оформление компонентов динамически через атрибуты или внешние темы.
:host {
--primary-color: #0078d4;
--font-size: 16px;
}
.container {
color: var(--primary-color);
font-size: var(--font-size);
}
Использование :host позволяет задавать базовые значения
переменных для самого компонента, которые могут быть переопределены
снаружи.
FAST Element полностью поддерживает медиа-запросы для реализации адаптивного дизайна. Медиа-запросы можно вставлять прямо в стили компонента:
.container {
padding: 16px;
background-color: lightgray;
}
@media (max-width: 600px) {
.container {
padding: 8px;
background-color: #f0f0f0;
}
p {
font-size: 14px;
}
}
Такой подход гарантирует, что компонент будет корректно адаптироваться под разные размеры экрана без вмешательства внешнего CSS.
FAST Element позволяет привязывать стили к свойствам компонента с
помощью функции css и реактивных данных:
import { FASTElement, html, css, observable } from "@microsoft/fast-element";
const template = html<MyComponent>`
<div class="container" style="background-color: ${x => x.bgColor}">
<p>${x => x.text}</p>
</div>
`;
export class MyComponent extends FASTElement {
@observable bgColor = "lightgray";
@observable text = "Пример текста";
}
Такой способ позволяет менять стили на лету без пересоздания компонента и без необходимости напрямую работать с DOM.
Слоты в FAST Element помогают создавать компоненты, которые могут изменять контент и оформление в зависимости от контекста. Стили слотов также можно адаптировать под разные размеры или состояния компонента:
const template = html<MyComponent>`
<div class="container">
<slot name="header"></slot>
<slot name="content"></slot>
</div>
`;
const styles = css`
.container {
display: flex;
flex-direction: column;
padding: 16px;
}
::slotted([slot="header"]) {
font-weight: bold;
font-size: 18px;
}
@media (max-width: 600px) {
::slotted([slot="header"]) {
font-size: 16px;
}
}
`;
Использование ::slotted позволяет управлять стилями
элементов, переданных через слот, сохраняя полную адаптивность
компонента.
FAST Element поддерживает внешние системы тем, используя CSS-переменные и реактивные свойства. Это позволяет строить масштабируемые дизайн-системы, где компоненты автоматически подстраиваются под активную тему:
:host([theme="dark"]) {
--background-color: #333;
--text-color: #f0f0f0;
}
:host([theme="light"]) {
--background-color: #fff;
--text-color: #222;
}
.container {
background-color: var(--background-color);
color: var(--text-color);
}
Смена темы может происходить динамически, и компонент будет автоматически обновлять стили без перезагрузки.
Адаптивные стили в FAST Element создают среду, где компонент полностью управляет своим визуальным поведением, оставаясь при этом легко настраиваемым и интегрируемым в сложные интерфейсы.