- From: Simon Sapin <simon.sapin@exyr.org>
- Date: Fri, 14 Jun 2013 13:04:16 +0100
- To: www-style <www-style@w3.org>
Hi, I think we should generalize the !important syntax to enable more annotations of the same kind. We should do it now, even if we don’t define any such annotation yet. Immediate proposal: Change <any-value> in Variables to not accept a top-level '!' token. This reserves '!' in a declaration value followed by anything, for future extension. Later proposal: Instead of an "important" flag, declarations at the Syntax level have a set of "annotations". The order of annotations is not significant. Each annotation is a list of component values, like the declaration value. Parsing is changed so that in any declaration, a top-level '!' <delim> token ends the declaration value or current annotation and starts a new annotation, which continues until the next annotation or until the declaration ends (at a top-level semicolon, end of the current block/function, or EOF.) Expressed as a grammar: <declaration> = <declaration-name> <whitespace>* ':' <declaration-value> [ '!' <declaration-annotation> ]* <declaration-name> = <ident> <declaration-value> = <any-value> <declaration-annotation> = <any-value> <any-value> as in Variables, with top-level '!' also disallowed. The initial '!' or a token that ends the declaration are not part of the annotation. A declaration without any '!' token has no annotation (ie. an empty set.) An unknown or invalid annotation makes the declaration invalid and ignored, just like with declaration values. In CSS 2.1, Cascade L3 or Variables L1, the only know annotation is "important". It is only valid on property declarations that take part in the cascade. Future levels and other specs can define additional annotations. Rationale: We have ideas around for Variables L2 [1] that add annotations such as !default and !type(color) to Custom Property declarations. The "immediate proposal" makes sure that such declarations are invalid in Variables L1, rather than having annotations be part of the variable’s value. This maintains the rule that declarations using unsupported features are ignored. I think it’s important to do this before Variables L1 goes to CR. [1] See Tab’s last few slides in http://www.xanthir.com/talks/2013-06-14/ Even if we end up not defining new annotations ever, I think the impact of the "immediate proposal" on Variables L1 is small enough, and compatible with the current definition of !important. (There is no impact on other parts of CSS, since a new annotation is already invalid in other properties and descriptors.) The "later proposal" lays the ground work in Syntax for when we actually want to add new annotations, and can wait until then. The details are open to change. Cheers, -- Simon Sapin
Received on Friday, 14 June 2013 12:04:40 UTC