W3C home > Mailing lists > Public > www-style@w3.org > August 2006

Re: [css-layout] Syntax for CSS3 Advanced Layout

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
Message-Id: <200608081427.27815.bert@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 GMT

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