- From: Andrew Fedoniouk <andrew.fedoniouk@live.com>
- Date: Sun, 31 Oct 2010 17:40:38 -0700
- To: François REMY <fremycompany_pub@yahoo.fr>, "Alex Mogilevsky" <alexmog@microsoft.com>, <www-style@w3.org>
-------------------------------------------------- From: "François REMY" <fremycompany_pub@yahoo.fr> Sent: Sunday, October 31, 2010 2:38 PM To: "Andrew Fedoniouk" <news@terrainformatica.com>; "Alex Mogilevsky" <alexmog@microsoft.com>; <www-style@w3.org> Subject: Re: [css3-grid-align] -- proposed new grid layout module > ?If I can add my 5 cents, too, I would like to say I don't like the > Template proposal anymore. While it seemed better at first glance, it adds > a lot of complexity and make it difficult to modify the style dynamicly > using a script. That is pretty easy to solve. For example in my implementation this flow : "1 1" "2 3"; is an equivalent of flow : "1 1|2 3"; so to set it from script you can use: element.style.flow = "1 1|2 3"; > > In fact, I don't think Template is easy at all. You say it's easier when > you move your objects in the DOM. I think it's not. What if you want to > put on a layout manager an element that previously had 'display: a' ? It > becomes a nightmare. You should check if the template defines an 'a' slot. > Then, you need to check if it's alreay used by another element. In such > case, you need to modify the CSS display property of your new element to > use another letter, which is not used in the defined template. At last, > you should parse the content of the 'display: "aaabbb/ccddee"' property > and add new line of a new column where you want to put your element. The > ECMAScript code needed to do something like that is incredibly big. And > you just wanted to add one column or one row to your display. > > Template display is also non-extensible. It does not work if you don't > know how many element you want to put on your grid. Then, you are also > limited to the 'usable' ASCII range. What if you end up with a grid layout > needing more than the available char range ? As I said I've ended up with use element indexes rather than named cells. So if you have defined: flow : "1 1" "2 3"; you can add in that container as many elements as you want. They will be added as if you have defined this: flow : "1 1" "2 3" "4 4" "5 5" ... "N N"; And so you can insert elements in the middle, etc. Numbers are also not limited by char ranges. But as I said flow:"template" is an exception - if you have list of items then it is better to use flow:horizontal[-flow] or flow:vertical[-flow]. Yet I've seen couple of cases where list items (<li>) by themselves use template layout inside. > > On the other side, the grid proposal is already implemented in some known > and widely used products and it's really easy to use. If you want to add a > row, you just need to add an element specifying that row index as > grid-row. If you want to delete the row, just drop the element. You don't > need to care about the template. It just works. I am not aware about any existing implementation of grid layouts in CSS except of mine. Will be interesting to take a look. Could you provide a link? > > And if you really want something fully written in CSS for your dynamic > grid layout, you can extend the use of 'counter' and allow something like > that : > > #myGrid div.labelColumn { > counter-increment: myGridRow 1; > counter-reset: myGridColumn 1; > grid-row: counter(myGridRow); grid-column: 1; > } > > #myGrid div.dataColumn { > counter-increment: myGridColumn 1; > grid-row: counter(myGridRow); > grid-column: counter(myGridColumn); > } But why not to use <table #myGrid> in this case? I believe that for tabular data as in your case it is exactly what doctor have prescribed, no? > > I don't think it's possible to do something like that with the Template > proposal. As I said it should be a system of various layout managers that better suit different cases. There is no silver bullet. And that is the point. E.g. in Java there are 8 layout managers available out of the box: http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html I have 7 implemented so far flow: vertical | vertical-flow | horizontal | horizontal-flow | grid | /*obsolete*/ stack | "template" all of them use flex units. This is a superset of layout managers found in Java. -- Andrew Fedoniouk http://terrainformatica.com > > Regards, > François > > -----Message d'origine----- > From: Andrew Fedoniouk > Sent: Sunday, October 31, 2010 9:58 PM > To: Alex Mogilevsky ; www-style@w3.org > Subject: Re: [css3-grid-align] -- proposed new grid layout module > > Well put, Alex! > > But here are my 5 cents as this appears close enough to my initial > flow:grid approach[2] to implement such a layout manager. > > The only difference in my case is that I am [re]using > left/top/right/bottom properties (they are not used in position:static) > for defining cell element binding to rows/columns. > > So this of yours: > #board { grid-column: 2; grid-row: 1; grid-row-span: 2 } > in my case is this: > #board { left: 2#; top:1#; bottom:2# } > where '#' is a special "grid location unit". > > My variant of defining bindings to rows/columns is very far from being > perfect. Yours appears as to be better but they share the same set > of problems. > > So all below is based on real experience using them and why > I've decided to drop this layout manager in favor of something close > to the Template[1]. > > At some point I've decided to add Drag-n-Drop support to > CSS. DnD in CSS is actually another and interesting story per se, > but for now is this: it raised some set of requirements that forced > me to revisit problem of grid alike layout[manager]s in CSS. > > 1) definition of a child of the Grid should not contain > grid positions like grid-column and grid-row in your case. > It is highly desirable to define layout in one place that you can > [re]define children flow on all-or-none basis. > Think about of moving #board element in runtime to different container > that uses its own grid layout. > > 2) Way of binding of elements to cells has to be as less error prone > as possible. E.g. it is too easy to get element overlapping with either > my flow:grid or display:grid of yours. > It is also very easy to get grids that will have e.g. only [1,1] and > [10,10] cells filled by some elements with the rest of the grid filled by > holes that still occupy space (due to the grid-columns). Grid > inconsistency > errors (overlapping and holes) are very easy to get and very hard to find > and maintain. > > 3) Dimensions of cells must be dependent only on > dimensions of elements in rows/columns. > If you have some element with min-width:150px placed > into column with grid-columns: 100px then it is not > clear who will win. Dimensions defined in two > different places, as an option, is bad as it is. > > 4) Ideally any layout manager shall keep congruency > of element position on screen and its position in the DOM. > E.g. if you have consequent elements A, B and C in the DOM then > B should be in between A and C visually. Vertically, horizontally or in > flow. > > For example DnD in flow:horizontal (e.g. tabs) containers. > In such layouts, for any given mouse location, task of finding > insertion DOM position of the element is trivial and > very predictable (for the user). > > In fact #4 is not only about DnD but also about text selection on the > page, tab[index] navigations, screen readers (accessibility) and so on. > I mean that the Grid layout must be used as an exception - as a last > resort when no other natural layouts are working. > > That means we ought to have *system* of layouts where the > Grid (in one form or another) is just one of them. > If we have a system of layout[manager]s then we shall try to unify > them. If all of them use flexes then we shall have flex units defined. > E.g. your proposal uses 'fr' units, David use "box-flex:" property and > Bert > use '*' for flexes in his proposal. > > And again about use of 'display' for defining layout managers. > I believe that we agreed already that it will not fly. > What if I want to layout *children* of display:listitem elements > using your grid layout? Or [inline-]table-cell? > > So far layouts like these: > http://www.interoperabilitybridges.com/css3-grid-align/CSS%20Grid%20Alignment_files/game-portrait.png > and > http://www.interoperabilitybridges.com/css3-grid-align/CSS%20Grid%20Alignment_files/game-landscape.png > we use templates with numbers - indexes of DOM elements: > > flow: "1 2" > "3 2" > "4 4" > "5 5"; > > flow: "1 4" > "2 4" > "3 5"; > > and flex units on width/height properties of cell elements. > > > [1] http://www.w3.org/TR/2007/WD-css3-layout-20070809/ > [2] http://www.terrainformatica.com/htmlayout/flow.whtm > > -- > Andrew Fedoniouk > > http://terrainformatica.com > > >>From: Alex Mogilevsky >>Sent: Tuesday, October 26, 2010 6:20 PM >>To: www-style@w3.org >>Subject: [css3-grid-align] -- proposed new grid layout module >> >> >>There is increased interest lately in layout mechanisms that are good for >>developing application UI. To address this interest, the IE team would >>like to explore a two-dimensional grid layout that is consistent with >>existing layout systems, while providing new capabilities using algorithms >>that are clean and well-defined. >> >>Attached [1] is a proposed specification for "grid alignment". >>It targets applications in the same space as Template Layout, Tables >>(historically and often inappropriately), Grid Positioning, and also >>multiple script solutions. >> >>The goal of this proposal is not to compete with existing modules, but >>rather add and integrate, to make progress towards something that is a >>good match for the target requirements, while also generating interest >>from multiple vendors. The particular syntax and behavior shows what the >>IE team would be interested in, but by no means are we settled on the >>details. >> >>We would like to present this proposal at the F2F. >> >>Looking forward to feedback and discussion. >>Alex >> >>[1] http://www.interoperabilitybridges.com/css3-grid-align/ > >
Received on Monday, 1 November 2010 00:41:19 UTC