Scroll Area
Tăng cường chức năng cuộn gốc để tạo kiểu tùy chỉnh, đa trình duyệt.
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
Cài đặt
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-areaSử dụng
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">
Có một lần, một gã hề bắt đầu lẻn vào lâu đài vào giữa đêm khuya và để lại
những câu đùa khắp nơi: dưới gối của nhà vua, trong súp của ông, thậm chí cả
trong nhà vệ sinh hoàng gia. Nhà vua tức giận, nhưng ông dường như không thể
ngăn được gã hề. Và rồi, một ngày nọ, người dân trong vương quốc phát hiện ra
rằng những câu đùa mà gã hề để lại rất hài hước đến nỗi họ không thể nhịn cười.
Và một khi họ bắt đầu cười, họ không thể dừng lại.
</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">
Có một lần, một gã hề bắt đầu lẻn vào lâu đài vào giữa đêm khuya và để lại
những câu đùa khắp nơi: dưới gối của nhà vua, trong súp của ông, thậm chí cả
trong nhà vệ sinh hoàng gia. Nhà vua tức giận, nhưng ông dường như không thể
ngăn được gã hề. Và rồi, một ngày nọ, người dân trong vương quốc phát hiện ra
rằng những câu đùa mà gã hề để lại rất hài hước đến nỗi họ không thể nhịn cười.
Và một khi họ bắt đầu cười, họ không thể dừng lại.
</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">
Có một lần, một gã hề bắt đầu lẻn vào lâu đài vào giữa đêm khuya và để lại
những câu đùa khắp nơi: dưới gối của nhà vua, trong súp của ông, thậm chí cả
trong nhà vệ sinh hoàng gia. Nhà vua tức giận, nhưng ông dường như không thể
ngăn được gã hề. Và rồi, một ngày nọ, người dân trong vương quốc phát hiện ra
rằng những câu đùa mà gã hề để lại rất hài hước đến nỗi họ không thể nhịn cười.
Và một khi họ bắt đầu cười, họ không thể dừng lại.
</ui-scroll-area>
`
})
export class AppComponent {}API Reference
ScrollArea
| Prop | Type | Default | Mô tả |
|---|---|---|---|
class | string | - | Class CSS tùy chỉnh |
orientation | 'vertical' | 'horizontal' | 'vertical' | Hướng thanh cuộn |
Ví dụ
Cuộn ngang
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="`Ảnh ${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={`Ảnh ${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]="'Ảnh ' + i"
class="aspect-[3/4] h-fit w-fit object-cover"
/>
</div>
</div>
}
</div>
</ui-scroll-area>Khả năng tiếp cận
Tuân thủ WAI-ARIA Scrollbar Pattern.
- Cung cấp thanh cuộn tùy chỉnh có thể truy cập bằng bàn phím
- Duy trì quản lý focus đúng cách
- Hỗ trợ cả cuộn dọc và ngang
- Tương thích với screen readers
Khả năng truy cập
- Điều hướng bàn phím: [TODO]
- Đọc màn hình: [TODO]
- Quản lý focus: [TODO]
- Tuân thủ WCAG: Tuân thủ WCAG 2.1 cấp độ AA
Tác giả
Bùi Trọng Hiếu (kevinbui)
- GitHub: @buikevin
- Email: kevinbui210191@gmail.com
Giấy phép
MIT © 2025 Bùi Trọng Hiếu (kevinbui)
