W3C home > Mailing lists > Public > www-style@w3.org > March 2009

Re: layout idea

From: Andrew Fedoniouk <news@terrainformatica.com>
Date: Sat, 14 Mar 2009 11:49:13 -0700
Message-ID: <49BBFC29.80800@terrainformatica.com>
To: David Hyatt <hyatt@apple.com>
CC: Jonathan Snook <jonathan.snook@gmail.com>, www-style@w3.org
David Hyatt wrote:
> On Mar 13, 2009, at 7:51 PM, Andrew Fedoniouk wrote:
> 
>>
>> In any case positioning and type of layout management are quite 
>> different entities -
>> layout manager defines the way how elements are being replaced in 
>> *normal/static* flow. IMO of course.
> 
> Yeah that's true.  It does feel like a grid should be a normal flow 
> entity, and positioning something relative to rows/columns could just be 
> done using position:absolute still.
> 
> dave
> 

We've got some practical experience in using flow:grid in a year or so 
and here are some thoughts about it:

There are practical cases when you would want to have
element replaced in a cell but be position[ed]:relative at the same
time - say shifted in 1px from its normal in-grid position.

That leads to the requirement: position of the element in a grid  - its
"cell coordinates" - should not use any attributes or values used by the
position: and friends.

Second: it is highly desirable for the flow:grid feature to
support partial declarations. I mean here following:

Consider this markup:

<ul #two-columns-list>
   <li>cell 1.1</li>
   <li>cell 1.2</li>
   <li>cell 2.1</li>
   <li>cell 2.2</li>
   ....
</ul>

And the styling:

ul#two-columns-list { flow:grid; }

ul#two-columns-list > li:nth-child(odd)
{
   left: 1#;  // a.k.a. 1gr
   right: 1#; // elements go to first column
}
ul#two-columns-list > li:nth-child(even)
{
   left: 2#;
   right: 2#; // elements go to second column
}

This setup will replace list items in a grid
having two columns.

As you see neither number of rows nor cell row
positions are specified. flow:grid manager
is able to deduce calculated values of
top/bottom:auto; values.

Currently flow:grid layout uses following rules
of resolving 'auto' in left/top/right/bottom of its children:

   left:auto -> left:1#
   right:auto -> right: <max-column-no>
   top:auto -> top: <current-row-no>
   bottom:auto -> bottom: <current-row-no>

That allows to mix 'normal' blocks with 'cells':

<div style="flow:grid">
   <div .col-1> Cell 1.1 </div><div .col-2> Cell 1.2 </div>
   <p>Some text here</p>
   <p>Some other lorem ipsum here</p>
   <div .col-1> Cell N.2 </div><div .col-2> Cell N.2 </div>
</div>

with styles:

div.col-1 { left:1#; right:1# }
div.col-2 { left:2#; right:2# }

you will get something like this:

| Cell 1.1 | Cell 1.2 |
|---------------------|
| Some text here      |
|---------------------|
| Some other lorem    |
| ipsum here          |
|---------------------|
| Cell N.2 | Cell N.2 |


-- 
Andrew Fedoniouk.

http://terrainformatica.com
Received on Saturday, 14 March 2009 18:49:51 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 17:20:17 GMT