Skip to content
fandhe-frontendcore v0.4.3
GitHub

Scroll Area

fandhe-frontend-pre-styled-ui の scroll_area mod が提供するスタイル済み Scroll Area 部品です。

CSS overflow を主体としたスクロール領域を提供する部品です。headless 層は anatomy と tabindex="0" のみを提供し、::-webkit-scrollbar 系規則でカスタムスクロールバーの見た目を表現します。JS によるスクロール位置追従は対象外です。

thumb 色は custom property --fandhe-scroll-area-thumb-bg で一元化されており、root へ再定義するだけで見た目を調整できます(hover 時・キーボードフォーカス時は --fandhe-scroll-area-thumb-hover-bg へ自動的に強調されます)。transparent を指定すれば、既定は非表示で hover 時のみ出現する見た目も再現できます。

viewport へ data-orientation="horizontal" を付与すると直下の content が横並びになり(shadcn/ui ScrollBar orientation="horizontal" 相当、gap/padding は呼び出し側が content へ指定)、data-fade を付与すると端が mask-image でフェードします(shadcn/ui utils/scroll-fade 相当。animation-timeline: scroll() 対応ブラウザではスクロール量に応じてフェード端が動的に切り替わり、非対応ブラウザは両端固定フェードになります。data-orientation="horizontal" 併用時は横方向グラデーション、dir="rtl" では方向が反転します)。いずれも既定の見た目を変えない opt-in で、フェード幅は custom property(--fandhe-scroll-area-fade-size・--fandhe-scroll-area-fade-reveal・--fandhe-scroll-area-fade-start/-end)で調整できます。詳細は下記 Features / Examples 節を参照してください。

関連 API: fandhe-frontend-pre-styled-ui API / fandhe-frontend-headless-ui API

Demo

