W3C home > Mailing lists > Public > www-style@w3.org > February 2007

Re: Wrapping delimited lists, fluid rows

From: Daniel Beardsmore <public@telcontar.net>
Date: Sat, 24 Feb 2007 06:45:07 +0000
Message-ID: <45DFDEF3.5070305@telcontar.net>
To: www-style@w3.org

Andrew Fedoniouk wrote:
> In htmlayout engine (html/css engine) I've added two things
> for that:
> 1) attribute  flow: vertical | horizontal | h-flow | v-flow [1]
> 2) flex length unit: %% [2]
> 
> So to define let's say left-sidebar - content - right-sidebar
> layout that is stable for the content it is enough to say:
> 
> <div id="body" style="flow:horizontal">
>    <ul class="leftbar" ><ul>
>    <div class="content"></div>
>    <ul class="rightbar" ><ul>
> </div>
> 
> .leftbar , .rightbar
> {
>     width:20em;
>     height: 100%%; // full height of the #body content box
> }
> 
> .content
> {
>     width:100%%; // all space left from leftbar and righbar
>                            // in the #body content box
>     height: 100%%; // full height of the #body content box
> }
> 
> So this create expandable single row layout.
> There is no way in modern HTML/CSS to reproduce
> this except of using tables.
> 
> This is not exactly what you need but at least something
> that can replace table use cases. In some cases
> flex units (%%) can give even more than tables can handle.

Well, a single row is definitely NOT what I want, by *definition* of the term 
"grid" :-P

Now, h-flow seems much more in the right direction, but then, honestly, what's 
the difference between h-flow and inline-block? We're back to the same problem 
of trying to assign matching heights to every block in a row, something that is 
hacked up for us on our behalf by tables. Tables do NOT provide this (cf. 
vertical-align and height: auto) but the way tables draw borders pretends that 
all the cells are the same height for reasons of sanity.

Take away tables, and we're back at square one: no way to specify that 
successive blocks have the same height, without caring WHAT that height is. I 
don't care how tall they are (since the font size within them is a user choice 
and the text may wrap onto any number of lines) but I do care that they all match.

Your flow: horizontal example will work for a single row, because every "cell" 
element will be stretched to matching heights. This is pretty much how tables 
are visualised regardless of actual cell height. But likewise, the enforcement 
of a container element to butt containing elements against vertically, brings us 
back to enforced rows, i.e. a table.

The point I'm also making, as you may realise, is that a "fluid grid" is a 
virtual grid where as many cells fit on a row as will fit, simple as that. If 
each cell is 300 px wide, three will fit across a 1024 px wide screen, but two 
will fit across an 800 px wide screen. A table with three columns of 300px each 
will force the page wider than that 800 px wide screen (since the table will be 
at least 900 px wide) but a fluid grid will just wrap one column early.

The point is, that in most cases when it comes to galleries, no-one really cares 
how many cells fit across the window but tables (and flow: horizontal) force you 
to choose an arbitrary figure based on your ASSUMPTION of a safe screen size. 
(Even though there is no such thing)


Actually, none of this has anything to do with the subject line :P The first 
part is not related to the above at all. The second part was a realisation that 
delimited list wrapping and fluid grids are united in concept when it comes to 
decoration. After all, a fluid grid may desire such notions as row-ends, first 
row, end row and corners as regards decoration, but none of this exists in the 
HTML. A fluid grid with 25 cells is nothing more than 25 <div>s or 25 <li>s, and 
you won't know until render-time which ones are on the first and last rows, 
which are at the start and end of lines, and which are the five corners. (Don't 
forget that fluid grids have four or FIVE corners as you don't put in empty 
cells to pad out the final row like you do a table ;)
Received on Saturday, 24 February 2007 06:46:00 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:54:49 GMT