W3C home > Mailing lists > Public > www-style@w3.org > April 2011

Re: [CSSOM] Searching/Navigating stylesheets

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Mon, 11 Apr 2011 15:34:04 -0700
Message-ID: <4DA381DC.5030209@mit.edu>
To: "Tab Atkins Jr." <jackalmage@gmail.com>
CC: www-style list <www-style@w3.org>
On 4/11/11 3:25 PM, Tab Atkins Jr. wrote:
> Yup.  getMatchedCSSRules exposes this information, but in reverse
> order (least specific first), which is kinda annoying.  Plus, it has
> same frustrating call pattern as getComputedStyle, where the function
> is defined on window and takes the element as an argument.

I should note that this call pattern reduces web compat risks compared 
to adding new short-named properties on elements.  For example, we've 
already had a number of web compat bug reports on Gecko from adding 
.list on form controls.

>> 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.
>
> Hm, I'm probably just being dumb here and missing something obvious,
> but why does this have a good chance of not telling you anything
> useful?

Consider this testcase:

<style>
   div { color: purple; }
</style>
<div>
   <span id="x">Some text</span>
   <script>
     alert(document.getElementById("x").rules("color").length)
   </script>
</div>

Does the alert show "0", as I would expect?  If not, why not?

>> 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.
>
> Not sure whether it should be the first or last thing with a given id.

Well, "last" would be the one that affects the element you care 
about.... modulo !important, of course.

>   Getting the first matches HTML's multiple-id behavior, but getting
> the last matches CSS's usual behavior when overriding things.  I
> suspect grabbing the last is the better answer.

Right.

> For cross-domain stylesheets, same answer - they'd be ignored for the
> purpose of this function.

OK.  I think this is going to make this API very very fragile, esp. 
whenever a CDN is involved....

>> This makes sense to me for rules.  I'm not sure about doing it on a
>> per-property basis...
>
> Editors like Webkit's Inspector or Firebug allow you to shut down
> individual properties in a ruleset.

I'm not sure we need to burden the core CSSOM and style system with that 
edge case, though.  The number of such editor implementations in the 
world is _very_ small, and they all rely on non-public APIs and will 
continue to do so (e.g. they do need to show the cross-site style rules).

> Ah, kk.  Webkit's Inspector does indeed attempt to parse invalid CSS
> as an unknown property/value pair, and displays it.  For example, if I
> create a document with<div style="foo:bar;"></div>  and inspect the
> element, I'll see a "foo:bar" property there flagged as invalid.

And if you have:

   <div style="foo & bar: baz"></div>

?

> The additional parsing rules should be relatively trivial - just split
> the invalid content at the first ':'

Modulo parens, etc, etc, etc, right?

Note that this could still break depending on what CSS syntax looks like 
in the future...

> If the content preceding the colon matches the property-name production

That's a pretty fundamental assumption, yes.

-Boris
Received on Monday, 11 April 2011 22:34:35 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 17:20:39 GMT