SvelteKit предоставляет возможность интеграции с различными UI библиотеками, что делает управление стилями гибким и удобным. Одним из ключевых инструментов для создания адаптивных и настраиваемых интерфейсов являются CSS переменные. Они позволяют централизованно управлять цветами, шрифтами, отступами и другими стилевыми параметрами компонентов.
CSS переменные объявляются с помощью синтаксиса
--имя-переменной и чаще всего размещаются в корневом
селекторе :root:
:root {
--primary-color: #4f46e5;
--secondary-color: #facc15;
--font-size-base: 16px;
--spacing-unit: 8px;
}
Использование переменных осуществляется через функцию
var():
button {
background-color: var(--primary-color);
color: white;
font-size: var(--font-size-base);
padding: calc(var(--spacing-unit) * 2);
}
В SvelteKit компонентах можно применять CSS переменные как внутри
<style> тегов компонента, так и глобально через
app.css или global.css.
Одно из преимуществ CSS переменных — возможность легко менять тему приложения без перезагрузки страницы. Для этого создаются отдельные блоки переменных для каждой темы:
:root {
--primary-color: #4f46e5;
--background-color: #ffffff;
--text-color: #111827;
}
[data-theme="dark"] {
--primary-color: #6366f1;
--background-color: #1f2937;
--text-color: #f9fafb;
}
В SvelteKit динамическая смена темы может управляться через состояние приложения:
<script>
import { writable } from 'svelte/store';
export const theme = writable('light');
function toggleTheme() {
theme.update(current => current === 'light' ? 'dark' : 'light');
}
</script>
<svelte:window bind:document.body.dataset-theme={$theme} />
<button on:click={toggleTheme}>
Переключить тему
</button>
Многие UI библиотеки для SvelteKit, такие как Svelte Material UI (SMUI) или Skeleton UI, используют CSS переменные для настройки компонентов:
padding, margin,
border-radius.Пример настройки темы для SMUI:
:root {
--smui-theme-primary: #4f46e5;
--smui-theme-secondary: #facc15;
--smui-theme-background: #ffffff;
--smui-theme-surface: #f3f4f6;
}
calc(), clamp() и другие позволяют создавать
адаптивные размеры:.card {
padding: calc(var(--spacing-unit) * 3);
font-size: clamp(14px, 1.2vw, 18px);
}
<style>
:global(:root) {
--primary-color: #4f46e5;
}
.special-button {
--primary-color: #f43f5e;
background-color: var(--primary-color);
}
</style>
data-attributes позволяет легко переключать темы
без JavaScript-фреймворков:<body data-theme="dark">
<button>Тема</button>
</body>
src/app.css – глобальные CSS
переменные и базовая типографика.src/lib/styles/themes.css – набор
переменных для светлой и темной темы.src/routes/+layout.svelte – логика
переключения темы.Такой подход обеспечивает гибкость, масштабируемость и чистоту кода при работе с UI библиотеками и компонентами в SvelteKit.