- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Mon, 11 Apr 2011 15:34:04 -0700
- 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 UTC