- Notifications
You must be signed in to change notification settings - Fork 3.3k
/
Copy pathposition-change-heuristic-in-nested-scroll-box.html
85 lines (73 loc) · 2.05 KB
/
position-change-heuristic-in-nested-scroll-box.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!DOCTYPE html>
<scriptsrc="/resources/testharness.js"></script>
<scriptsrc="/resources/testharnessreport.js"></script>
<linkrel="help" href="https://drafts.csswg.org/css-scroll-anchoring/#suppression-triggers">
<style>
#space {
height:4000px;
overflow: hidden;
}
#header {
background-color:#F5B335;
height:50px;
width:100%;
}
#content {
background-color:#D3D3D3;
height:400px;
}
.scroller {
overflow: scroll;
position: relative;
width:600px;
height:600px;
}
body {
overflow: hidden;
}
</style>
<divid="maybeScroller">
<divid="space">
<divid="header"></div>
<divid="before"></div>
<divid="content"></div>
</div>
</div>
<script>
// Tests that scroll anchoring is suppressed when an element in the scroller
// changes its in-flow state.
varscroller;
functionrunCase(oldPos,newPos,expectSuppression,skipInverse){
varheader=document.querySelector("#header");
varbefore=document.querySelector("#before");
header.style.position=oldPos;
before.style.height="0";
scroller.scrollTop=200;
header.style.position=newPos;
before.style.height="25px";
varexpectedTop=expectSuppression ? 200 : 225;
assert_equals(scroller.scrollTop,expectedTop);
if(!skipInverse)
runCase(newPos,oldPos,expectSuppression,true);
}
test(()=>{
scroller=document.scrollingElement;
document.querySelector("#maybeScroller").className="";
runCase("static","fixed",true);
runCase("static","absolute",true);
runCase("static","relative",false);
runCase("fixed","absolute",false);
runCase("fixed","relative",true);
runCase("absolute","relative",true);
},"Position changes in document scroller.");
test(()=>{
scroller=document.querySelector("#maybeScroller");
scroller.className="scroller";
runCase("static","fixed",true);
runCase("static","absolute",true);
runCase("static","relative",false);
runCase("fixed","absolute",false);
runCase("fixed","relative",true);
runCase("absolute","relative",true);
},"Position changes in scrollable <div>.");
</script>