Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title> CSS Scroll Snap 2 Test: scroll-start-*</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<style>
.spacer {
width: 500px;
height: 500px;
border: solid 1px green;
}
legend {
background-color: #000;
color: #fff;
padding: 0px 0px;
}
input {
margin: 0rem;
}
.scroller {
width: 100px;
height: 100px;
border: solid 1px black;
overflow: scroll;
padding-block-start: 0px;
padding-block-end: 0px;
}
</style>
<fieldset id="scroller" class="scroller">
<div class="spacer"></div>
</fieldset>
<script>
let scroller = document.getElementById("scroller");
// fieldsets' clientHeight and scrollHeight can be affected by the presence of
// a scrollbar which has been anecdotally measured to be 15 on several
// platforms.
const scrollbar_width = 15;
const max_vertical_scroll_offset = scroller.scrollHeight -
scroller.clientHeight;
// The fieldset's width is set based on the size of its contents:
// "For the purpose of calculating the min-content inline size, use the
// greater of the min-content inline size of the rendered legend and the
// min-content inline size of the anonymous fieldset content box."
// So only bother checking vertical scrolling as the adjusted width might
// not permit horizontal scrolling.
let test_cases = [
{
scroll_start: "100px 200px",
expectation: {
scrollTop: 100,
msg: "scroll-start: <length> sets initial scroll position",
}
},
{
scroll_start: "25% 75%",
expectation: {
scrollTop: 0.25 * max_vertical_scroll_offset,
msg: "scroll-start: <percent> sets initial scroll position",
}
},
{
scroll_start: "calc(50px) calc(75px)",
expectation: {
scrollTop: 50,
msg: "scroll-start: <calc> sets initial scroll position",
}
},
{
scroll_start: "start",
expectation: {
scrollTop: 0,
msg: "scroll-start: start sets initial scroll position",
}
},
{
scroll_start: "center center",
expectation: {
scrollTop: 0.5 * max_vertical_scroll_offset,
msg: "scroll-start: center sets initial scroll position",
}
},
{
scroll_start: "end end",
expectation: {
scrollTop: max_vertical_scroll_offset,
msg: "scroll-start: end sets initial scroll position",
}
},
{
scroll_start: "top top",
expectation: {
scrollTop: 0,
msg: "scroll-start: top sets initial scroll position",
}
},
{
scroll_start: "bottom bottom",
expectation: {
scrollTop: max_vertical_scroll_offset,
msg: "scroll-start: bottom sets initial scroll position",
}
},
{
scroll_start: "1000px 2000px",
expectation: {
scrollTop: max_vertical_scroll_offset,
msg: "scroll-start is clamped",
}
}
];
async function resetScroller(scroll_start) {
scroller.style.display = "none";
assert_equals(getComputedStyle(scroller)["display"], "none");
scroller.style["scroll-start"] = scroll_start;
scroller.style.display = "block";
assert_equals(getComputedStyle(scroller)["display"], "block");
assert_equals(scroller.style.scrollStart, scroll_start);
}
async function test_scroll_start(scroll_start, expectation) {
await resetScroller(scroll_start);
assert_approx_equals(scroller.scrollTop, expectation.scrollTop,
scrollbar_width, expectation.msg);
}
promise_test(async () => {
for (let test_case of test_cases) {
await test_scroll_start(test_case.scroll_start,
test_case.expectation);
}
}, "scroll-start sets default position of fieldset element");
</script>
</body>