Heading fonts

Choose a Google Fonts family. The selected font loads from Google Fonts; Inter and Geist Serif are bundled locally.

Search Reflow

Keyboard shortcuts

Use these keys while you are not typing in a field.

Search⌘K
Cycle themeT
Cycle accentA
Cycle heading fontF
Cycle radiusR
Cycle sizeS
Cycle iconsI
Cycle hoverH
Toggle navigation[
Toggle properties]
Previous / next demo slide←→
Show shortcuts?
Skip to content
Open navigationClose navigation

Make them yours

Theme
SystemT
Accent
BlueA
Heading font
InterF
Radius
RoundedR
Size
DefaultS
Icons
LucideI
Hover
FluidH

Scrollbars

Use a thin scrollbar with native scrolling and a visible focus outline.

Installation

One prompt for your coding agent to set up Reflow and use this system in Remix.

The problem

On platforms that hide native scrollbars until you scroll, a clipped list can look like it simply ends. Compare the same release notes with a custom thumb and a fade at the edge.

  • v1.23.0 — maintenance release
  • v1.22.0 — maintenance release
  • v1.21.0 — maintenance release
  • v1.20.0 — maintenance release
  • v1.19.0 — maintenance release
  • v1.18.0 — maintenance release
  • v1.17.0 — maintenance release
  • v1.16.0 — maintenance release
  • v1.15.0 — maintenance release
  • v1.14.0 — maintenance release
  • v1.13.0 — maintenance release
  • v1.12.0 — maintenance release
  • v1.11.0 — maintenance release
  • v1.10.0 — maintenance release
  • v1.9.0 — maintenance release
  • v1.8.0 — maintenance release
  • v1.7.0 — maintenance release
  • v1.6.0 — maintenance release
  • v1.5.0 — maintenance release
  • v1.4.0 — maintenance release
  • v1.3.0 — maintenance release
  • v1.2.0 — maintenance release
  • v1.1.0 — maintenance release
  • v1.0.0 — maintenance release
Native overflow may hide the scrollbar
  • v1.23.0 — maintenance release
  • v1.22.0 — maintenance release
  • v1.21.0 — maintenance release
  • v1.20.0 — maintenance release
  • v1.19.0 — maintenance release
  • v1.18.0 — maintenance release
  • v1.17.0 — maintenance release
  • v1.16.0 — maintenance release
  • v1.15.0 — maintenance release
  • v1.14.0 — maintenance release
  • v1.13.0 — maintenance release
  • v1.12.0 — maintenance release
  • v1.11.0 — maintenance release
  • v1.10.0 — maintenance release
  • v1.9.0 — maintenance release
  • v1.8.0 — maintenance release
  • v1.7.0 — maintenance release
  • v1.6.0 — maintenance release
  • v1.5.0 — maintenance release
  • v1.4.0 — maintenance release
  • v1.3.0 — maintenance release
  • v1.2.0 — maintenance release
  • v1.1.0 — maintenance release
  • v1.0.0 — maintenance release
ScrollArea shows the thumb and fades the edge

The scrollbar

The thumb rests narrow and low contrast, then widens when you reach for it. Scroll with a wheel or trackpad, drag the thumb, or use the keyboard. On touch-primary devices the component uses the platform’s native scrolling gestures.

The fade

A fade marks the edges with hidden content. At the true start or end, that edge clears.

  • v1.23.0 — maintenance release
  • v1.22.0 — maintenance release
  • v1.21.0 — maintenance release
  • v1.20.0 — maintenance release
  • v1.19.0 — maintenance release
  • v1.18.0 — maintenance release
  • v1.17.0 — maintenance release
  • v1.16.0 — maintenance release
  • v1.15.0 — maintenance release
  • v1.14.0 — maintenance release
  • v1.13.0 — maintenance release
  • v1.12.0 — maintenance release
  • v1.11.0 — maintenance release
  • v1.10.0 — maintenance release
  • v1.9.0 — maintenance release
  • v1.8.0 — maintenance release
  • v1.7.0 — maintenance release
  • v1.6.0 — maintenance release
  • v1.5.0 — maintenance release
  • v1.4.0 — maintenance release
  • v1.3.0 — maintenance release
  • v1.2.0 — maintenance release
  • v1.1.0 — maintenance release
  • v1.0.0 — maintenance release

Examples

Horizontal

A row of months is wider than its container. The fade marks the side with more content.

JanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember

Double overflow

A table is taller and wider than its viewport. Set orientation="both" to expose both axes.

CityJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecember
Amsterdam877988199310421532643754865976187298
Berlin236384532680828976224372520668816964
Copenhagen495680865150335520705890175360545730
Dublin754976298520742964286508730952274496
Helsinki113372631890249508767126385644903262
Lisbon372668964360656952348644940336632928
London631964397730163496829262595928361694
Madrid890360730200570940410780250620990460
Oslo249656163570977484891398805312719226
Paris508952496940484928472916460904448892
Prague767348829410891472953534115596177658
Stockholm126644262780398916534152670288806424
Vienna385940595250805460115670325880535190
Warsaw644336928620312904596288880572264856
Zurich903632361990719448177806535264893622

API reference

ScrollArea

PropertyValuePurpose
ScrollArea.orientationvertical | horizontal | bothVisible scrollbar axes
ScrollArea.fadebooleanFade content edges
ScrollArea.viewportClassNamestringStyle the native scrolling viewport
.rf-scroll-areaCSS classNative scroll container
scrollFade.orientationvertical | horizontal | bothEdges to fade
scrollFade.distance20pxMaximum edge fade
Coarse pointerNative scrollbarRetains platform gestures