WPT
wpt / css / css-scroll-snap / scrollTo-scrollBy-snaps.html
Spec: CSS Scroll Snap ↗
Runs: Chrome 155.0.8041.0 (wpt@07d3da1fa, 2026-09-04) | Firefox 157.0a1 (wpt@4fbf9ef4d, 2026-09-04) | Safari 251 preview (wpt@5ce815a83, 2026-08-27) | Ladybird 1.0-a7825 (wpt@4fbf9ef4d, 2026-09-04) | Servo Servo 0.6 (wpt@7e3d005d7, 2026-09-03) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 40/40 | 40/40 | 40/40 | 40/40 | 0/40 | 0/40 |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| assign scrollLeft and scrollTop for {left: 800} on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {left: 800} on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 800}) on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 800}) on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 800}) on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 800}) on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 800}) on window lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 800}) on window lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {top: 900} on div lands on (0, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {top: 900} on viewport-defining element lands on (0, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({top: 900}) on div lands on (0, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({top: 900}) on div lands on (0, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({top: 900}) on viewport-defining element lands on (0, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({top: 900}) on viewport-defining element lands on (0, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({top: 900}) on window lands on (0, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({top: 900}) on window lands on (0, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {left: 900, top: 800} on div lands on (1000, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {left: 900, top: 800} on viewport-defining element lands on (1000, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 900, top: 800}) on div lands on (1000, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 900, top: 800}) on div lands on (1000, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 900, top: 800}) on viewport-defining element lands on (1000, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 900, top: 800}) on viewport-defining element lands on (1000, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 900, top: 800}) on window lands on (1000, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 900, top: 800}) on window lands on (1000, 1000) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {left: 800, top: -100} on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {left: 800, top: -100} on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 800, top: -100}) on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 800, top: -100}) on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 800, top: -100}) on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 800, top: -100}) on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 800, top: -100}) on window lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 800, top: -100}) on window lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {left: 10000, top: -100} on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| assign scrollLeft and scrollTop for {left: 10000, top: -100} on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 10000, top: -100}) on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 10000, top: -100}) on div lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 10000, top: -100}) on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 10000, top: -100}) on viewport-defining element lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollTo({left: 10000, top: -100}) on window lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |
| scrollBy({left: 10000, top: -100}) on window lands on (1000, 0) | PASS | PASS | PASS | PASS | FAIL | FAIL |