| <!DOCTYPE html> | |
| <title>getBoundingClientRect for a element inside scroll container</title> | |
| <link rel="author" title="Jo Steven Novaryo" href="mailto:steven.novaryo@gmail.com"> | |
| <link rel="help" href="https://drafts.csswg.org/cssom-view/#dom-element-getboundingclientrect"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <html> | |
| <head> | |
| <style> | |
| body { | |
| margin: 0; | |
| } | |
| .scroll_container { | |
| width: 300px; | |
| height: 300px; | |
| overflow: scroll; | |
| scrollbar-width: none; | |
| } | |
| .dummy_overflowing_box { | |
| width: 5000px; | |
| height: 5000px; | |
| } | |
| .target_box { | |
| width: 100px; | |
| height: 100px; | |
| background-color: green; | |
| } | |
| .display_none { | |
| display: none; | |
| } | |
| .display_content { | |
| display: content; | |
| } | |
| .position_absolute { | |
| position: absolute; | |
| } | |
| .position_fixed { | |
| position: fixed; | |
| } | |
| .absolute_containing_block { | |
| position: relative; | |
| } | |
| .fixed_containing_block { | |
| will-change: transform; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="scroll_container fixed_containing_block"> | |
| <div class="scroll_container absolute_containing_block"> | |
| <div id="target_scroll_container" class="scroll_container"> | |
| <div id="target_fixed" class="target_box position_fixed"></div> | |
| <div id="target_absolute" class="target_box position_absolute"></div> | |
| <div id="target_none" class="target_box display_none"></div> | |
| <div id="target_content" class="target_box display_content"> | |
| <div id="target_static" class="target_box"></div> | |
| </div> | |
| <div class="dummy_overflowing_box"></div> | |
| </div> | |
| <div class="dummy_overflowing_box"></div> | |
| </div> | |
| <div class="dummy_overflowing_box"></div> | |
| </div> | |
| <div id="log"></div> | |
| <script> | |
| setup(() => { | |
| var offset_left = 1; | |
| var offset_top = 2; | |
| for (scroll_container of document.getElementsByClassName('scroll_container')) { | |
| scroll_container.scrollTo(offset_left, offset_top) | |
| offset_left *= 4; | |
| offset_top *= 4; | |
| } | |
| }); | |
| test(function() { | |
| var target = document.querySelector('#target_static'); | |
| let staticRect = target.getBoundingClientRect(); | |
| assert_equals(staticRect.left, -21, 'static positioned target left'); | |
| assert_equals(staticRect.top, -42, 'static positioned target top'); | |
| assert_equals(staticRect.width, 100, 'static positioned target width'); | |
| assert_equals(staticRect.height, 100, 'static positioned target height'); | |
| }, "getBoundingClientRect for element inside scroll container"); | |
| test(function() { | |
| var target = document.querySelector('#target_absolute'); | |
| let absoluteRect = target.getBoundingClientRect(); | |
| assert_equals(absoluteRect.left, -5, 'absolute positioned target left'); | |
| assert_equals(absoluteRect.top, -10, 'absolute positioned target top'); | |
| assert_equals(absoluteRect.width, 100, 'absolute positioned target width'); | |
| assert_equals(absoluteRect.height, 100, 'absolute positioned target height'); | |
| }, "getBoundingClientRect for absolute element inside scroll container"); | |
| test(function() { | |
| var target = document.querySelector('#target_fixed'); | |
| let fixedRect = target.getBoundingClientRect(); | |
| assert_equals(fixedRect.left, -1, 'fixed positioned target left'); | |
| assert_equals(fixedRect.top, -2, 'fixed positioned target top'); | |
| assert_equals(fixedRect.width, 100, 'fixed positioned target width'); | |
| assert_equals(fixedRect.height, 100, 'fixed positioned target height'); | |
| }, "getBoundingClientRect for fixed element inside scroll container"); | |
| test(function() { | |
| var target = document.querySelector('#target_scroll_container'); | |
| let staticRect = target.getBoundingClientRect(); | |
| assert_equals(staticRect.left, -5, 'scroll container target left'); | |
| assert_equals(staticRect.top, -10, 'scroll container target top'); | |
| assert_equals(staticRect.width, 300, 'scroll container target width'); | |
| assert_equals(staticRect.height, 300, 'scroll container target height'); | |
| }, "getBoundingClientRect for a scrolled scroll container"); | |
| test(function() { | |
| var target = document.querySelector('#target_none'); | |
| let staticRect = target.getBoundingClientRect(); | |
| assert_equals(staticRect.left, 0, 'scroll container target left'); | |
| assert_equals(staticRect.top, 0, 'scroll container target top'); | |
| assert_equals(staticRect.width, 0, 'scroll container target width'); | |
| assert_equals(staticRect.height, 0, 'scroll container target height'); | |
| }, "getBoundingClientRect for a scrolled display none box"); | |
| test(function() { | |
| var target = document.querySelector('#target_content'); | |
| let staticRect = target.getBoundingClientRect(); | |
| assert_equals(staticRect.left, -21, 'static positioned target left'); | |
| assert_equals(staticRect.top, -42, 'static positioned target top'); | |
| assert_equals(staticRect.width, 100, 'static positioned target width'); | |
| assert_equals(staticRect.height, 100, 'static positioned target height'); | |
| }, "getBoundingClientRect for a scrolled display content box"); | |
| </script> | |
| </body> | |
| </html> |