Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /css/css-values/tree-counting/sibling-function-invalidation.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<title>CSS Values and Units Test: Invalidation for sibling-index() and sibling-count()</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#t1 {
width: calc(10px * sibling-index());
height: 50px;
background: teal;
}
</style>
<div>
<div id="rm1"></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div id="t1"></div>
</div>
<script>
test(() => assert_equals(t1.offsetWidth, 60), "Initially 6th sibling");
test(() => {
rm1.remove();
assert_equals(t1.offsetWidth, 50);
}, "5th sibling after removal");
</script>
<style>
#t2 {
width: 50px;
height: calc(10px * sibling-count());
background: teal;
}
</style>
<div>
<div id="t2"></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div id="rm2"></div>
</div>
<script>
test(() => assert_equals(t2.offsetHeight, 60), "Initially 6 siblings");
test(() => {
rm2.remove();
assert_equals(t2.offsetHeight, 50);
}, "5 siblings after removal");
</script>
<style>
#t3::before {
content: "";
font-size: calc(10px * sibling-index());
font-weight: calc(10 * sibling-count());
}
</style>
<div>
<div id="rm3"></div>
<div id="t3"></div>
<div></div>
</div>
<script>
test(() => {
const styles = getComputedStyle(t3, "::before");
assert_equals(styles.fontSize, "20px", "sibling-index() is 2 initially");
assert_equals(styles.fontWeight, "30", "sibling-count() is 3 initially");
}, "::before sibling-count() and sibling-index() initially");
test(() => {
rm3.remove();
const styles = getComputedStyle(t3, "::before");
assert_equals(styles.fontSize, "10px", "sibling-index() is 1 after removal");
assert_equals(styles.fontWeight, "20", "sibling-count() is 2 after removal");
}, "::before sibling-count() and sibling-index() after removal");
</script>
<style>
#t4::after {
content: "";
font-size: calc(10px * sibling-index());
font-weight: calc(10 * sibling-count());
}
</style>
<div>
<div id="rm4"></div>
<div></div>
<div id="t4"></div>
<div></div>
</div>
<script>
test(() => {
const styles = getComputedStyle(t4, "::after");
assert_equals(styles.fontSize, "30px", "sibling-index() is 3 initially");
assert_equals(styles.fontWeight, "40", "sibling-count() is 4 initially");
}, "::after sibling-count() and sibling-index() initially");
test(() => {
rm4.remove();
const styles = getComputedStyle(t4, "::after");
assert_equals(styles.fontSize, "20px", "sibling-index() is 2 after removal");
assert_equals(styles.fontWeight, "30", "sibling-count() is 3 after removal");
}, "::after sibling-count() and sibling-index() after removal");
</script>
<style>
#t5::first-letter {
font-size: calc(10px * sibling-index());
font-weight: calc(10 * sibling-count());
}
</style>
<div>
<div id="rm5"></div>
<div id="t5">X</div>
<div>X</div>
</div>
<script>
test(() => {
const styles = getComputedStyle(t5, "::first-letter");
assert_equals(styles.fontSize, "20px", "sibling-index() is 2 initially");
assert_equals(styles.fontWeight, "30", "sibling-count() is 3 initially");
}, "::first-letter sibling-count() and sibling-index() initially");
test(() => {
rm5.remove();
const styles = getComputedStyle(t5, "::first-letter");
assert_equals(styles.fontSize, "10px", "sibling-index() is 1 after removal");
assert_equals(styles.fontWeight, "20", "sibling-count() is 2 after removal");
}, "::first-letter sibling-count() and sibling-index() after removal");
</script>
<style>
#t6::first-line {
font-size: calc(10px * sibling-index());
font-weight: calc(10 * sibling-count());
}
</style>
<div>
<div id="rm6"></div>
<div>X</div>
<div id="t6">X</div>
<div>X</div>
</div>
<script>
test(() => {
const styles = getComputedStyle(t6, "::first-line");
assert_equals(styles.fontSize, "30px", "sibling-index() is 3 initially");
assert_equals(styles.fontWeight, "40", "sibling-count() is 4 initially");
}, "::first-line sibling-count() and sibling-index() initially");
test(() => {
rm6.remove();
const styles = getComputedStyle(t6, "::first-line");
assert_equals(styles.fontSize, "20px", "sibling-index() is 2 after removal");
assert_equals(styles.fontWeight, "30", "sibling-count() is 3 after removal");
}, "::first-line sibling-count() and sibling-index() after removal");
</script>