- From: Håkon Wium Lie <howcome@opera.com>
- Date: Fri, 11 Jul 2008 21:48:19 +0200
- To: "Tab Atkins Jr." <jackalmage@gmail.com>
- Cc: "www-style@w3.org" <www-style@w3.org>
Also sprach Tab Atkins Jr.:
> Please indulge me in allowing me to repeat this in my own terms, as I've
> been trying to understand the page-layout voodoo magic for a while, and am
> just now getting a decent grasp of it (I hope).
>
> Page boxes are purely linear, without a hierarchical structure at all. Any
> hooks into them (such as :first and :left/:right) are determined solely by
> the adjacent page boxes -
Right.
> :first is defined as matching any page of that
> name which is directly preceded by a page of a different name.
That's what we are discussing. There are (at least) two options:
1) :first matches only the first page in a document
2) :first can be used with named pages and matches the first page in a page group
Your wording is, in fact, a third option. I'm arguing for 2) because I
want to style the first page of every chapter in a book, with this kind of markup:
<div style="page: chapter">...</div>
<div style="page: chapter">...</div>
> As long as a
> piece of content has the same page name as the previous piece of content
> (using the normal tree descent algorithm), it will fit into the same page
> box, generating new page boxes as necessary when there is too much to fit in
> a single box.
>
> So, this fragment:
> <div style="page: chapter"/>
> <div style="page: chapter"/>
> just generates a succession of pages named "chapter" without any way to
> distinguish between the page boxes generated by the first div and the page
> boxes generated by the second div (assuming the content of either div
> doesn't have any content with a different page specified). In fact, the
> first bit of content from the second div is likely to show up in the *same*
> page box as the last bits of content from the first div.
Yes. But it's also likely that explicit page breaks are set on these elements.
> Jacob seems to want there to be some way to distinguish the two, so that the
> second div establishes a *new* block of page boxes which create a page break
> between them and generate an additional match for the :first pseudo-class.
> In effect, he'd be asking for algorithm that groups together page boxes to
> *not* be based on page names, but merely on the *declaration* of a page
> name. Any page-name declaration would generate a new group of page boxes.
This is also an option, and it could be a good one. This way one would
avoid having to set the explicit page breaks. It's a more radical
proposal, though, as it would introduce page breaks where CSS2 didn't
have them.
> This does cause obvious problems with declarations like this, of course:
> <div style="page: chapter">
> <p></p>
> <p style="page: chapter"></p>
> <p style="page: chapter"></p>
> <p></p>
> </div>
> <div style="page: chapter"></div>
> How many different groups of page boxes are generated (and thus, how many
> page boxes would match a :first rule)? Traditionally, just one. A naive
> reading of Jason's rule would generate 5 (from first div to second p, second
> p itself, third p itself, fourth p to end of first div, second div). There
> are a few similar ways of excluding this case (treating some named page
> values as "auto" when an ancestor has the same page name), but I found upon
> writing them up that the differences are both subtle and significant (that
> is, hard to see but *important* to see), and so instead I'll just let Jason
> say how he would assume this example would render.
I'm neither Jason not Jacob, but I'd say 3 if we go along with Jacob's
proposal as you have written it up above.
> I think, though, that the complexity this adds in to the workings of page:
> is probably a bit excessive when you start trying to deal with children who
> may have the same page name. Explicitly grouping page boxes a la
> prince-page-group (in addition to the standard page box grouping defined
> purely by page name) is probably the correct solution, unless we find that
> the algorithm for excluding this is simple and serves virtually all cases,
> but doesn't break existing stuff.
Indeed, the Prince solution has been implemented and seems to work
fine if one can stomach another property. It's not very elegant, though.
> Currently, though, I'm with Fantasai in stating that as written this extra
> page box grouping goes directly against the current handling of page box
> groups.
-h&kon
Håkon Wium Lie CTO °þe®ª
howcome@opera.com http://people.opera.com/howcome
Received on Friday, 11 July 2008 19:49:00 UTC