summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-anchor-position/anchor-scroll-006.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/css/css-anchor-position/anchor-scroll-006.html')
-rw-r--r--testing/web-platform/tests/css/css-anchor-position/anchor-scroll-006.html137
1 files changed, 137 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-anchor-position/anchor-scroll-006.html b/testing/web-platform/tests/css/css-anchor-position/anchor-scroll-006.html
new file mode 100644
index 0000000000..2ffd026b55
--- /dev/null
+++ b/testing/web-platform/tests/css/css-anchor-position/anchor-scroll-006.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<title>Tests that scroll adjustment is applied per-axis</title>
+<link rel="help" href="https://drafts.csswg.org/css-anchor-position-1/#needs-scroll-adjustment">
+<link rel="author" href="mailto:xiaochengh@chromium.org">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/test-common.js"></script>
+
+<style>
+body {
+ margin: 0;
+}
+
+.scroller {
+ width: 150px;
+ height: 150px;
+ margin-bottom: 50px;
+ overflow: scroll;
+ position: relative;
+}
+
+.spacer {
+ width: 400px;
+ height: 400px;
+}
+
+.anchor {
+ position: absolute;
+ width: 50px;
+ height: 50px;
+ top: 50px;
+ left: 50px;
+ background: orange;
+}
+
+.target {
+ position: fixed;
+ width: 50px;
+ height: 50px;
+ background: lime;
+}
+
+#scroller1 { anchor-name: --scroller1; }
+#scroller2 { anchor-name: --scroller2; }
+#scroller3 { anchor-name: --scroller3; }
+
+#anchor1 { anchor-name: --a1; }
+#anchor2 { anchor-name: --a2; }
+#anchor3 { anchor-name: --a3; }
+
+/* Needs scroll adjustment in x axis only */
+#target1 {
+ anchor-default: --a1;
+ left: anchor(left);
+ top: anchor(--scroller1 bottom);
+}
+
+/* Needs scroll adjustment in y axis only */
+#target2 {
+ anchor-default: --a2;
+ top: anchor(top);
+ left: anchor(--scroller2 right);
+}
+
+/* No scroll adjustment needed */
+#target3 {
+ anchor-default: --a3;
+ top: anchor(--scroller3 bottom);
+ left: anchor(--scroller3 right);
+}
+</style>
+
+<div class="scroller" id="scroller1">
+ <div class="spacer"></div>
+ <div class="anchor" id="anchor1"></div>
+</div>
+<div class="target" id="target1"></div>
+
+<script>
+promise_test(async () => {
+ await waitUntilNextAnimationFrame();
+ assert_equals(target1.getBoundingClientRect().left, 50);
+ assert_equals(target1.getBoundingClientRect().top, 150);
+
+ scroller1.scrollLeft = 50;
+ await waitUntilNextAnimationFrame();
+ assert_equals(target1.getBoundingClientRect().left, 0);
+
+ scroller1.scrollTop = 50;
+ await waitUntilNextAnimationFrame();
+ assert_equals(target1.getBoundingClientRect().top, 150);
+}, '#target1 is scroll-adjusted in x axis only');
+</script>
+
+<div class="scroller" id="scroller2">
+ <div class="spacer"></div>
+ <div class="anchor" id="anchor2"></div>
+</div>
+<div class="target" id="target2"></div>
+
+<script>
+promise_test(async () => {
+ await waitUntilNextAnimationFrame();
+ assert_equals(target2.getBoundingClientRect().left, 150);
+ assert_equals(target2.getBoundingClientRect().top, 250);
+
+ scroller2.scrollLeft = 50;
+ await waitUntilNextAnimationFrame();
+ assert_equals(target2.getBoundingClientRect().left, 150);
+
+ scroller2.scrollTop = 50;
+ await waitUntilNextAnimationFrame();
+ assert_equals(target2.getBoundingClientRect().top, 200);
+}, '#target2 is scroll-adjusted in y axis only');
+</script>
+
+<div class="scroller" id="scroller3">
+ <div class="spacer"></div>
+ <div class="anchor" id="anchor3"></div>
+</div>
+<div class="target" id="target3"></div>
+
+<script>
+promise_test(async () => {
+ await waitUntilNextAnimationFrame();
+ assert_equals(target3.getBoundingClientRect().left, 150);
+ assert_equals(target3.getBoundingClientRect().top, 550);
+
+ scroller3.scrollLeft = 50;
+ await waitUntilNextAnimationFrame();
+ assert_equals(target3.getBoundingClientRect().left, 150);
+
+ scroller3.scrollTop = 50;
+ await waitUntilNextAnimationFrame();
+ assert_equals(target3.getBoundingClientRect().top, 550);
+}, '#target3 is scroll-adjusted in neither axis');
+</script>