Testing

CSS Scroll Snap: Browser Support, Properties, Limitations

CSS Scroll Snap works in Chrome 69+, Edge 79+, Firefox 68+, Safari 11+, Opera 56+, and Samsung Internet 10.1+. Browser support, properties, and known issues.

Author

Prince Dewani

May 6, 2026

CSS Scroll Snap is a W3C CSS module that lets a scroll container snap to predefined positions as the user scrolls overflowing content. It supports Chrome 69+, Edge 79+, Firefox 68+, Safari 11+ on macOS and iOS, Opera 56+, and Samsung Internet 10.1+, while Internet Explorer 10 and 11 only support the older -ms- prefixed Scroll Snap Points draft.

This guide covers what CSS Scroll Snap is, the browsers that support it, the key properties, how to check support in code, the production use cases, and the known issues.

What is CSS Scroll Snap?

CSS Scroll Snap is a CSS module that defines snap positions on a scroll container so its scrollport stops at chosen children instead of any pixel offset. The W3C CSS Working Group maintains the CSS Scroll Snap Module Level 1 specification. The module entry points are scroll-snap-type on the container and scroll-snap-align on each child.

Which browsers does CSS Scroll Snap support?

CSS Scroll Snap works without a vendor prefix in every modern browser, with a legacy -ms- partial implementation in Internet Explorer 10 to 11.

Loading browser compatibility data...

CSS Scroll Snap compatibility in Chrome

CSS Scroll Snap works on desktop from Chrome 69 on, and on Android from Chrome 69 on. Chrome 66 to 68 had it disabled by default behind a flag; Chrome 4 to 65 did not support the modern unprefixed spec. scroll-snap-stop works from Chrome 75 on.

CSS Scroll Snap compatibility in Edge

Edge supports the modern unprefixed spec from Edge 79 on, when the browser switched to the Chromium engine. Edge 12 to 18 (the EdgeHTML versions) only supported the older Scroll Snap Points draft using the -ms- prefixed properties inherited from Internet Explorer.

CSS Scroll Snap compatibility in Firefox

Firefox supports the modern Scroll Snap spec from Firefox 68 on for desktop and Android. Firefox 39 to 67 shipped the older Scroll Snap Points properties (scroll-snap-points-x, scroll-snap-destination), which were removed in Firefox 68. Firefox 2 to 38 had no scroll snap support at all.

CSS Scroll Snap compatibility in Safari

CSS Scroll Snap works on macOS from Safari 11 on, and on iOS and iPadOS from Safari 11 on. Safari 9 to 10.1 shipped the legacy Scroll Snap Points draft with the -webkit- prefix. scroll-snap-stop ships from Safari 15 on, and the scrollsnapchange event ships from Safari 18.2 on.

CSS Scroll Snap compatibility in Opera

Opera supports the modern Scroll Snap spec from Opera 56 on for desktop, and from Opera Mobile 47 on. Earlier versions had no support. Modern Opera tracks the Chromium engine and inherits Chrome's snap behavior, including scroll-snap-stop from Opera 62 on.

CSS Scroll Snap compatibility in Samsung Internet

Samsung Internet supports CSS Scroll Snap from version 10.1 on. Earlier versions did not support the modern spec. Samsung Internet ships as the default browser on most Galaxy devices, so testing it covers a large slice of Android traffic that Chrome alone misses.

CSS Scroll Snap compatibility in Android Browser

The Android system WebView inherits Chromium support, so CSS Scroll Snap works in current Android Browser builds from version 69 on. Older AOSP browser builds before the WebView switched to Chromium did not support snap.

CSS Scroll Snap compatibility in Internet Explorer

IE 10 and 11 only support the older Scroll Snap Points draft using -ms-scroll-snap-type, -ms-scroll-snap-points-x, and -ms-scroll-snap-points-y. The modern scroll-snap-align and scroll-snap-stop properties are not available. Microsoft has retired Internet Explorer, so production sites no longer need to ship the legacy syntax.

Note

Note: CSS Scroll Snap behaves slightly differently across browser engines, and the IE 10-11 -ms- legacy syntax can still trip a fallback. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the key properties of CSS Scroll Snap?

