W3C home > Mailing lists > Public > www-style@w3.org > January 2008

Re: [CSS 2.1] @charset, @import, and error recovery

From: Bert Bos <bert@w3.org>
Date: Mon, 28 Jan 2008 18:57:33 +0100
To: "www-style@w3.org" <www-style@w3.org>
Message-Id: <200801281857.34162.bert@w3.org>

On Sunday 27 January 2008 01:42, L. David Baron wrote:
> On Saturday 2008-01-26 14:59 -0800, Justin Rogers wrote:
> > "Any @import rules must precede all other rules (except the
> > @charset rule, if present)."
> >
> > Well that is clear. NO other rules are allowed, but what about
> > failed rules? Rules that don't make sense:
>
> I've always assumed that unknown or invalid rules don't count for
> this.  I think that's probably the most useful behavior for
> forward-compatibility.
>
> I think it's also reasonably clear in the spec, which says the
> following (note "valid"):
> # CSS 2.1 user agents must ignore any '@import' rule that occurs
> # inside a block or after any valid statement other than an @charset
> # or an @import rule.
> -- http://www.w3.org/TR/2007/CR-CSS21-20070719/syndata.html#at-rules

I agree. I think what the spec is trying to say is that there are no 
features in CSS level *2* that can come before an @import, but it says 
nothing about future extensions. Things that don't affect the cascading 
rules could in the future be added before the @import. Maybe we'll add 
an @copyright rule some day... (I think not, but for argument's sake.) 
The error handling rules of section 4.2 apply to such potential future 
extensions.

Thus,

    @charset "utf-8" foo bar baz;
    @charset "utf-8" foo bar baz;
    @import url(a.css);
    @import url(b.css) foo bar;
    @import url(c.css);

is equivalent to

    <empty line>
    <empty line>
    @import url(a.css);
    <empty line>
    @import url(c.css);

Because the first two @-rules are invalid. (Note that 'foo bar' is a 
valid media type, although currently unknown, and thus ignored.) And 
Justin's full example

    @charset "utf-8" foo bar baz;
    @charset "utf-8" foo bar baz;
    @page { }
    @media { }
    @import url(a.css);
    @import url(b.css) foo bar;
    @import url(c.css);

reduces to

    <empty line>
    <empty line>
    @page { }
    @media { }
    <empty line>
    <empty line>
    <empty line>

because the first two @-rules are invalid and the last three @import 
rules are ignored.

(There is a separate discussion about whether '@media' is valid without 
any keywords. Anyway, the '@page' rule certainly is valid.)

>
> I think it's also what Ian tests in test 61c in
> http://hixie.ch/tests/evil/css/import/extra/importafterimport.html
> which is part of http://hixie.ch/tests/evil/css/import/ .



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 Monday, 28 January 2008 17:57:47 GMT

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