- From: Andrew Fedoniouk <news@terrainformatica.com>
- Date: Sun, 24 Jun 2007 22:29:08 -0700
- To: "James Elmore" <James.Elmore@cox.net>, <www-style@w3.org>
>> >> [1] http://java.sun.com/j2se/1.4.2/docs/api/java/awt/BorderLayout.html >> [2] http://www.terrainformatica.com/htmlayout/flow.whtm >> [3] http://www.terrainformatica.com/htmlayout/fspu.whtm >> >> > This is similar to what I was calling a 'list' in my original post. I > considered that, currently, HTML only allows blocks to stack vertically > (unless they are inline blocks and then they may wrap or other undesirable > behavior). I would like to have a layout ability in CSS (display-mode) > that allows users to toggle this behavior between horizontal and vertical. > Embedding blocks, which have horizontal stacking ON, within a second > block, with vertical stacking ON, would allow grid-like layouts, or things > similar to your example. I will attempt an ASCII drawing of what I am > thinking. I apologize in advance for the crudeness of the diagram. > > <!-- this block uses the standard HTML layout: blocks stacked > vertically --> > ------------------------------------------------------------------------------- > | <!-- this block stacks blocks side by side --> > | > | |---------------------------------------------| > | > | | BLOCK1: BUTTON | BLOCK2: BUTTON | ... | > | > | |---------------------------------------------| > | > | <!-- this block also stacks horizontally, but it fills the screen > width --> | > | > |-------------------------------------------------------------------------| > | > | | <!--vertical block1--> <!--vertical block2--> <!--vertical block3--> > | | > | | |--------------------| |--------------------| > |---------------------| | | > | | | BLOCK3: | | | | > | | | > | | | | | | | > | | | > ... Fill left block with menu items, center block with text, right block > with images. Or flow text between center and right block. When finished, > close > second horizontal block and place a third one for a footer, if desired. > ... > | | |--------------------| |--------------------| > |---------------------| | | > | > |-------------------------------------------------------------------------| > | > | <!-- final block, with copyright or page number --> > | > | |-------------------------------------------------| > | > | | Copyright, 2007, by James Elmore | > | > | |-------------------------------------------------| > | > |------------------------------------------------------------------------------| > > Proposed (theoretical, possibly incomplete) HTML/CSS: > > <style> > .vert { display-mode: list-vertical; } > .horiz { display-mode: list-horizontal; } > .center { margin-left: auto; margin-right: auto; } > .wide { width: 100%; } > .thin { width: 33%; } > </style> > ... > <div class="vert"> > <form class="horiz center"> > <button>BLOCK1: BUTTON</button> > <button>BLOCK2: BUTTON</button> > ... > </form> > <div class="horiz wide"> > <ul class="vert thin"> > <li>BLOCK3:</li> > ... > </ul> > <div class="vert thin"> > <p>Text to fill vertical block2 goes here.</p> > <p>More text.</p> > <p>This stuff is stacked inside vertical block2 > just the way it would inside a body or other HTML > element. > </p> > </div> > <div class="vert thin"> > <img ... /> > <img ... /> > <!-- images are stacked in vertical block3 --> > </div> > </div> > <h2 class="center">Copyright, 2007, by James Elmore</h2> > </div> > > With this suggestion, <div> can be used, but so can any other block type > element (e.g., <form>, <ul>, <h2>) simply by setting their display-type to > list-horizontal or list-vertical. List-vertical is the usual HTML/XHTML > block filling mode. List-horizontal has table-like properties, where the > elements may control the width of the parent block, or the parent block > may cause the children to widen, to fill the space. > > It would take hours to give complete details, so I will stop here. > Interested parties may extend the thread or contact me directly so I don't > bore those not interested in my views of Advanced Layouts. > > James, first of all name 'display-mode' is already taken by CSS3 [1] And second your 'display-mode: list-horizontal' is exactly my flow: horizontal. So I will use 'flow' instead of 'display-mode' below. ( I also have flow: h-flow - multi-row layout when 'clear' attribute allows to break blocks explicitly on rows. This is close to 'float' but different as only-blocks-inside model introduces concept of free space so flexes can be used. ) I think that your idea of 'display-mode: list-horizontal' just demonstrates that it is very needed. Problem is that 'flow' by itself is not enough. It should be accompanied by flex units too. Think about HTML tables - what they would be without their peculiar dimensional attributes and algorithms. Currently flex units exist in CSS but implicitly: width: auto is exactly width:* for block elements. Something like: { width: XXpx; margin-left: auto; margin-right: auto; } is a direct equivalent of { width: XXpx; margin-left: *; margin-right: *; } ('auto' has other meanings in other context in CSS - this is why I prefer to use * units) flow + flex units allows to reproduce all layouts that are possible only by tables currently and give much more. As a real example: Screen layout of this application uses solely flows and flexes: http://en.wikipedia.org/wiki/Norton_Internet_Security - no tables there at all. My engine works in extreme conditions when HTML/CSS is used for UI layout purposes of desktop applications so this flow and flexes are the must. I think that standard CSS will also benefit from these features. BTW: Mozilla/XUL also has a concept of flexes that is incarnated there as 'flex' XUL attribute[2] but I think having flexes as a length units is, well, more flexible. Its concept is simple and implementation is I would say trivial. I belive that in the shed of HTML5 light it is a good time to introduce something like flow and flexes as some layout constructs there cannot be presented without flow and flexes. Andrew Fedoniouk. http://terrainformatica.com [1] http://www.w3.org/TR/css3-box/#L706 [2] http://developer.mozilla.org/en/docs/XUL:Attribute:flex
Received on Monday, 25 June 2007 05:30:04 UTC