diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/css/css-scroll-snap/scroll-margin.html | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/css/css-scroll-snap/scroll-margin.html')
-rw-r--r-- | testing/web-platform/tests/css/css-scroll-snap/scroll-margin.html | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-scroll-snap/scroll-margin.html b/testing/web-platform/tests/css/css-scroll-snap/scroll-margin.html new file mode 100644 index 0000000000..e6ce4ac49c --- /dev/null +++ b/testing/web-platform/tests/css/css-scroll-snap/scroll-margin.html @@ -0,0 +1,90 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#scroll-margin" /> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<style> +div { + position: absolute; + margin: 0px; +} +#scroller { + height: 500px; + width: 500px; + overflow: hidden; + scroll-snap-type: both mandatory; +} +#target { + width: 300px; + height: 300px; + background-color: blue; +} +#another-target { + width: 300px; + height: 300px; + top: 400px; + left: 400px; + background-color: blue; + scroll-snap-align: start; +} +</style> + +<div id="scroller"> + <div style="width: 2000px; height: 2000px;"></div> + <div id="target"></div> + <div id="another-target"></div> +</div> + +<script> +test(() => { + target.style.scrollSnapAlign = "start"; + target.style.scrollMargin = "100px"; + target.style.left = "300px"; + target.style.top = "300px"; + + scroller.scrollTo(0, 0); + // `target position (300px, 300px)` - `margin (100px, 100px)`. + assert_equals(scroller.scrollLeft, 200); + assert_equals(scroller.scrollTop, 200); + + target.style.scrollSnapAlign = "end"; + + // `target position (300px, 300px)` + `target size (300px, 300px) + + // `margin (100px, 100px) - `scroller size (500px, 500px)`. + scroller.scrollTo(0, 0); + assert_equals(scroller.scrollLeft, 200); + assert_equals(scroller.scrollTop, 200); +}, "Snaps to the positions adjusted by scroll-margin"); + +test(() => { + target.style.left = "0px"; + target.style.top = "0px"; + target.style.scrollSnapAlign = "start"; + + // Since the target is at (0px, 0px) in the scroll port, the added margin + // should not be considered, and the snap points for this snap area should be + // the closest points in the scroll port (i.e x=0 or y=0). + target.style.scrollMargin = "200px"; + + // Distance from target without margin: + // `scroll position (150px, 150px)` - `target position (0px, 0px)` + // = (150px, 150px) + // + // Distance from target with margin: + // `scroll position (150px, 150px)` - [`target position (0px, 0px)` - + // `target margin (200px, 200px)`] + // = (350px, 350px) + // + // Distance from other target: + // `other target position (400px, 400px)` - `scroll position (150px, 150px)` + // = (250px, 250px) + // + // Therefore if the "out-of-scrollport" scroll-margin contributes to the + // calculation, then the other target would be snapped to. However if the + // scroll-margin is not considered, then the (0px, 0px) target should be + // snapped to. + scroller.scrollTo(150, 150); + assert_equals(scroller.scrollLeft, 0); + assert_equals(scroller.scrollTop, 0); +}, "scroll-margin doesn't contribute to the snap position of the element " + + "if it's outside of the scroll port"); +</script> |