Re: [CSSOM] Searching/Navigating stylesheets

On 4/11/11 12:57 PM, Tab Atkins Jr. wrote:
> Possible Solution: Add elem.rules(), which returns a list of rulesets
> (CSSStyleRule) that apply to the element, ordered by decreasing
> specificity.

Gecko sort of has this internally.  Webkit exposes this to web content, 
sort of.  See the discussion in 
https://bugzilla.mozilla.org/show_bug.cgi?id=438278

There are a bunch of open questions involving user/ua sheets, cross-site 
stylesheets, etc that need to be answered before exposing this sort of 
thing to web content.

> Also, elem.rules(‘property’), which filters the rulesets
> to only include ones which actually set the particular property.

Note that this is not as useful as it may seem (e.g. elem.rules("color") 
has a good chance of not telling you anything useful).  It's not clear 
to me whether the usefulness outweighs the footgun potential.

> Possible Solution: Add an @id name; rule that can be added to
> declaration blocks, and a document.ruleByID(name) function which
> returns the ruleset with the given id.

Or rather a ruleset with the given id; presumably one that comes last in 
cascade order?  Again, the question of what to do for cross-site 
stylesheets remains.

> Possible Solution: Add a rule.disable() and rule.enable() to CSSRule,
> and rule.disable(‘property’) and rule.enable(‘property’) to
> CSSStyleRule, which “turn off” the ruleset or the specific property,
> and turn it back on again.  This could possibly be reflected by a
> !disabled value appended to the property.

This makes sense to me for rules.  I'm not sure about doing it on a 
per-property basis...

> Possible Solution: Allow declaration blocks to be selected with
> Selectors.  A stylesheet is a root node, rulesets are children (some
> types of rulesets, like media rules, can have more rulesets as
> children), and properties are attributes on the ruleset.  You could
> then easily find your custom property by doing something like:

This involves the parser doing "something" with properties it can't 
parse, right?  I'm somewhat opposed to this.  If you can't parse it, you 
have no idea how to expose it properly.  I do note you considered this.

> After all, the parser knows what the property's name was

That's not necessarily true, no.

> the error-handling implicitly looks for things that look like property
> names and values so it can skip over them properly.

No, the error-handling just looks for ';' not inside 
parens/brackets/quotes/etc.  It's pretty easy to create things that look 
nothing like allowed property/value pairs and that current CSS parsers 
skip over just fine; you'd need to define new CSS parsing rules to make 
this work at all.

-Boris

Received on Monday, 11 April 2011 21:45:11 UTC