Scroll area
Minimal bir kaydırma çubuğuyla yerel kaydırma, yalnızca görülecek daha fazla şey olan yerde solan kenarlar ve son öğeyi ikiye bölen isteğe bağlı bir göz atma payı.
pnpm dlx shadcn@latest add https://hextaui.com/r/scroll-area.jsonBileşeni, HextaUI tema token'larını ve bileşenin bağımlı olduğu tüm HextaUI bileşenlerini ekler.
Henüz eklemediyseniz tema token'larını global CSS'inize ekleyin.
Bağımlılıkları yükleyin.
pnpm add @base-ui/react class-variance-authority cnAşağıdaki kodu kopyalayıp projenize yapıştırın.
components/ui/scroll-area.tsx İçe aktarma yollarını proje yapılandırmanıza uyacak şekilde güncelleyin.
Kaydırma alanına sabit bir yükseklik veya genişlik verin. Ötesindeki içerik yerel kaydırma davranışıyla kayar ve hover ya da kaydırma sırasında ince bir kaydırma çubuğu belirir.
Peek
İki listenin yüksekliği aynıdır. Sağdaki peek ile kutu kendini kırpar; böylece son görünen öğe yarıda kesilir ve kimse denemeden önce kaydırılacak daha fazlası olduğunu gösterir. Kutuyu yüksekliğinin yarısının altına asla kırpmaz.
Metin
Kenarlar yalnızca kaydırılacak daha fazla içerik olan yerde solar. Üstteyken yalnızca alt solar ve bir kenardan uzaklaştıkça solma büyür.
Alttan başla
viewportRef size kayan öğeyi verir. Bir sohbeti en son mesajda başlatmak için onun scrollTop değerini ayarlayın; böylece yalnızca üst kenar solar.
Yatay
scrollbars="horizontal" ayarlayın ve içeriğin kutunun ötesine büyüyebilmesi için ona w-max verin.
Her iki eksen
scrollbars="both" her iki kaydırma çubuğunu ve kesiştikleri bir köşeyi gösterir ve dört kenarı da soldurur.
Dinamik içerik
Öğeler eklendikçe veya kaldırıldıkça peek ve solmalar güncellenir. Kaydırılacak kadar öğe yoksa kutu yüksekliğini korur ve hiçbir şey solmaz.
Renkli bir yüzeyde
Solma, bindirme rengi değil içerik üzerinde bir maskedir; bu yüzden her arka planda çalışır.
Sheet içinde
Bir flex sütunu içinde onu min-h-0 flex-1 olan bir öğeyle sarın ve kalan alanı doldurması için kaydırma alanına h-full verin.
Solmasız
Kenar solmalarını fade={false} ile kapatın.
Sağdan sola
İçerik sağ kenardan başlar; kaydırma çubuğu ve solmalar okuma yönünü izler, yön sayfadan alınır.
Viewport sekme sırasına yalnızca kaydıracak bir şeyi olduğunda girer. Odaklandığında tarayıcının yerel tuşlarıyla kayar.
| Tuş | Action |
|---|---|
| Tab | İçeriği taştığında viewport'a odaklanır. |
| ↑↓ | Dikey kaydırır. |
| ←→ | Yatay kaydırır. |
| Page UpPage DownSpace | Bir sayfa kadar kaydırır. |
| HomeEnd | Başa veya sona atlar. |
- Amacı çevresindeki içerikten anlaşılmıyorsa, sohbet örneğindeki “Messages” etiketi gibi, kaydırma alanına bir
aria-labelverin. - Odak halkası kaydırma alanının kendisine çizilir, böylece solmuş kenarların üzerinde görünür kalır.
Base UI scroll area üzerine kuruludur. ScrollArea kök, viewport, içerik ve kaydırma çubuklarını birlikte işler.
| Prop | Tür | Varsayılan |
|---|---|---|
scrollbars | "vertical" | "horizontal" | "both" | "vertical" |
fadeDaha fazla içeriği olan kenarları soldurur. | boolean | true |
peekSon görünen öğe yarıda kesilsin diye yüksekliği kırpar. Hangi öğelerin sayılacağını seçmek için öğeleri data-scroll-area-item ile işaretleyin. | boolean | false |
viewportRefKayan öğe. | Ref<HTMLDivElement> | – |
overflowEdgeThresholdBir kenarın taşıyor sayılması için kaydırılacak piksel. | number | { xStart, xEnd, yStart, yEnd } | 0 |
className | string | (state) => string | – |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="scroll-area" | Kök. |
data-slot="scroll-area-viewport" | Kayan öğe. |
data-slot="scroll-area-content" | İçeriğinizi viewport içine sarar. |
data-peek | peek açıkken bulunur. |
data-peeking | peek yüksekliği kırparken bulunur. |
data-scrolling | Kullanıcı kaydırırken bulunur. |
data-has-overflow-x | İçerik viewport'tan genişse bulunur. |
data-has-overflow-y | İçerik viewport'tan uzunsa bulunur. |
data-overflow-y-start | Üstte daha fazla içerik olduğunda bulunur. Diğer kenarlar için eşleşen -y-end, -x-start ve -x-end nitelikleri vardır. |
--scroll-area-fade | Kenar solmasının boyutu. Varsayılan 2.5rem. |
--scroll-area-overflow-y-start | Üst kenardan piksel cinsinden uzaklık. Eşleşen -y-end, -x-start ve -x-end değişkenleri de vardır. |
ScrollArea tarafından sizin için işlenir. Yalnızca Base UI parçalarını kendiniz birleştiriyorsanız dışa aktarın.
| Prop | Tür | Varsayılan |
|---|---|---|
orientation | "vertical" | "horizontal" | "vertical" |
render | ReactElement | (props, state) => ReactElement | <div> |
| Öznitelik | Açıklama |
|---|---|
data-slot="scroll-area-scrollbar" | Kaydırma çubuğu izi. |
data-slot="scroll-area-thumb" | Sürüklenebilir başparmak. |
data-orientation | vertical veya horizontal. |
data-hovering | İmleç alanın üzerindeyken bulunur. |
data-scrolling | Kullanıcı kaydırırken bulunur. |
--scroll-area-thumb-height | Başparmağın yüksekliği. |
--scroll-area-thumb-width | Başparmağın genişliği. |
- AccordionHer biri bir panel gösteren yığılmış başlıklar; yarıda tersine çevrilebilen yükseklik hareketi ve kapalıyken de aranabilir kalan paneller.
- Aspect ratioMedya yüklenmeden önce şeklini koruyan, yüklenirken parıldayan, medyayı yumuşakça görünür kılan ve hata durumunda yedeğe düşen bir kutu.
- CarouselDokunmatik ekranda ivmeli, fare sürüklemeli, ok tuşlu, noktalı, küçük resimli yerel scroll-snap slaytları ve gerektiğinde duran bir otomatik oynatma.
- CollapsibleYüksekliği hareketle gösterilip gizlenen, yarıda tersine çevrilebilen ve yerleşimi zıplatmayan bir panel.
- ResizableBirbirinden ayırabileceğiniz paneller; hover'da uyanan sakin bir ayırıcı, sıfırlama ya da daraltmada kayarak değişen boyutlar ve kalıcı düzenler sunar.
- Separatorİçeriği yatay ya da dikey olarak ayıran ince bir çizgi; isteğe bağlı etiket ve yalnızca görsel çizgiler için dekoratif bir mod içerir.