Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<html>
<title>scrollIntoView() and scroll-margin applied to an inline element</title>
<link rel='author' title='Martin Robinson' href='http://igalia.com'>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style type='text/css'>
.container {
border: solid black 1px;
height: 40px;
width: 40px;
overflow: auto;
}
</style>
<div class="container">
<div style="height: 1000px; width: 2000px;"></div>
<div style="width: 2000px;">
<span>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</span>
<span id="target">TARGETTARGETTARGETTARGET</span>
<span>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</span>
</div>
<div style="height: 1000px; width: 2000px;"></div>
</div>
<script>
test(() => {
target.scrollIntoView();
const scroller = target.parentElement.parentElement;
let expectedScrollPosition = [scroller.scrollLeft - 20, scroller.scrollTop - 20];
scroller.scrollTo(0, 0);
target.style.scrollMarginTop = "20px";
target.style.scrollMarginLeft = "20px";
target.scrollIntoView();
assert_equals(scroller.scrollLeft, expectedScrollPosition[0]);
assert_equals(scroller.scrollTop, expectedScrollPosition[1]);
target.style.scrollMarginTop = "0px";
target.style.scrollMarginLeft = "0px";
scroller.scrollTo(2000, 2000);
target.scrollIntoView({"block": "end", "inline": "end"});
expectedScrollPosition = [scroller.scrollLeft + 20, scroller.scrollTop + 20];
scroller.scrollTo(2000, 2000);
target.style.scrollMarginBottom = "20px";
target.style.scrollMarginRight = "20px";
target.scrollIntoView({"block": "end", "inline": "end"});
assert_equals(scroller.scrollLeft, expectedScrollPosition[0]);
assert_equals(scroller.scrollTop, expectedScrollPosition[1]);
}, "scroll-margin is taken into account when scrolling an inline element into view");
</script>