Get Started
 Migration
 Components
 - Accordion
 - Alert Dialog
 - Alert
 - Aspect Ratio
 - Avatar
 - Badge
 - Breadcrumb
 - Button
 - Calendar
 - Card
 - Carousel
 - Chart
 - Checkbox
 - Collapsible
 - Combobox
 - Command
 - Context Menu
 - Data Table
 - Date Picker
 - Dialog
 - Drawer
 - Dropdown Menu
 - Formsnap
 - Hover Card
 - Input OTP
 - Input
 - Label
 - Menubar
 - Navigation Menu
 - Pagination
 - Popover
 - Progress
 - Radio Group
 - Range Calendar
 - Resizable
 - Scroll Area
 - Select
 - Separator
 - Sheet
 - Sidebar
 - Skeleton
 - Slider
 - Sonner
 - Switch
 - Table
 - Tabs
 - Textarea
 - Toggle Group
 - Toggle
 - Tooltip
 - Typography
 
Installation
 Special sponsor
 We're looking for one partner to be featured here.
 Support the project and reach thousands of developers.
 Reach outTags
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
 <script lang="ts">
  import { ScrollArea } from "$lib/components/ui/scroll-area/index.js";
  import { Separator } from "$lib/components/ui/separator/index.js";
 
  const tags = Array.from({ length: 50 }).map(
    (_, i, a) => `v1.2.0-beta.${a.length - i}`
  );
</script>
 
<ScrollArea class="h-72 w-48 rounded-md border">
  <div class="p-4">
    <h4 class="mb-4 text-sm font-medium leading-none">Tags</h4>
    {#each tags as tag (tag)}
      <div class="text-sm">
        {tag}
      </div>
      <Separator class="my-2" />
    {/each}
  </div>
</ScrollArea>  Installation
pnpm dlx shadcn-svelte@latest add scroll-areanpx shadcn-svelte@latest add scroll-areabun x shadcn-svelte@latest add scroll-areanpx shadcn-svelte@latest add scroll-areaInstall bits-ui:
pnpm i bits-ui -Dnpm i bits-ui -Dbun install bits-ui -Dyarn install bits-ui -DCopy and paste the component source files linked at the top of this page into your project.
Usage
<script lang="ts">
  import { ScrollArea } from "$lib/components/ui/scroll-area/index.js";
</script>
 
<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>  Examples
Horizontal Scrolling
Set the orientation prop to "horizontal" to enable horizontal scrolling.
<script lang="ts">
  import { ScrollArea } from "$lib/components/ui/scroll-area/index.js";
 
  type Artwork = {
    artist: string;
    art: string;
  };
 
  const works: Artwork[] = [
    {
      artist: "Ornella Binni",
      art: "https://images.unsplash.com/photo-1465869185982-5a1a7522cbcb?auto=format&fit=crop&w=300&q=80"
    },
    {
      artist: "Tom Byrom",
      art: "https://images.unsplash.com/photo-1548516173-3cabfa4607e9?auto=format&fit=crop&w=300&q=80"
    },
    {
      artist: "Vladimir Malyavko",
      art: "https://images.unsplash.com/photo-1494337480532-3725c85fd2ab?auto=format&fit=crop&w=300&q=80"
    }
  ];
</script>
 
<ScrollArea
  class="w-96 whitespace-nowrap rounded-md border"
  orientation="horizontal"
>
  <div class="flex w-max space-x-4 p-4">
    {#each works as artwork (artwork.artist)}
      <figure class="shrink-0">
        <div class="overflow-hidden rounded-md">
          <img
            src={artwork.art}
            alt="Photo by {artwork.artist}"
            class="aspect-[3/4] h-fit w-fit object-cover"
            width={300}
            height={400}
          />
        </div>
        <figcaption class="text-muted-foreground pt-2 text-xs">
          Photo by
          <span class="text-foreground font-semibold">
            {artwork.artist}
          </span>
        </figcaption>
      </figure>
    {/each}
  </div>
</ScrollArea>  Horizontal and Vertical Scrolling
Set the orientation prop to "both" to enable both horizontal and vertical scrolling.
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.
<script lang="ts">
  import { ScrollArea } from "$lib/components/ui/scroll-area/index.js";
</script>
 
<ScrollArea
  class="h-[200px] w-[350px] rounded-md border p-4"
  orientation="both"
>
  <div class="w-[400px]">
    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.
  </div>
</ScrollArea>