CSS Custom Properties (кастомные свойства CSS, переменные) представляют собой мощный инструмент для создания гибких и повторно используемых стилей в компонентах Polymer. Они позволяют определять значения CSS один раз и использовать их в разных частях компонента, а также изменять их при переопределении, сохраняя при этом инкапсуляцию стилей.
Кастомные свойства создаются с помощью синтаксиса
--имя-переменной. Пример:
:host {
--primary-color: #2196f3;
--secondary-color: #f44336;
}
Эти свойства можно использовать внутри компонента через функцию
var():
button {
background-color: var(--primary-color);
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
}
Ключевые моменты:
:host — селектор, применяемый к корневому элементу
веб-компонента, позволяет определять переменные, доступные внутри
компонента.var(--имя-переменной, значение_по_умолчанию) — можно
указать значение по умолчанию, которое будет использоваться, если
переменная не определена.Одно из главных преимуществ Polymer — возможность динамически изменять стили компонентов через переопределение кастомных свойств в родительских элементах.
<style is="custom-style">
my-button {
--primary-color: #4caf50;
}
</style>
<my-button></my-button>
В этом примере компонент my-button использует значение
--primary-color, заданное внешним стилем. Это позволяет
создавать тему для целого приложения, не вмешиваясь в внутренние стили
компонента.
Кастомные свойства CSS наследуются от родительских элементов, что делает их удобными для создания глобальных настроек темы. Например:
:root {
--font-size: 16px;
--font-color: #333;
}
my-card {
font-size: var(--font-size);
color: var(--font-color);
}
Если внутри конкретного блока требуется изменить шрифт, можно переопределить переменные локально:
section.special-card {
--font-size: 20px;
}
Использование fallback-значений предотвращает ошибки, если переменная не определена:
p {
color: var(--text-color, black);
font-size: var(--text-size, 14px);
}
Если --text-color или --text-size не
заданы, применяются значения по умолчанию.
Polymer позволяет работать с кастомными свойствами динамически через
JS. Для установки значения переменной на уровне компонента используется
метод updateStyles:
this.updateStyles({
'--primary-color': '#ff9800'
});
Для глобальных изменений можно манипулировать стилями через document-level custom style:
document.documentElement.style.setProperty('--primary-color', '#673ab7');
Polymer поддерживает использование CSS mixin, что позволяет объединять несколько свойств в один блок:
:host {
--button-style: {
padding: 10px 20px;
border-radius: 5px;
font-weight: bold;
};
}
button {
@apply --button-style;
background-color: var(--primary-color);
}
Особенности:
@apply используется для применения набора свойств,
определенного через mixin.:host для компонентов и
в :root для глобальных тем.CSS Custom Properties в Polymer обеспечивают мощную систему управления стилями, позволяя создавать динамичные, настраиваемые и легко поддерживаемые веб-компоненты, минимизируя дублирование кода и обеспечивая гибкость в изменении визуальной темы.