| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <title>Cyclic percentages in min-width and min-height</title> | |
| <link rel="help" href="https://drafts.csswg.org/css-sizing-3/#cyclic-percentage-contribution"> | |
| <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/10969"> | |
| <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. | |
| // See https://github.com/w3c/csswg-drafts/issues/10969 | |
| 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> |