Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<meta charset="utf-8">
<title>Cyclic percentages in min-width and min-height</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<style>
#outer {
display: inline-block;
border: 5px solid;
padding: 3px;
}
#inner {
min-width: calc(100px + 50%);
min-height: calc(100px + 50%);
border: 2px solid cyan;
}
</style>
<div id="outer">
<div id="inner"></div>
</div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
const innerBorder = 4;
const outerPadding = 6;
const bp = innerBorder + outerPadding;
// Intrinsic contributions should treat cyclic percentages equally in both axes.
test(
() => assert_equals(outer.clientWidth, outer.clientHeight),
"Axis consistency of intrinsic contributions",
);
// The spec says that the intrinsic size contributions should resolve cyclic percentages
// in min size properties against zero, so here we should expect 110px.
// However, most browsers just ignore the mininum in that case, resulting in 10px.
test(
() => assert_in_array(outer.clientWidth, [0 + bp, 100 + bp]),
"Intrinsic contribution for width",
);
test(
() => assert_in_array(outer.clientHeight, [0 + bp, 100 + bp]),
"Intrinsic contribution for height",
);
// Regardless of how browsers treat cyclic percentages, once the size of #outer is known,
// #inner should re-resolve its inline-axis percentage against the containing block,
// but not re-resolve its block-axis percentage.
test(
() => assert_equals(inner.clientWidth, 100 + 0.5 * (outer.clientWidth - outerPadding)),
"Final size for width",
);
test(
() => assert_equals(inner.clientHeight, outer.clientHeight - bp),
"Final size for height",
);
</script>