Scroll Area
Augments native scroll functionality for custom, cross-browser styling.
Tags
v1.2.0-beta.50
v1.2.0-beta.49
v1.2.0-beta.48
v1.2.0-beta.47
v1.2.0-beta.46
v1.2.0-beta.45
v1.2.0-beta.44
v1.2.0-beta.43
v1.2.0-beta.42
v1.2.0-beta.41
v1.2.0-beta.40
v1.2.0-beta.39
v1.2.0-beta.38
v1.2.0-beta.37
v1.2.0-beta.36
v1.2.0-beta.35
v1.2.0-beta.34
v1.2.0-beta.33
v1.2.0-beta.32
v1.2.0-beta.31
v1.2.0-beta.30
v1.2.0-beta.29
v1.2.0-beta.28
v1.2.0-beta.27
v1.2.0-beta.26
v1.2.0-beta.25
v1.2.0-beta.24
v1.2.0-beta.23
v1.2.0-beta.22
v1.2.0-beta.21
v1.2.0-beta.20
v1.2.0-beta.19
v1.2.0-beta.18
v1.2.0-beta.17
v1.2.0-beta.16
v1.2.0-beta.15
v1.2.0-beta.14
v1.2.0-beta.13
v1.2.0-beta.12
v1.2.0-beta.11
v1.2.0-beta.10
v1.2.0-beta.9
v1.2.0-beta.8
v1.2.0-beta.7
v1.2.0-beta.6
v1.2.0-beta.5
v1.2.0-beta.4
v1.2.0-beta.3
v1.2.0-beta.2
v1.2.0-beta.1
Installation
bash
npx @galaxy-stack/nebula-cli@latest add scroll-areabash
pnpm dlx @galaxy-stack/nebula-cli@latest add scroll-areabash
yarn dlx @galaxy-stack/nebula-cli@latest add scroll-areabash
bunx @galaxy-stack/nebula-cli@latest add scroll-areabash
# If you have installed galaxy-design globally
galaxy-design add scroll-areaUsage
vue
<script setup lang="ts">
import { ScrollArea } from '@/components/ui/scroll-area'
</script>
<template>
<ScrollArea class="h-[200px] w-[350px] rounded-md border p-4">
Jokester began sneaking into the castle in the middle of the night and leaving
jokes all over the place: under the king's pillow, in his soup, even in the
royal toilet. The king was furious, but he couldn't seem to stop Jokester. And
then, one day, the people of the kingdom discovered that the jokes left by
Jokester were so funny that they couldn't help but laugh. And once they
started laughing, they couldn't stop.
</ScrollArea>
</template>tsx
import { ScrollArea } from "@/components/ui/scroll-area"
export default function App() {
return (
<ScrollArea className="h-[200px] w-[350px] rounded-md border p-4">
Jokester began sneaking into the castle in the middle of the night and leaving
jokes all over the place: under the king's pillow, in his soup, even in the
royal toilet. The king was furious, but he couldn't seem to stop Jokester. And
then, one day, the people of the kingdom discovered that the jokes left by
Jokester were so funny that they couldn't help but laugh. And once they
started laughing, they couldn't stop.
</ScrollArea>
)
}typescript
import { Component } from '@angular/core';
import { ScrollAreaComponent } from '@/components/ui/scroll-area';
@Component({
selector: 'app-root',
standalone: true,
imports: [ScrollAreaComponent],
template: `
<ui-scroll-area class="h-[200px] w-[350px] rounded-md border p-4">
Jokester began sneaking into the castle in the middle of the night and leaving
jokes all over the place: under the king's pillow, in his soup, even in the
royal toilet. The king was furious, but he couldn't seem to stop Jokester. And
then, one day, the people of the kingdom discovered that the jokes left by
Jokester were so funny that they couldn't help but laugh. And once they
started laughing, they couldn't stop.
</ui-scroll-area>
`
})
export class AppComponent {}API Reference
ScrollArea
| Prop | Type | Default | Description |
|---|---|---|---|
class | string | - | Custom CSS classes |
orientation | 'vertical' | 'horizontal' | 'vertical' | Scrollbar orientation |
Examples
Horizontal Scrolling
vue
<ScrollArea orientation="horizontal" class="w-96 whitespace-nowrap rounded-md border">
<div class="flex w-max space-x-4 p-4">
<div v-for="i in 10" :key="i" class="shrink-0">
<div class="overflow-hidden rounded-md">
<img
:src="`https://images.unsplash.com/photo-${i}?w=250&h=330`"
:alt="`Photo ${i}`"
class="aspect-[3/4] h-fit w-fit object-cover"
/>
</div>
</div>
</div>
</ScrollArea>tsx
<ScrollArea orientation="horizontal" className="w-96 whitespace-nowrap rounded-md border">
<div className="flex w-max space-x-4 p-4">
{Array.from({ length: 10 }).map((_, i) => (
<div key={i} className="shrink-0">
<div className="overflow-hidden rounded-md">
<img
src={`https://images.unsplash.com/photo-${i}?w=250&h=330`}
alt={`Photo ${i}`}
className="aspect-[3/4] h-fit w-fit object-cover"
/>
</div>
</div>
))}
</div>
</ScrollArea>typescript
<ui-scroll-area orientation="horizontal" class="w-96 whitespace-nowrap rounded-md border">
<div class="flex w-max space-x-4 p-4">
@for (i of [1,2,3,4,5,6,7,8,9,10]; track i) {
<div class="shrink-0">
<div class="overflow-hidden rounded-md">
<img
[src]="'https://images.unsplash.com/photo-' + i + '?w=250&h=330'"
[alt]="'Photo ' + i"
class="aspect-[3/4] h-fit w-fit object-cover"
/>
</div>
</div>
}
</div>
</ui-scroll-area>Accessibility
Adheres to the WAI-ARIA Scrollbar Pattern.
- Provides custom scrollbars that are keyboard accessible
- Maintains proper focus management
- Supports both vertical and horizontal scrolling
- Compatible with screen readers
Author
Bùi Trọng Hiếu (kevinbui)
- GitHub: @buikevin
- Email: kevinbui210191@gmail.com
License
MIT © 2025 Bùi Trọng Hiếu (kevinbui)
