Компонент ScrollArea предназначен для создания
настраиваемых областей с прокруткой, позволяя контролировать поведение
скроллинга и внешний вид полос прокрутки. В отличие от стандартного
<div> с overflow: auto, ScrollArea
обеспечивает кроссбраузерную консистентность, плавные
анимации и легкую интеграцию с другими UI-компонентами.
Базовая структура компонента включает следующие элементы:
<ScrollArea class="h-64 w-96">
<ScrollAreaViewport>
<!-- Контент, который нужно прокручивать -->
</ScrollAreaViewport>
<ScrollAreaScrollbar orientation="vertical">
<ScrollAreaThumb />
</ScrollAreaScrollbar>
<ScrollAreaScrollbar orientation="horizontal">
<ScrollAreaThumb />
</ScrollAreaScrollbar>
</ScrollArea>
Компонент поддерживает одновременное использование
вертикальной и горизонтальной прокрутки. Параметр
orientation определяет направление полосы:
<ScrollAreaScrollbar orientation="vertical">
<ScrollAreaThumb />
</ScrollAreaScrollbar>
<ScrollAreaScrollbar orientation="horizontal">
<ScrollAreaThumb />
</ScrollAreaScrollbar>
Если контент превышает размер видимой области только по одной оси, соответствующая полоса прокрутки отображается автоматически, а другая скрыта.
Полосы прокрутки можно стилизовать с помощью классов CSS или CSS-переменных:
.scrollbar {
background-color: rgba(0, 0, 0, 0.1);
border-radius: 4px;
}
.thumb {
background-color: rgba(0, 0, 0, 0.5);
border-radius: 4px;
}
Применение классов в компоненте:
<ScrollAreaScrollbar class="scrollbar" orientation="vertical">
<ScrollAreaThumb class="thumb" />
</ScrollAreaScrollbar>
width.height.%
или rem.ScrollArea поддерживает динамическую прокрутку и события:
on:scroll – срабатывает при изменении позиции
скролла.scrollTo(options) – программное перемещение к нужной
позиции:<script>
import { onMount } from 'svelte';
let viewport;
onMount(() => {
viewport.scrollTo({ top: 100, beh * avior: 'smooth' });
});
</script>
<ScrollArea bind:this={viewport}>
<ScrollAreaViewport>
<div style="height: 500px;">Контент</div>
</ScrollAreaViewport>
</ScrollArea>
scrollBy(x, y) – прокрутка относительно текущей
позиции.ScrollArea автоматически реагирует на изменения размеров контейнера и
контента. При динамическом добавлении элементов полоса прокрутки
обновляется без перезагрузки компонента. Использование
ResizeObserver внутри ScrollArea обеспечивает актуальность
видимой области.
ScrollArea легко интегрируется с списками, таблицами и модальными окнами:
will-change: transform для ползунка
улучшает рендеринг.ScrollArea в SvelteKit UI предоставляет мощный и гибкий инструмент управления прокруткой, позволяя строить сложные интерфейсы с высокой степенью кастомизации и отзывчивостью, при этом обеспечивая кроссбраузерную стабильность и оптимизированный рендеринг.