- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Mon, 31 May 2010 20:26:46 -0700
- To: "Brad Kemper" <brad.kemper@gmail.com>
- Cc: "Tab Atkins Jr." <jackalmage@gmail.com>, "Zack Weinberg" <zweinberg@mozilla.com>, <www-style@w3.org>
--------------------------------------------------
From: "Brad Kemper" <brad.kemper@gmail.com>
Sent: Monday, May 31, 2010 10:30 AM
To: "Andrew Fedoniouk" <news@terrainformatica.com>
Cc: "Tab Atkins Jr." <jackalmage@gmail.com>; "Zack Weinberg"
<zweinberg@mozilla.com>; <www-style@w3.org>
Subject: Re: [css3-flex] calc(flex) and concept of free space.
>
> On May 30, 2010, at 8:00 PM, Andrew Fedoniouk wrote:
>
>> Anyway, tell me better what would be the width of inner div here:
>>
>> <div width:1000px padding-left:1fx>
>> <div width:calc(500px + 1fx) />
>> </div>
>>
>> Something tells me it will get zero, correct?
>
> The flex units are based on distributing the space of the children of
> flexboxes. So, even if these two DIVs had flexbox parents, they are two
> different generations, and the flex of one distributes space from a
> different pool than the other. So, the '1fx' of the outer DIV depends on
> how much space is available in its parent flexbox (if that is a 1000px,
> based on your other examples, then the padding would be 0). The 1fx on the
> inner DIV is meaningless unless the outer one is 'display:flexbox',
> otherwise it is distributing a 500px (1000 - 500) to itself.
>
>
Terribly sorry. Forgot to add box-sizing:border-box there.
So the question looks like:
<div width:1000px padding-left:1fx box-sizing:border-box>
<div width:calc(500px + 1fx) />
</div>
What would be the width of inner div?
In other words what exactly that preferred width means?
Another question:
<div width:1000px box-sizing:content-box>
<div #flexible width:calc(500px + 1fx) >
<div width:800px />
</div>
</div>
What would be the width of div#flexible ?
This one is not that simple as it looks at first glance.
Compare it with this one:
<div width:1000px box-sizing:content-box>
<div width:500px >
<div width:800px />
</div>
</div>
In my implementation of flex algorithm all elements that
it operates behave as if they are defined as display:table-cell -
their content never overflows.
To be precise I have special 'overflow:none' value that
tells the engine that the element must not overflow.
That is in principle what display:table-cell is doing under the hood.
Only explicit overflow:visible declaration in my case allows
elements to overflow.
Here is an example that can be observed in either Sciter or HTMLayout:
Just comment/un-comment that overflow:visible to see the effect.
<html>
<head>
<style>
div#flexbox
{
flow:vertical; // triggers flex computations
size:*; // width/height = 1fx
}
div#flexchild
{
size:*; // width/height = 1fx
margin:*; // flex margins, 1fx - positioned in the middle
border:3px solid;
/*overflow:visible;*/
}
span#float
{
display:inline-block;
background:gold;
border: 3px solid red;
width:300px;
}
</style>
</head>
<body>
<div #flexbox>
<div #flexchild>
<span #float>float</span>
text for testing purposes
</div>
</div>
</body>
</html>
Flex elements should either to behave as display:table-cells or
it is better to introduce overflow:none; that has a good value
by itself.
E.g. you may change that div#flexchild to this:
div#flexchild
{
size:50%; // width/height = 50% - "fixed" width.
margin:*; // flex margins, 1fx - positioned in the middle
border:3px solid;
/*overflow:visible;*/
}
And to play with overflow:visible; again.
--
Andrew Fedoniouk
http://terrainformatica.com
Received on Tuesday, 1 June 2010 03:27:15 UTC