Ballmac UI home

Scroll Progress

A thin reading-progress bar fixed to the top or bottom of the page, or to a scrollable panel, that fills on a soft spring (or exactly under reduced motion).

Designing calm software

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 1 of nine.

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 2 of nine.

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 3 of nine.

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 4 of nine.

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 5 of nine.

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 6 of nine.

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 7 of nine.

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 8 of nine.

Good interfaces make the next step obvious. They keep important information in view, hide what is not needed yet, and respond quickly enough that people never wonder whether something worked. Paragraph 9 of nine.

Installation

$ pnpm dlx shadcn@latest add @ballmac/scroll-progress

Usage

import { ScrollProgress } from "@/components/ballmac/scroll-progress"

The full example is in the Code tab above.

Examples

Bottom, thicker

A thicker bar along the bottom edge. Keep scrolling to fill it, line 1.

A thicker bar along the bottom edge. Keep scrolling to fill it, line 2.

A thicker bar along the bottom edge. Keep scrolling to fill it, line 3.

A thicker bar along the bottom edge. Keep scrolling to fill it, line 4.

A thicker bar along the bottom edge. Keep scrolling to fill it, line 5.

A thicker bar along the bottom edge. Keep scrolling to fill it, line 6.

A thicker bar along the bottom edge. Keep scrolling to fill it, line 7.

A thicker bar along the bottom edge. Keep scrolling to fill it, line 8.

API reference

PropTypeDefault
position

Which edge the bar sits on.

"top" | "bottom""top"
container

A scrollable element to track instead of the page. Give the bar `absolute` positioning inside its wrapper.

React.RefObject<HTMLElement | null>—
thickness

Bar thickness in pixels.

number3

Also accepts the standard attributes of its root element.

Accessibility

KeyAction
Screen readersDecorative (aria-hidden); the page's own scroll position is already exposed
Reduced motionNo spring smoothing

Use with AI

Render <ScrollProgress /> once. Pass container (a ref) to follow a scrollable element and add className='absolute' inside its wrapper. With the shadcn MCP server set up (guide), ask your agent:

Add the Ballmac UI Scroll Progress (@ballmac/scroll-progress) to this project with the shadcn MCP, then use it where it fits.

Use it for

  • Long articles and docs
  • Multi-section landing pages

Not for

  • Task or upload progress; use progress
  • Step indicators; use progress-steps

Registry JSON: https://ui.ballmac.com/r/scroll-progress.json

Credits

Free to use in personal and commercial projects.

Registry
shadcn/utils