CSS overflow を主体としたスクロール領域です。カスタムスクロールバーの見た目は scrollbar-width/scrollbar-color と ::-webkit-scrollbar 系規則で表現し、thumb 色は custom property --fandhe-scroll-area-thumb-bg で一元化しています(hover 時は --fandhe-scroll-area-thumb-hover-bg へ強調。JS によるスクロール位置追従は対象外)。data-orientation="horizontal"(横スクロール)・data-fade(端フェード、対応ブラウザではスクロール量に連動)は viewport への opt-in 属性です(イシュー #2054、shadcn/ui 突合)。

スクロール可能な行 1

スクロール可能な行 2

スクロール可能な行 3

スクロール可能な行 4

スクロール可能な行 5

スクロール可能な行 6

スクロール可能な行 7

スクロール可能な行 8

スクロール可能な行 9

スクロール可能な行 10

スクロール可能な行 11

スクロール可能な行 12

スクロール可能な行 13

スクロール可能な行 14

スクロール可能な行 15

スクロール可能な行 16

スクロール可能な行 17

スクロール可能な行 18

スクロール可能な行 19

スクロール可能な行 20

--fandhe-scroll-area-thumb-bg: transparent を指定すると、chakra-ui の variant="hover" 相当(既定は非表示、hover 時のみ出現)を再現できます。

スクロール可能な行 1

スクロール可能な行 2

スクロール可能な行 3

スクロール可能な行 4

スクロール可能な行 5

スクロール可能な行 6

スクロール可能な行 7

スクロール可能な行 8

スクロール可能な行 9

スクロール可能な行 10

スクロール可能な行 11

スクロール可能な行 12

スクロール可能な行 13

スクロール可能な行 14

スクロール可能な行 15

スクロール可能な行 16

スクロール可能な行 17

スクロール可能な行 18

スクロール可能な行 19

スクロール可能な行 20

viewport へ data-orientation="horizontal" を付与すると横スクロールになります(shadcn/ui ScrollBar orientation="horizontal" 相当)。

横スクロールデモ画像
Item 1
横スクロールデモ画像
Item 2
横スクロールデモ画像
Item 3
横スクロールデモ画像
Item 4
横スクロールデモ画像
Item 5
横スクロールデモ画像
Item 6

viewport へ data-fade を付与すると端がフェードします(shadcn/ui utils/scroll-fade 相当。animation-timeline: scroll() 対応ブラウザではスクロール量に応じて先頭/末尾のフェードが切り替わります)。

スクロール可能な行 1

スクロール可能な行 2

スクロール可能な行 3

スクロール可能な行 4

スクロール可能な行 5

スクロール可能な行 6

スクロール可能な行 7

スクロール可能な行 8

スクロール可能な行 9

スクロール可能な行 10

スクロール可能な行 11

スクロール可能な行 12

スクロール可能な行 13

スクロール可能な行 14

スクロール可能な行 15

スクロール可能な行 16

スクロール可能な行 17

スクロール可能な行 18

スクロール可能な行 19

スクロール可能な行 20

Features

  • headless 層は anatomy(data-scope/data-part)と tabindex="0" のみを提供し、CSS overflow が実際のスクロール可能性を担う
  • ::-webkit-scrollbar 系規則でカスタムスクロールバーの見た目を表現する
  • thumb 色は custom property --fandhe-scroll-area-thumb-bg(既定 fg-subtle トークン。WCAG 非テキストコントラスト基準 3:1 を満たす、イシュー #1584 PR #1858 是正)で一元化されており、root へ再定義するだけで scrollbar-color と ::-webkit-scrollbar-thumb 双方の色を揃って変更できる
  • viewport の hover 時・キーボードフォーカス時の双方で thumb 色を --fandhe-scroll-area-thumb-hover-bg(既定 fg)へ強調する(常時表示 + hover/focus 強調。タッチ端末でも thumb が不可視にならないよう hover-reveal は既定にしない、イシュー #1584)
  • フォーカスリングは focus_ring_declarations(Token/Inset)による canonical 表現で、root の overflow: hidden 内に収まるよう内側描画にしている(イシュー #1584)
  • variant(chakra の hover/always・Radix Themes の size/type 相当)は提供しない。custom property の上書きで同等の見た目を利用側から再現できる
  • 横スクロール: viewport へ data-orientation="horizontal" を付与すると content が display: flex; width: max-content; になる(shadcn/ui ScrollBar orientation="horizontal" 相当、イシュー #2054)
  • 端フェード: viewport へ data-fade を付与すると mask-image による端フェードが opt-in する。animation-timeline: scroll() 対応ブラウザでは @supports 配下でスクロール量に応じてフェード端を動的に切り替え、非対応ブラウザは両端固定フェードへ graceful degradation する(shadcn/ui utils/scroll-fade 相当、イシュー #2054)
  • RTL 対応: data-fade + data-orientation="horizontal" 併用時は :dir(rtl) でグラデーション方向を反転する(イシュー #2054)
  • JS によるスクロール位置追従は対象外(showcase.rs の scroll_area_section 記述と同方針)

Anatomy

root
  viewport
    content

API Reference

Data Attributes

PartAttributeObserved Values
viewportdata-fade(値なし)
viewportdata-orientationhorizontal

CSS Variables

VariableDefault
--fandhe-scroll-area-fade-endvar(--fandhe-scroll-area-fade-end-driven, 0px)
--fandhe-scroll-area-fade-end-driven0px
--fandhe-scroll-area-fade-revealvar(--fandhe-space-8, 2rem)
--fandhe-scroll-area-fade-sizemin(12%, var(--fandhe-space-10, 2.5rem))
--fandhe-scroll-area-fade-startvar(--fandhe-scroll-area-fade-start-driven, 0px)
--fandhe-scroll-area-fade-start-driven0px
--fandhe-scroll-area-scrollbar-size0.5rem
--fandhe-scroll-area-thumb-bg—
--fandhe-scroll-area-thumb-hover-bgvar(--fandhe-color-fg, var(--fandhe-color-fg-subtle, var(--fandhe-color-border-emphasized, var(--fandhe-color-border))))

Examples

Scrollable list

固定高さのビューポート内に 5 行を表示するスクロール領域の例です。

Row 1

Row 2

Row 3

Row 4

Row 5

Tags

線区切りのタグリストの例です(イシュー #2054、shadcn/ui Tags 例相当)。

Tags

Tag 1

Tag 2

Tag 3

Tag 4

Tag 5

Horizontal scroll

data-orientation="horizontal" による横スクロールの例です(イシュー #2054)。

横スクロールデモ画像
Photo 1
横スクロールデモ画像
Photo 2
横スクロールデモ画像
Photo 3
横スクロールデモ画像
Photo 4

RTL + fade

dir="rtl" と data-fade を組み合わせた例です(イシュー #2054)。

行 1

行 2

行 3

行 4

行 5

Accessibility

WAI-ARIA

AttributeDescription
tabindex="0"(viewport)キーボードフォーカス可能にするのみで、固有の role/aria-* は出力しない。