- From: Paul Duffin <pduffin@volantis.com>
- Date: Tue, 22 Jan 2008 10:41:26 +0000
- To: www-style@w3.org
All, I have some comments and questions regarding the Working Draft http://www.w3.org/TR/2002/WD-css-style-attr-20020515. I have looked at the W3C member pages for any updates to it but cannot find any, possibly because I just don't know where to look. So if these have already been covered then please could you refer me to the resolution. 1) I noticed that the draft is very old, 2002, so was wondering what the plan was for this specification. Is it still being worked on, has it been abandoned, or superceded, ... ? Hopefully it is still active in some way as I am interested in implementing full support for it but need to be sure that what I do is 'standard'. The rest of my questions assume that it is active. 2) There appears to be an ambiguity in the grammar between the inline-ruleset and the stylesheet productions as they can both match the following string ":hover {color:red}" but depending on which one does the effect will be different. i.e. if inline-ruleset matches then it only applies to the current element but if stylesheet matches then it applies to the current and all nested elements. The conflicting productions are listed below for convenience. It is obvious that the inline-ruleset matches and stylesheet matches as follows: stylesheet -> ruleset* -> selector LBRACE S* declaration [ ';' S* declaration ]* '}' S* -> simple_selector -> pseudo+ inline-stylesheet : S* [ declarations | declarations-block | inline-ruleset* | stylesheet ] ; inline-ruleset : [ pseudo* S* [ ',' S* pseudo* S* ]* ]? declarations-block ; stylesheet : [ CHARSET_SYM STRING ';' ]? [S|CDO|CDC]* [ import [S|CDO|CDC]* ]* [ [ ruleset | media | page ] [S|CDO|CDC]* ]* ; ruleset : selector [ COMMA S* selector ]* LBRACE S* declaration [ ';' S* declaration ]* '}' S* ; selector : simple_selector [ combinator simple_selector ]* ; simple_selector : element_name [ HASH | class | attrib | pseudo ]* | [ HASH | class | attrib | pseudo ]+ ; pseudo : ':' [ IDENT | FUNCTION S* IDENT? S* ')' ] ; As I see it there are two ways around this. The first is to require that an inline-ruleset always has to start with a declarations-block (possibly empty), followed by any optional pseudo attributes, or another at-rule is added, say @scoped {stylesheet} to contain the scoped stylesheet. The first option seems to require less effort to specify, slight modification to grammar rules, and an example, but is a bit less obvious about what is happening than @scoped. The new grammar would look like: inline-stylesheet : S* [ declarations | declarations-block inline-ruleset* | stylesheet ] ; Example: The following style attribute contains a scope stylesheet that applies to the element and all its children. <div style=":visited {color: green} :hover {background: yellow} :visited:hover {color: purple}"> <a href="/Style/CSS">Styled By Containing Style Attribute</a> <a href="/Style/CSS">Styled By Containing Style Attribute</a> <a href="/Style/CSS">Styled By Containing Style Attribute</a> </div> If in future a combination of style sheet and inline-ruleset is required then inline-ruleset could be extended to allow @scoped {} or something different. 3) It references CSS 2 instead of CSS 2.1 to define the specificity of CSS in a style attribute and they are different. I presume that CSS 2.1 as the later specification is correct, as it is also referenced from CSS 3.
Received on Tuesday, 22 January 2008 10:42:07 UTC