[css-sizing][css-flexbox] intrinsic min/max-width/height values and percentage children

While reviewing this thread about flexbox percentage heights
<http://lists.w3.org/Archives/Public/www-style/2014Jun/0290.html> we
realized there's some interesting new interactions with the keywords
introduced by the Sizing module (and, indirectly, the
"min-height:auto" value introduced in Flexbox).

Previously, min/max-width/height was always a definite size: it didn't
depend on its contents.  (When it *would have* done so, such as
resolving a percentage min/max against an indefinite containing block
height, we instead reset it to its initial, definite, value.)
Therefore the min/max-width/height value on a parent didn't affect
whether it could resolve percentages on the child.

However, Sizing now adds min-content/max-content/etc keywords to
min/max-width/height, which are indefinite, intrinsic sizes, and
Flexbox's "min-width/height: auto" value implicitly relies on
min-content sizing as well. This means that a percentage-sized child
could be trying to resolve against an intrinsic size even when
'width/height' itself is definite.

What should happen in such a situation?

A. Have the percentage child size as for 'auto', as for intrinsic
'width/height' values on the parent? (This means that, by default,
percentage heights will never work on children of flex items, since
flex items have a default min-size calculation involving the
min-content height.)
B. Ignore the potential effects of the min/max size when resolve the
percentage? (This means the child may underflow/overflow the flex
C. Do a two-pass layout? (We already do this in some cases, like
percentage cross-sizes resolved against an indefinite flex container.
But note that stacked 2-pass layouts are O(n^2).)
D. Something else?

~TJ and fantasai

Received on Tuesday, 1 July 2014 16:34:06 UTC