ข้ามไปเนื้อหา
WhereUI

ค้นหาในเอกสาร

ค้นหาชื่อ component หรือหน้าเอกสาร

Scroll Area

จาก shadcn

พื้นที่เลื่อนดูเนื้อหาที่มีแถบเลื่อนของตัวเอง ควบคุมสไตล์แถบได้สม่ำเสมอทั้งแนวตั้งและแนวนอน

ติดตั้ง

Terminal
pnpm dlx shadcn@latest add @whereui/scroll-area

ต้องผูก registry และติดตั้ง @whereui/theme นำหน้าเสมอเมื่อติดตั้งครั้งแรก

การใช้งาน

import { ScrollArea } from "@/components/ui/scroll-area"<ScrollArea className="h-40 w-full max-w-md rounded-xl border p-3">  {/* รายการยาว ๆ */}</ScrollArea>

ตัวอย่างเพิ่มเติม

แถบเลื่อนแนวนอน

ข้อควรรู้

  • กำหนดความสูงคงที่ (เช่น h-40) ให้ ScrollArea ไม่งั้นเนื้อหาจะขยายเต็มความยาว
  • แถบแนวนอนให้เพิ่ม ScrollBar orientation="horizontal" ไว้ท้ายเนื้อหา

ซอร์สโค้ด

components/ui/scroll-area.tsx
"use client"import * as React from "react"import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area"import { cn } from "cn"function ScrollArea({  className,  children,  ...props}: ScrollAreaPrimitive.Root.Props) {  return (    <ScrollAreaPrimitive.Root      data-slot="scroll-area"      className={cn("relative", className)}      {...props}    >      <ScrollAreaPrimitive.Viewport        data-slot="scroll-area-viewport"        className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1"      >        {children}      </ScrollAreaPrimitive.Viewport>      <ScrollBar />      <ScrollAreaPrimitive.Corner />    </ScrollAreaPrimitive.Root>  )}function ScrollBar({  className,  orientation = "vertical",  ...props}: ScrollAreaPrimitive.Scrollbar.Props) {  return (    <ScrollAreaPrimitive.Scrollbar      data-slot="scroll-area-scrollbar"      data-orientation={orientation}      orientation={orientation}      className={cn(        "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",        className      )}      {...props}    >      <ScrollAreaPrimitive.Thumb        data-slot="scroll-area-thumb"        className="relative flex-1 rounded-full bg-border"      />    </ScrollAreaPrimitive.Scrollbar>  )}export { ScrollArea, ScrollBar }