- From: Bert Bos <bert@w3.org>
- Date: Tue, 8 Aug 2006 14:27:27 +0200
- To: William Birchenough <bircheno@apk.net>, www-style@w3.org
On Sunday 06 August 2006 20:54, William Birchenough wrote: > I have been pondering the Advanced Layout working draft since its > publication. Clearly, this sort of layout functionality could be > important for simplifying the specification of complex layouts. On > the other hand, the proposed syntax concerned me. Finally, though, I > put my finger on *why* it concerns me. Armed with my new > self-knowledge, I come to the list with a proposal... > [...] > My concern is that the syntax appears very general > (using ordinary, unadorned strings and characters) while applying to > a specific situation (this particular template-based layout). I find > this nonintuitive, but more importantly, it might limit the extension > of CSS for future levels. [...] > > On a similar note, I propose a comma-delimited syntax for > /display-model/ over the current space-delimited syntax. [...] > (For > example, what about specifying minimum and maximum row heights? Or > using a keyword to declare a stationary slot?) I find > > display-model: template ("a@@" 10em 30% fixed, "@@@", "@@b" 10em > 30%, 20% * 20%); > > slightly easier to understand than > > display-model: template ("a@@" (10em 30%) fixed "@@@" "@@b" (10em > 30%) 20% 80% 20%); > > although others' mileage, of course, may vary. I had this syntax, with template() and commas (but without min/max), in an earlier, unpublished version, but finally decided that the parentheses weren't needed and just made the line longer. But taste may vary and I have nothing against template(). It's true that the comma helps to group the row and its height together. The working group is still looking at other syntaxes (including ones based on @-rules or external template files instead of properties) but so far none has come up that convinced everybody. About min/max (and the same holds for other extensions, such as backgrounds and borders): My idea is that the templates should be as simple as possible and not provide anything that can be achieved in other ways, unless those other ways are really cumbersome. You can already set min/max-height properties on elements and that may be enough. E.g., the height of a row with 'intrinsic' height is already automatically constrained by the max-heights of all elements in that row. div {display: "abc" intrinsic; min-height: 4em} p#a1 {position: a; max-height: 10em} p#a2 {position: b; max-height: 8em} p#a3 {position: c; max-height: 12em} Assuming there are no other elements than those, the template has an implicit maximum height of 12em (and an explicit minimum height of 4em). Of course, that is less powerful than your proposal, where you can say that a row is the same height as all other rows up to a certain maximum. But we also have Media Queries and at least the case where the template's size depends on the screen size can be captured with those. There are several different ways one can imagine distributing available space over the rows and columns. Some may already be possible, some others may be necessary, yet others may be interesting, but not necessarily worth the effort. The current draft provides three simple ways that I believe are all necessary: 1) fixed size 2) fixed ratios between slots (i.e., each slot is a fixed percentage) 3) intrinsic size, up to the available space (like in tables) Here are some other ways: 4) linear functions: the height of each slot i is a_i + b_i x, where a_i and b_i are constants and x is chosen such that sum(a_i + b_i x) = the total height of the element. (This is what XUL does, with b_i given by the "flex" attribute.) 5) any of the above, combined with min/max sizes. 6) other linear functions: there is likely to be a calc() functional notation in CSS3, to make linear expressions over different units, e.g., calc(20% + 1em - 2px) to make something that is 1/5 of the total height, plus the size of the current font minus 2px. 7) non-linear functions... (6) is likely to happen automatically, because calc() may be used basically everywhere where a length is required. So no special syntax extension is necessary within the templates. Bert -- Bert Bos ( W 3 C ) http://www.w3.org/ http://www.w3.org/people/bos W3C/ERCIM bert@w3.org 2004 Rt des Lucioles / BP 93 +33 (0)4 92 38 76 92 06902 Sophia Antipolis Cedex, France
Received on Tuesday, 8 August 2006 12:27:35 UTC