В SvelteKit интеграция с CSS и CSS-фреймворками осуществляется через
файл src/app.css или любые другие глобальные CSS-файлы,
подключаемые через src/routes/+layout.svelte или
+layout.ts. Основная задача — корректное определение
области видимости стилей: глобальные стили подключаются один
раз, а компонентные — остаются изолированными благодаря
Svelte-подходу к CSS.
Пример подключения глобального CSS-фреймворка, например, Tailwind CSS:
// svelte.config.js
import preprocess from 'svelte-preprocess';
import adapter from '@sveltejs/adapter-auto';
export default {
preprocess: preprocess({
postcss: true
}),
kit: {
adapter: adapter(),
}
};
/* src/app.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
После этого Tailwind-утилиты доступны во всех компонентах. Важный
момент — конфигурация tailwind.config.cjs должна учитывать
путь к файлам Svelte, чтобы PurgeCSS удалял неиспользуемые классы.
SvelteKit по умолчанию поддерживает локальные стили,
которые применяются только к компоненту. Это достигается с помощью
<style> внутри .svelte файла:
<script>
let active = false;
</script>
<button class:active={active}>
Нажми меня
</button>
<style>
button {
background-color: lightgray;
border: none;
padding: 10px 20px;
cursor: pointer;
}
button.active {
background-color: steelblue;
color: white;
}
</style>
Ключевой особенностью является автоматическая генерация уникальных классов Svelte для каждого компонента. Это предотвращает конфликты стилей при масштабировании приложения.
CSS-модули позволяют импортировать CSS как объект, где ключи — это
имена классов, а значения — сгенерированные уникальные имена. В
SvelteKit это делается через svelte-preprocess:
// svelte.config.js
import preprocess from 'svelte-preprocess';
export default {
preprocess: preprocess({
postcss: true,
typescript: true
})
};
<script lang="ts">
import styles from './Button.module.css';
</script>
<button class={styles.primary}>
Кнопка
</button>
/* Button.module.css */
.primary {
background-color: teal;
color: white;
padding: 12px 24px;
border-radius: 4px;
}
Преимущество CSS-модулей в том, что они дают гарантированную
изоляцию стилей, но при этом позволяют легко использовать
глобальные переменные через :global().
SvelteKit поддерживает работу с различными UI-библиотеками, такими как Svelte Material UI, Flowbite-Svelte, Skeleton UI. Принцип интеграции схож: библиотека устанавливается через npm и подключается в компоненты. Пример для Skeleton UI:
npm install @skeletonlabs/skeleton
<script>
import { Button } from '@skeletonlabs/skeleton';
</script>
<Button color="primary" size="lg">
Отправить
</Button>
Skeleton автоматически импортирует стили, но при необходимости можно подключить кастомные темы через глобальный CSS-файл или SCSS-переменные.
SvelteKit поддерживает SCSS, Less и PostCSS через
svelte-preprocess. Пример настройки SCSS:
import preprocess from 'svelte-preprocess';
export default {
preprocess: preprocess({
scss: {
prependData: `@import 'src/styles/variables.scss';`
}
})
};
Теперь переменные и миксины доступны в каждом компоненте, что значительно ускоряет разработку масштабируемого UI.
/* variables.scss */
$primary-color: #4f46e5;
$secondary-color: #facc15;
$border-radius: 6px;
<style lang="scss">
.button {
background-color: $primary-color;
border-radius: $border-radius;
color: white;
padding: 12px 24px;
&:hover {
background-color: darken($primary-color, 10%);
}
}
</style>
Для динамической темы удобно использовать CSS-переменные в корневом элементе:
:root {
--color-primary: #4f46e5;
--color-secondary: #facc15;
}
.dark-mode {
--color-primary: #2563eb;
--color-secondary: #fbbf24;
}
Компоненты могут использовать переменные без изменения структуры:
<style>
.card {
background-color: var(--color-primary);
color: var(--color-secondary);
padding: 16px;
border-radius: 8px;
}
</style>
Переключение тем делается через добавление/удаление класса на
html или body.
Tailwind в SvelteKit можно комбинировать с компонентными библиотеками. Важно правильно настроить PurgeCSS, чтобы не удалялись динамически генерируемые классы:
// tailwind.config.cjs
module.exports = {
content: ['./src/**/*.{svelte,ts,js}'],
theme: {
extend: {},
},
plugins: [],
};
Для динамических классов часто используется синтаксис
[className] или class:active={condition},
чтобы Tailwind правильно распознавал используемые утилиты.
В результате комбинация глобальных стилей, локальных CSS, CSS-модулей и UI-библиотек позволяет создавать в SvelteKit масштабируемые и гибкие интерфейсы, легко поддерживать тему и интегрировать сторонние решения без конфликта стилей.