- From: L. David Baron <dbaron@dbaron.org>
- Date: Sat, 8 Mar 2008 08:24:52 -0800
- To: Anne van Kesteren <annevk@opera.com>
- Cc: www-style@w3.org
On Saturday 2008-03-08 10:54 +0100, Anne van Kesteren wrote: > On Sat, 08 Mar 2008 06:56:11 +0100, L. David Baron <dbaron@dbaron.org> > wrote: >> What Firefox is doing is the following: >> >> @media all { >> /* ok, we're inside an @media rule, so we parse declaration blocks */ >> @ >> /* well, this is the beginning of an invalid selector, so we have >> to parse until we hit the end of the declaration block, that >> is, until we hit an { and then the matching } */ >> } >> /* not a {, so keep looking for the { to start our declaration block */ >> /* ... same for all remaining tokens in the style sheet */ >> >> I can't find anything that says what @media rules are supposed to >> have in them, but this seems to match the spec, now that I think >> about it. > > I figured this was the reasoning. So is the reason this does not violate > > http://www.w3.org/TR/CSS21/syndata.html#block > > that you're trying to form an at-rule token and therefore the matching { } > pair is not actually a matching pair but the closing curly brace is part of > a token? No, it's definitely not part of a token. The tokenizer is quite clear. What's happening is that after the "@" we're parsing an invalid selector. When we're parsing an invalid selector, we recover after we find a "{" and then a matching "}" (a declaration block). When we hit the "{", we're looking for a "{" so it doesn't actually match anything. If you want Firefox to recover after "@media all { @ }" it will if you write "{ } }". The "{ }" is the declaration block it's looking for, and the final "}" closes the @media rule. -David -- L. David Baron http://dbaron.org/ Mozilla Corporation http://www.mozilla.com/
Received on Saturday, 8 March 2008 16:25:25 UTC