- From: Tab Atkins Jr. <jackalmage@gmail.com>
- Date: Fri, 29 Mar 2013 16:30:57 -0700
- To: Bjoern Hoehrmann <derhoermi@gmx.net>
- Cc: www-style list <www-style@w3.org>
On Thu, Mar 28, 2013 at 5:03 PM, Bjoern Hoehrmann <derhoermi@gmx.net> wrote: > Hi, > > Regarding <http://www.w3.org/TR/2013/WD-css-variables-20130312/>: > > Section 1.1 says "This module defines a new type of primitive value, > the variable, which is accepted by all properties." I think something > more elaborate is required here; consider for instance that DOM Level > 2 Style considers font descriptors "properties" that can be accessed > using `getPropertyValue` and friends. That's a misuse of the term, but one that's limited to the OM side. If a clarification is needed, it's in the OM; otherwise, CSS is clear that properties and descriptors are different things (though they're both declarations). > In section 1.2 the text > > Other CSS modules may expand the definitions of these value > types: for example [CSS3COLOR], when combined with this module, > expands the definition of the <color> value type as used in this > specification. > > seems confused, for one thing, the css-variables proposal does not > actually use the <color> type. It seems the text can be removed. This is part of our boilerplate. I'll amend it to be more theoretical, so it doesn't imply that this spec actually uses <color>. > In section 2 > > A custom property is any property whose name is composed of "var-" > followed by an <ident> [CSS3VAL] Custom properties are solely for > use by authors and users; CSS will never give them a meaning beyond > what is presented here. > > There is a full-stop missing after "[CSS3VAL]". The referenced version > of "CSS Values and Units Module Level 3" does not actually explain the > `<ident>` symbol. Hm, that's a mistake on our part. Too bad we *just* published a new CR. ^_^ I'll just refer to "identifier" instead. > The reference to <ident> is misleading, the author- > defined part of the name would not be a token on its own; say something > like 'A custom property is any property whose name starts with "var-"' > instead. Nope, the part after "var-" needs to conform to the <ident> grammar, so you can use it as a bare value in the var() function. I've reworked this a little bit to be clearer that it's not a token on its own, but it must conform to the token's grammar. I've also added an example a bit further down that illustrates it. > Example 1 makes surprising use of `var(...)` which hasn't been defined > or otherwise been mentioned before. There should be at least a forward > reference in the prose preceding the example like "Variables are refer- > enced using the `var(...)` notation" with a corresponding link. Done, in that first example. > The Example 1 style sheet code seems to lack the `var-` prefix. Weird, fixed. > In Example 1, avoid phrases like "tons of edits", and "in the project" > should probably refer to "web page" or "web site" or somesuch concept. Done. > In section 2, > > Custom properties have an extremely permissive value grammar. The > <value> in its grammar corresponds to the "value" production in CSS > 2.1 Chapter 4.1 [CSS21], while <CDO> and <CDC> correspond to the > tokens of the same name from the same chapter (they represent HTML > comments showing up in CSS text - "<!--" and "-->"). This is a very > technical way of saying that nearly anything can be used in the value > of a custom property, save unmatched closing brackets ("]", ")", or > "}"), a top-level semicolon (as it will end the property), a > "!important" that's not at the end, or invalid tokens (such as > BAD_STRING and BAD_URL). > > This should simply say that the value of custom properties can be any > value that the core syntax allows ... plus cdo and cdc. There is no > value in discussing the other bits here. If the text is kept, there > would have to be some changes, like clarifying what `a "!important" > that's not at the end` is. Sure. > Further, the value of a custom property must retain its original > author-given casing, unlike most CSS values which can be safely > lower-cased (because most of CSS is case-insensitive in the ASCII > range). (This requirement does not apply when a custom property's > value is substituted into another property via a variable.) > > This text should be rewritten to remove the parentheticals, among > other things. I gather the idea is to say that value of custom pro- > perties is case-sensitive up until it's re-interpreted as part of a > proper property value, but that is not coming across well. I've tried rewriting it a bit to make the intent clearer. > Example 3 encourages authors to put script code into style sheets. > That strikes me as a very bad idea. Without clarification that this > script code will never be executed by the browser unless authors let > custom scripts evaluate it this also seems rather misleading. Find > something else to use in the example, or at the least make it some > arithmetic expression rather than using control flow statements. I think that I already clarify exactly that, with the text implying that this is only useful if acted on by JavaScript. > In section 2 > > There are an infinity of custom properties, but the initial value > of a custom property is an empty invalid value. This means that, > until a custom property is explicitly defined otherwise by a style > sheet, it defines an invalid variable. > > I would expect readers to have trouble understanding what the purpose > of the text in its current context is. It seemingly define what the > `var(...)` notation evaluates to, rather than anything to do with the > declaration mechanism that's the subject of the section, so perhaps it > would be better placed in the section on `var(...)`. You're right. I've rewritten it to be more clearly just about the custom property, and left a note about it having a special interaction with 'var()'. > In section 4.2 text like "invoke getPropertyValue() by passing varName > as its argument, and return the returned value." does not adequately > define the required behavior e.g. when the `getPropertyValue` member > has been replaced if that is possible. The text also isn't really clear > on what you call the method or what happens if the call does not return > a value but rather throws an exception (which can happen e.g. under low > memory conditions). > > The draft seems to normatively depend on "cssom" but fails do identify > that dependency in the References section. It's not clear to me whether extending CSSOM interfaces implies a normative dependency on CSSOM or not. Technically, if you don't implement CSSOM at all, you can just ignore these sections and still have a valid variables implementation. > In Example 13 "The following lines of script all return something > useful" should be rephrased (lines do not return things). Those > following lines invoke a `print()` function. Given what the `print` > method of the `window` object does in web browsers, something else > should be used instead. I would suggest to use a table with the > ecmascript expression, corresponding value, and a column for notes. Done! I like this a little better than what I had. ~TJ
Received on Friday, 29 March 2013 23:31:46 UTC