В библиотеке Slim.js управление стилями компонентов осуществляется напрямую через возможности самого компонента, что обеспечивает инкапсуляцию и локальность CSS. Каждый компонент может содержать собственные стили, которые не будут конфликтовать с глобальными стилями страницы.
style в
компонентеСамый простой способ добавить стили — использовать атрибут
style в шаблоне компонента:
Slim.tag('my-button', class extends Slim {
get template() {
return `
<button style="background-color: blue; color: white; padding: 10px 20px;">
Нажми меня
</button>
`;
}
});
Особенности подхода:
<style>Более гибкий и рекомендуемый способ — использование тега
<style> внутри шаблона. Он позволяет описывать
полноценные CSS-правила и поддерживает scope
компонентов.
Slim.tag('color-box', class extends Slim {
get template() {
return `
<style>
div {
width: 100px;
height: 100px;
background-color: red;
border: 2px solid black;
}
div:hover {
background-color: orange;
}
</style>
<div></div>
`;
}
});
Преимущества метода:
Slim.js позволяет изменять стили компонентов
динамически через JavaScript. Для этого можно
использовать метод this.shadowRoot или прямое изменение
style элемента.
Slim.tag('dynamic-box', class extends Slim {
get template() {
return `<div id="box">Смена цвета</div>`;
}
onBeforeCreated() {
this.colorIndex = 0;
this.colors = ['red', 'green', 'blue'];
}
onCreated() {
this.updateColor();
}
updateColor() {
const box = this.shadowRoot.getElementById('box');
box.style.backgroundColor = this.colors[this.colorIndex];
this.colorIndex = (this.colorIndex + 1) % this.colors.length;
setTimeout(() => this.updateColor(), 1000);
}
});
Особенности динамического подхода:
Для увеличения гибкости можно внедрять CSS-переменные, которые упрощают переиспользование цветов, шрифтов и размеров.
Slim.tag('variable-box', class extends Slim {
get template() {
return `
<style>
:host {
--box-color: teal;
--box-size: 120px;
}
div {
width: var(--box-size);
height: var(--box-size);
background-color: var(--box-color);
}
</style>
<div></div>
`;
}
});
Преимущества CSS-переменных:
Slim.js автоматически использует Shadow DOM, что гарантирует, что стили компонента не выйдут за его границы:
Slim.tag('shadow-card', class extends Slim {
get useShadow() { return true; }
get template() {
return `
<style>
.card {
padding: 20px;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
border-radius: 8px;
}
</style>
<div class="card">Контент карточки</div>
`;
}
});
Shadow DOM обеспечивает:
<style>
внутри шаблона.Эта стратегия позволяет создавать компоненты с полностью управляемым, локализованным и динамическим стилем без риска конфликтов с другими элементами страницы.