- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Wed, 04 Jun 2008 17:50:30 -0700
- To: www-style@w3.org
L. David Baron wrote:
> I'd like to move forward with publishing the flexible box model as a
> working draft. There have been specs floating around for years, but
> it's never been published on the TR page (despite, I believe, a
> minuted group resolution to do so at one point).
>
> I think the newest draft is
> http://xulplanet.com/ndeakin/xul/specs/flexbox.html . (There's also
> an older draft at
> http://www.damowmow.com/temp/csswg/old/ui/flexbox.html .)
>
That appears as a bit overcomplicated for such simple thing.
And yet it does not solve basic UI cases.
Consider following markup:
<body>
<div>On the top</div>
<div>On the bottom</div>
</body>
and we would like to "stick" second div to the bottom and first one to
the top of the view. How would you
accomplish that with XUL flexes? Probably I have missed something but
that is impossible with XUL flexes.
XUL flexes are about flexible dimensions but what about paddings and
margins ?
Flexibility is really a length unit rather than some property.
Let's imagine that we have in CSS following:
1) 'flow' attribute with the values: 'vertical' | 'horizontal' |
'vertical-flow' | 'horizontal-flow' | 'grid'
2) flex length units: N* where '*' is a name of the unit - flex.
So by having this task to style task above is trivial:
body
{
height: 1*; /* takes full all available height of the container */
}
div:first-child
{
margin-bottom: 1*; /* insert "spring" between first element and the
rest */
}
Simple and human readable I would say.
Now if you want to position element in the middle of its container then
you would do:
#in-the-middle { margin:1*; width:25%; height:25%; }
And if you want it to be slightly offset to the right/bottom you would
define:
#almost-in-the-middle { margin: 2* 1* 1* 2*; width:25%; height:25%; }
That famous three column layout is also simple:
<body>
<div>Left side bar</div>
<div id="content">Content</div>
<div>Right side bar</div>
</body>
And styles:
body {
width: 1*;
height: 1*;
flow:horizontal; /* all children form single row */
}
body > div
{
height:1*; /* all children have the same height equal to height of
the row -
so to the tallest element */
width: max-intrinsic; /* or some other fixed size */
}
body > div#content
{
width:1*; /* content spans space left from left and right sidebars
in the body */
}
So single attribute and one length unit will cover significantly more
cases than what is defined
here: http://xulplanet.com/ndeakin/xul/specs/flexbox.html.
--
Andrew Fedoniouk.
http://terrainformatica.com
Received on Thursday, 5 June 2008 00:51:25 UTC