- From: David Hyatt <hyatt@apple.com>
- Date: Mon, 16 Jun 2008 16:03:57 -0500
- To: www-style list <www-style@w3.org>
- Message-id: <3D7136EB-2358-4943-8E43-D6DE897A507E@apple.com>
I have been working on an implementation of CSS Variables for a while, and these are the comments I have so far on the draft at http://disruptive-innovations.com/zoo/cssvariables/ (1) In section 4.1, the grammar is incorrect. LBRACE is part of both "variables" and "variableset", when it needs to only be declared in one of them. (2) In section 5.3, removeVariable is specified as raising an exception, but no mention is made of when or why it would raise one. (3) In section 5.4, CSS_VARIABLE is specified as having a value of 4. This conflicts with the value used for INITIAL in WebKit. We could probably move INITIAL to 5, but it might be worth thinking about how to handle DOM conflicts when CSS drafts all want to proceed along a standardization track at their own pace (and may all want to add new rule types and value types). (4) The CSSVariable interface needs to be removed. The CSSVariable interface's existence greatly complicates *everything*. (a) It can appear as a component of a compound value. It will make the implementation extremely difficult if I have to actually parse complex values like text-shadow while hanging on to CSSVariable values for pieces of that value. (b) An actual media context must be given in order to perform variable lookups. The CSSVariable interface can't simply have a CSSValue "value" attribute, since that value is media-dependent. To resolve these two issues, I think it would be much better to simply have a CSSVariableDependentValue interface (CSSUnresolvedValue?) that represents the entire "unresolved" right-hand side of a property/value pair. It would look something like this: interface CSSVariableDependentValue : CSSValue { CSSValue getResolvedValue(stylesheets::MediaList mediaList); } This makes life much easier for implementors. You can basically store unresolved information (either the original string, or a "half-parsed" set of terms/expressions). Resolving the value consists of replacing the variables with real values (using the correct media query) and completing the parse. (5) The draft makes no mention of where @variables rules fit in relation to @namespaces. The order needs to be specified. I suggest saying @variables occur before @namespaces. (6) The draft makes no mention of whether variable lookups occur using every variable defined on the document or only variables that occurred earlier in a depth first parse of the stylesheets. I believe it's much easier (and more intuitive for authors) if lookups occur using every variable available for the current media (since dynamic re- evaluation when methods like setVariable get called would be much more problematic otherwise). dave (hyatt@apple.com)
Received on Monday, 16 June 2008 21:04:46 UTC