CSS Scroll Snap pairs a container-level type declaration with per-child alignment and padding properties that control where the scrollport lands.

  • scroll-snap-type: Set on the scroll container. Accepts an axis (x, y, both, block, inline) and a strictness keyword (mandatory or proximity). For example, x mandatory builds a horizontal carousel that always lands on an item.
  • scroll-snap-align: Set on each child. Defines whether the child snaps by its start, center, or end edge. A 3-up gallery typically uses scroll-snap-align: start so cards align to the left edge of the viewport.
  • scroll-snap-stop: Set on each child. The always value forces the container to stop on this child even during a fast flick, which is the right default for full-page pagers and onboarding flows.
  • scroll-padding and scroll-padding-top / -right / -bottom / -left: Set on the container. Inset the optimal viewing region so a sticky header or fixed nav does not cover the snapped child.
  • scroll-margin and scroll-margin-top / -right / -bottom / -left: Set on each child. Adjust each child's snap area, useful when items have decorative borders or shadows that should not count toward the snap edge.
  • scrollsnapchange and scrollsnapchanging events: Newer JavaScript events that fire when the snapped child changes. Available in Chrome 129+ and Safari 18.2+, useful for syncing dot indicators or analytics.

How do you check if a browser supports CSS Scroll Snap?

Use a CSS feature query so unsupported browsers fall back to a normal scrolling layout while modern browsers light up the snap behavior.

  • Wrap the snap rules in @supports: @supports (scroll-snap-type: x mandatory) { .gallery { scroll-snap-type: x mandatory; } }. Browsers that do not understand the property skip the block entirely.
  • Detect from JavaScript with CSS.supports(): CSS.supports('scroll-snap-type', 'x mandatory') returns true on every shipping modern browser and false on IE and very old mobile browsers.
  • Probe scroll-snap-stop separately: @supports (scroll-snap-stop: always) lets you gate the always-stop behavior, since older Chrome, Safari, and Firefox versions support snap but not the stop modifier.
  • Verify on real devices: Snap behavior depends on the platform's overscroll physics, so iOS Safari, Chrome Android, and Samsung Internet can each feel different even when the @supports query returns true.
...

What are the use cases of CSS Scroll Snap?

CSS Scroll Snap is the cleanest native option for any UI that benefits from item-by-item paging without a JavaScript carousel library.

  • Horizontal product carousels: A flex row with scroll-snap-type: x mandatory and scroll-snap-align: start gives the same swipe-to-card feel as a JavaScript slider, with native momentum and accessibility for free.
  • Full-page vertical pagers: A wrapper with scroll-snap-type: y mandatory and full-viewport sections turns long pages into onboarding flows or marketing sites that snap section by section.
  • Image galleries and lightboxes: Snap to each image so taps and swipes always land on a clean frame, without writing scroll math in JavaScript.
  • Mobile bottom-sheet pickers: A short scroll container with snap aligns picker rows to the cursor, mimicking the iOS native picker without a third-party component.
  • Tabbed dashboards on small screens: Snap between dashboard panels horizontally on phones while a desktop layout uses a normal grid, all from the same HTML.
...

What are the known issues with CSS Scroll Snap?

CSS Scroll Snap is stable in modern browsers, but a handful of cross-engine quirks still bite in production.

  • scroll-snap-stop arrived later than the rest of the spec: Chrome shipped it in 75, Edge in 79, Safari in 15, and Firefox in 103. Pages that need a hard stop on every item have to feature-detect it, since older browsers silently ignore the property.
  • iOS Safari momentum quirks: In my experience, mandatory snapping on iOS Safari can fight the platform's elastic overscroll, so a fast flick that should pass two items sometimes lands on the next one. Switching to proximity often feels more natural on touch.
  • Internet Explorer legacy syntax gap: IE 10 and 11 only support the old Scroll Snap Points draft, which lacks scroll-snap-align and scroll-snap-stop. Most teams now drop IE entirely instead of shipping the -ms- fallback.
  • Snap interferes with programmatic scrolling: element.scrollTo({ top: 800, behavior: 'smooth' }) can land on the nearest snap point instead of the requested offset when scroll-snap-type: y mandatory is active, which breaks anchor-style navigation inside the same page.
  • scrollend timing varies: The standard scrollend event fires inconsistently across engines while a snap is settling. The newer scrollsnapchange event in Chrome 129+ and Safari 18.2+ is the cleaner signal, but it is not yet universal.
  • Keyboard and screen-reader traps: Snap containers can swallow tab focus if children are not in source order. Pair scroll-snap-stop: always with proper tabindex management so users without a touchscreen can reach every item.

Citations

All CSS Scroll Snap version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests