FAST Element — это современная библиотека для создания веб-компонентов на JavaScript с акцентом на модульность, производительность и гибкую работу с шаблонами и стилями. Одной из ключевых возможностей является изоляция стилей, которая позволяет гарантировать, что CSS-команды компонента не будут конфликтовать с внешними стилями страницы и не затронут другие элементы.
Основной механизм изоляции стилей в FAST Element — это использование Shadow DOM. Shadow DOM создаёт отдельное дерево DOM внутри элемента, полностью изолированное от внешнего документа. Важные особенности:
--var и :host доступны внутри компонента без
риска переопределения внешними стилями.Пример создания компонента с shadow DOM:
import { FASTElement, html, css } from "@microsoft/fast-element";
const template = html<MyComponent>`
<div class="container">
<p>Пример текста внутри компонента</p>
</div>
`;
const styles = css`
.container {
background-color: #f0f0f0;
padding: 16px;
border-radius: 8px;
}
p {
color: #333;
font-size: 16px;
}
`;
export class MyComponent extends FASTElement {
static template = template;
static styles = styles;
}
В этом примере стили применяются только к компоненту
MyComponent и не влияют на другие элементы на странице.
:host и управление внешним видом компонента:host позволяет управлять самим элементом как объектом
DOM изнутри shadow DOM:
:host {
display: block;
border: 1px solid #ccc;
padding: 8px;
}
:host полезен для:
:host(.active),
:host([disabled]).FAST Element поддерживает CSS Custom Properties для динамической настройки стилей без разрушения изоляции. Пример с реактивной переменной:
:host {
--primary-color: #0078d4;
}
.button {
background-color: var(--primary-color);
color: white;
padding: 8px 16px;
border-radius: 4px;
}
Эта переменная может быть переопределена на уровне конкретного экземпляра компонента:
<my-component style="--primary-color: #ff5733;"></my-component>
При этом остальные компоненты остаются с дефолтной палитрой, что сохраняет полную изоляцию стилей.
Иногда возникает необходимость частичного взаимодействия с внешними стилями. Для этого используются:
:host-context() — позволяет применять
стили внутри shadow DOM на основе внешнего окружения::host-context(.dark-theme) {
--primary-color: #222;
}
<slot name="header"></slot>
Слоты наследуют только те стили, которые применяются к их содержимому, не влияя на внутренние элементы компонента.
FAST Element позволяет создавать реактивные стили с использованием псевдоклассов и атрибутов, сохраняя изоляцию:
:host([active]) .container {
background-color: #e0ffe0;
}
.container {
transition: background-color 0.3s ease;
}
Присвоение атрибута active экземпляру компонента
мгновенно изменяет визуальное состояние без конфликта с внешним CSS.
Для сложных компонентов с множеством состояний и слоёв рекомендуется:
FASTElement.styles.Пример импорта нескольких файлов стилей:
import baseStyles from './base.css';
import themeStyles from './theme.css';
export class ComplexComponent extends FASTElement {
static template = template;
static styles = [baseStyles, themeStyles];
}
Каждый модуль сохраняет инкапсуляцию, а приоритет определяется порядком подключения.
:host и :host-context — для управления
элементом и взаимодействия с окружением.Эти возможности FAST Element создают чистую архитектуру компонентов, где стили полностью управляемы, безопасны и предсказуемы, что критично для масштабируемых фронтенд-приложений.