- From: Bert Bos <bert@w3.org>
- Date: Thu, 3 Jul 2008 12:04:35 +0200
- To: "www-style@w3.org" <www-style@w3.org>
[I added css3-page to the subject line, because it's not really about CSS 2.1 anymore.] On Thursday 03 July 2008 02:41, Grant, Melinda wrote: > Bert Bos said: > > On Wednesday 25 June 2008 09:38, Bjoern Hoehrmann wrote: > > > * Justin Rogers wrote: > As you may recall, we took the decision here (member-only link): > http://lists.w3.org/Archives/Member/w3c-css-wg/2007OctDec/0267.html > and announced it here: > http://lists.w3.org/Archives/Public/www-style/2007Nov/0119.html. Per > my action item, I modified the css3-page grammar to call out > explicitly that @page is allowed in @media. (I don't remember > discussing whether or not to require the semi-colon.) Those are two different issues, I think. The @page inside @media was never a problem, syntax-wise. It's a difference in *semantics* between level 2 and level 3 and which has been planned since a long time. The CSS 2.1 spec is often not easy to read, but I'm sure that there is consensus that, in Justin's original example[1], Firefox's parsing is correct and Opera's is not. The margin boxes inside @page are a different issue. Unlike @media, @page was never designed to contain more than declarations. Everything that's put inside @page in level 3 thus has to keep on looking like a declaration. Which means, concretely, that it has to be separated from level 2 features by a semicolon. [1] http://www.w3.org/mid/00BD06E707F60B4F9D6A3E75C712209D53DBA74D41@NA-EXMSG-C104.redmond.corp.microsoft.com > > There is an alternative proposal, which might be better in > > light of the fact that those nested @-rules are going to be > > allowed in level 3. That proposal is to add no > > clarifications, but change the grammar in appendix G, with > > the argument that it is in error, because it forbids > > something that isn't forbidden by any text in the > > specification. The media rule would then become: > > > > media > > > > : MEDIA_SYM S* medium [ COMMA S* medium ]* > > > > LBRACE S* [ ruleset | media | page ]* '}' S* > > ; > > > > A potential practical problem is that it would make current > > implementations that ignore @page inside @media > > non-conformant and would delay CSS 2.1 until we have > > sufficient implementations again. > > (Unless we promise not to test nested @page for now...) > > There are at least three shipping implementations that support @page > inside @media. That means it's actually possible to relax the grammar in appendix G and still exit CR. Hmm, this solution is starting to look better... > > Is it too late for a different syntax for margin boxes? E.g., > > rewriting example V in 3.5.1: > > > > @page ::top-left { ... } > > @page ::bottom-center { ... } > > > > @page :left ::left-middle { ... } > > @page :right ::right-middle { ... } > > > > @page :left ::bottom-left-corner { ... } > > @page :right ::bottom-right-corner { ... } > > @page :first ::bottom-left-corner { ... } > > @page :first ::bottom-right-corner { ... } Just for completeness, here is another, shorter syntax. This is what I (incorrectly) believed to be in Paged Media: @top-left { ... } @bottom-center { ... } @left-middle :left { ... } @right-middle :right { ... } @bottom-left-corner :left { ... } @bottom-right-corner :right { ... } @bottom-left-corner :first { ... } @bottom-right-corner :first { ... } > The nested bracketed syntax for margin boxes has been in this spec > ever since it was first published nine years ago. It's been through > several review cycles, including two last calls and a CR. Several > implementations have been shipping this for years. Making radical > changes now would be very harsh, and I think would send a very > harmful message. > > In my mind, the viable choice is between keeping the requirement for > the separating semi-colon (and thereby risking having the > implementations we need) and removing that requirement (which > apparently leaves us with forward parsing compatibility issues). I blame myself for not looking at how those margin boxes were actually written. My (lame) excuse is that, knowing how much Håkon was interested in Paged Media, I didn't need to. I only checked a few things in detail, such as that centered boxes were really centered and that margin boxes could have multi-line content. :-( So, if we can't pull margin boxes outside of the @page block anymore, then we'll unfortunately have to accept semicolons. The only way to avoid the semicolons, I think, is to require instead that all margin boxes must come *after* all declaration. Thus this is wrong: @page { @top-left {content: "Chapter 1"} /* WRONG! */ margin: 0 } and this is correct: @page { margin: 0; @top-left {content: "Chapter 1"} } 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 Thursday, 3 July 2008 10:05:24 UTC