Компоненты макета в SvelteKit играют ключевую роль в
организации структуры приложения. Они позволяют централизованно
управлять общими элементами интерфейса: шапкой, боковой панелью, футером
и навигацией. В SvelteKit макеты реализуются через файлы
+layout.svelte и их иерархию, что позволяет строить гибкие
и переиспользуемые структуры страниц.
SvelteKit поддерживает иерархические макеты, где
каждый уровень может содержать собственные компоненты интерфейса. Файл
+layout.svelte, размещённый в корневой папке
src/routes, действует как глобальный макет, а макеты внутри
подкаталогов наследуют его и дополняют собственными элементами.
Пример структуры проекта:
src/routes/
├─ +layout.svelte // Глобальный макет
├─ dashboard/
│ ├─ +layout.svelte // Макет для раздела dashboard
│ └─ index.svelte
└─ profile/
└─ +layout.svelte // Макет для профиля
В данном примере макет dashboard/+layout.svelte может
содержать боковое меню, а глобальный макет определяет шапку и футер. При
этом компоненты из глобального макета остаются доступными во всех
вложенных макетах.
load и slotКомпоненты макета поддерживают слоты, что позволяет вставлять содержимое дочерних страниц. Основной синтаксис:
<header>Заголовок</header>
<slot /> <!-- Вставка контента страниц -->
<footer>Футер</footer>
Слот автоматически подставляет контент дочернего компонента, а данные
можно передавать через функцию load в
+layout.js или +layout.ts:
export async function load({ fetch, params }) {
const res = await fetch('/api/user');
const user = await res.json();
return { props: { user } };
}
В +layout.svelte данные доступны через
export let user;, что позволяет интегрировать динамический
контент в шапку или боковую панель макета.
SvelteKit легко интегрируется с популярными UI-библиотеками, такими как:
Пример использования Skeleton UI в макете:
<script>
import { Container, Header, Footer, Sidebar } from 'skeleton-ui';
</script>
<Container>
<Header title="Приложение SvelteKit"/>
<Sidebar>
<ul>
<li><a href="/dashboard">Dashboard</a></li>
<li><a href="/profile">Profile</a></li>
</ul>
</Sidebar>
<main>
<slot />
</main>
<Footer>© 2026 Компания</Footer>
</Container>
Такой подход позволяет разделить макет на логические блоки и поддерживать единый стиль на всем сайте.
Макеты могут быть динамическими, реагировать на состояние пользователя или маршрут. Это реализуется через условия в шаблоне и реактивные переменные:
<script>
export let user;
</script>
{#if user.loggedIn}
<Sidebar>Меню для авторизованных</Sidebar>
{:else}
<Sidebar>Гостевое меню</Sidebar>
{/if}
<slot />
Также можно менять внешний вид макета для конкретных разделов, используя вложенные макеты, что позволяет создавать разные шаблоны для публичной и приватной части приложения.
SvelteKit макеты тесно связаны с системой маршрутизации. Каждый
+layout.svelte управляет набором дочерних маршрутов.
Использование slot обеспечивает автоматическое внедрение
контента маршрута в макет, а дополнительные слоты можно создавать для
сайдбаров, панелей уведомлений и модальных окон:
<Header />
<Sidebar slot="aside" />
<main>
<slot />
</main>
<Footer slot="footer" />
Такой подход упрощает повторное использование компонентов макета и уменьшает дублирование кода.
Для стилизации компонентов макета используются:
.svelte файле.Пример с Tailwind CSS:
<header class="bg-blue-600 text-white p-4 flex justify-between items-center">
<h1>Приложение</h1>
<nav>
<a href="/dashboard" class="mx-2">Dashboard</a>
<a href="/profile" class="mx-2">Profile</a>
</nav>
</header>
<main class="p-6">
<slot />
</main>
Использование Tailwind вместе с макетами позволяет легко строить адаптивные интерфейсы без сложной кастомной CSS-структуры.
Эти паттерны упрощают поддержку больших проектов и делают структуру кода более предсказуемой и модульной.
Компоненты макета в SvelteKit являются основой для построения согласованного и гибкого интерфейса. Иерархическая структура макетов, слоты, интеграция с UI-библиотеками и динамическая настройка позволяют создавать мощные и поддерживаемые веб-приложения с минимальным дублированием кода и высокой масштабируемостью.