01 — Foundation

Infinite scroll is a trade-off

Loading more as users scroll feels effortless until they need to stop, share, or go back.

Infinite scroll removes page boundaries and can suit feeds where users browse forward continuously. It also removes reliable footers, breaks “back to where I was”, and makes comparison across items harder. Choose it deliberately — not because pagination felt old-fashioned.

02 — When

When infinite scroll fits

Feeds and timelines differ from catalogues, admin tables, and checkout flows.

  • reasonable fit: social feeds, activity streams, image galleries browsed casually
  • poor fit: legal docs, invoices, settings lists, anything users must compare or export
  • prefer pagination when users need stable URLs, footers, or precise position

03 — Behaviour

Implementation expectations

If you load more content, users need feedback and control.

  • visible loading indicator and error recovery — not silent failure at the bottom
  • “Load more” button as progressive enhancement or primary control on slow networks
  • preserve scroll position when returning where the platform allows
  • avoid hijacking scroll on nested containers without clear boundaries
<button type="button" id="load-more" aria-controls="results">
    Load more results
</button>
<div id="results" aria-live="polite"></div>

04 — Accessibility

Accessibility and performance

Endless DOM growth and focus loss are the hidden costs.

  • announce new content without spamming — polite live regions, not every row
  • keyboard users need a path to newly loaded items and a way to pause loading
  • cap or virtualise very long lists; thousands of DOM nodes hurt everyone
  • respect reduced motion; avoid scroll-jacking loaders

05 — Review

Before you approve

A short checklist for infinite scroll in code review.

  • the use case truly benefits from continuous loading
  • loading, error, and end-of-list states are clear
  • pagination or “load more” is available where users need control