File: scroll-margin-focus.html

package info (click to toggle)
firefox 149.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,767,760 kB
  • sloc: cpp: 7,416,064; javascript: 6,752,859; ansic: 3,774,850; python: 1,250,473; xml: 641,578; asm: 439,191; java: 186,617; sh: 56,634; makefile: 18,856; objc: 13,092; perl: 12,763; pascal: 5,960; yacc: 4,583; cs: 3,846; lex: 1,720; ruby: 1,002; php: 436; lisp: 258; awk: 105; sql: 66; sed: 53; csh: 10; exp: 6
file content (54 lines) | stat: -rw-r--r-- 1,377 bytes parent folder | download
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
<!DOCTYPE html>
<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>
.scroller {
  height: 200px;
  width: 400px;
  border: 1px solid black;
  overflow: auto;
}
.header {
  height: 100px;
  position: sticky;
  top: 0;
  background: rgb(255, 0, 0, 0.3);
}
.header + * {
  scroll-margin-top: 100px;
}
.spacer {
  height: 130px;
}
</style>
<div class="scroller">
  <div class="header">
    This header may obscure content below it.
  </div>
  <button>Focus this button</button>
  <div class="spacer"></div>
  <button>Start on this button</button>
</div>
<script>
test(() => {
  const scroller = document.querySelector('.scroller');
  let buttons = document.querySelectorAll('button');
  assert_greater_than(scroller.scrollHeight, scroller.clientHeight,
      'scroller should have scrolling content');

  // Focusing the second button should scroll down.
  buttons[1].focus();
  assert_equals(scroller.scrollTop, scroller.scrollHeight - scroller.clientHeight,
      'scrolls to bottom of scroller');

  // Focusing the first button should scroll up.
  buttons[0].focus();
  assert_equals(scroller.scrollTop, 0,
      'scrolls to top of scroller');

}, "Focus should scroll button outside of scroll margin");
</script>

</html>