- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Fri, 06 Jun 2008 09:06:24 -0700
- To: fantasai <fantasai.lists@inkedblade.net>
- CC: robert@ocallahan.org, dbaron@dbaron.org, www-style@w3.org
fantasai wrote:
> Robert O'Callahan wrote:
>> How do flex-units on inline elements interact with text-align:justify?
>> E.g.
>> <div style="text-align:justify;">abcd efgh <span
>> style="padding:1*">Hello</span> ijkl mnop</div>
>> where there's a soft line break after 'ijkl'. Do the spaces get the
>> extra space, or does the flex get it?
>
> Flex should get it.
If line box contains element with flexes then free space will be
allocated to that element(s). Thus it will be no free space left
for text-align:justify distribution and so justification
can be omitted in this case.
>
>> How do vertical flex-units on inline elements interact with baseline
>> alignment? E.g. if I have <img style="height:1*">, that's supposed to
>> make the image height equal to the line-box height, but the image is
>> supposed to be baseline-aligned so the line-box height has to be
>> greater than the image height...
>
> No idea.
>
flex computation happens as a last step of layout process.
Line box that contains <img style="height:1*"> will be computed
as if no height:1* defined for the img (as if height:<undefined>).
On the final step that image will get height:1* computed to
the value equal to height of the line-box minus vertical paddings,
borders and margins of the image.
>> How do flex-units interact with collapsing margins? E.g.
>> <div style="overflow:auto; height:500px;">
>> <div style="height:1*; margin:1*;">Hello</div>
>> <div style="height:2*; margin:2*;">Kitty</div>
>> </div>
>> How does that work? Allocating flex height first and then collapsing
>> margins means the child divs don't fill the container. But trying to
>> collapse margins before resolving the flex heights seems crazy.
>
> I would collapse the adjacent flex margins so that 1* collapsing with
> 2* becomes a 2* gap. Then distribute the remaining space accordingly.
Correct. margin:1* collapse in the same way as margin:1em;
For flow:vertical (standard DIV layout) vertical margins are getting
collapsed. For flow:horizontal - horizontal margins are collapsed.
>
>> These are just a few of the questions that would have to be resolved.
>> A great deal of the CSS spec would have to be carefully analyzed for
>> interactions with flex-units, and many parts of the spec will become
>> even more complicated.
>
> I do agree with Andrew that it should be possible to flex margins.
>
I've implemented flex units already and did not find any conflicts
with existing CSS mechanisms. The only problem as I said earlier is
interaction with floats - flex computation happens after layout of
floats. For inline elements with flexes that is no problem.
But for the case:
<p style="margin:* 0">Here is float image <img align="right"/></p>
we will get bad results.
The only solution I can see is to declare blocks with flexes
or in flex contexts as layout roots so floats will be layouted
inside their content boxes (as in table cells currently).
---
In principle flex length units make obsolete following
proposed features of CSS3:
1) calc() thing is not needed as in most cases it can be replaced
by just 1* value. With min/max-width adjustment if needed.
2) box-sizing will be also not needed.
These two things are doubtful in any case so if it would
be better if we will forget about them completely.
--
Andrew Fedoniouk.
http://terrainformatica.com
Received on Friday, 6 June 2008 16:07:13 UTC