- From: Boris Zbarsky <bzbarsky@MIT.EDU>
- Date: Wed, 01 Feb 2012 16:01:26 -0500
- To: Glenn Adams <glenn@skynav.com>
- CC: www-style@w3.org
On 2/1/12 3:50 PM, Glenn Adams wrote:
> 1. On query operations (e.g., getting cssText, length,
> invoking item,
>
> getPropertyValue, etc.), does ElementCSSInlineStyle.style
> represent
> *only* the declarative content of @style? *OR*
> 2. On query operations, does ElementCSSInlineStyle.style
> represent the
>
> UA's so-called "specified values" [1] state of all
> properties that
> do or could apply to the element? i.e., the results of
> applying the
> cascading and inheritance steps of the property resolution
> process?
>
>
> Depending on what you mean by "declarative content", the aswer is
> either #1 or "neither".
>
>
> By "declarative content" I mean the value returned by cssText, i.e., the
> CSS declaration block decoded from or encoded into the value of @style.
Those are different things. The cssText is a string, but the
declaration block is an object. You can have lots of "equivalent"
declaration blocks with slightly different initial text representations...
> If we give priority to that declarative content, then it may argue for
> having length/item match only those declarations returned by cssText.
> However, if we give priority to the UA's state, then it may permit that
> them not to match (e.g., due to shorthand expansion). Further, if we
> adopt the latter, then the question remains as to whether the queried
> values should in any way reflect the cascading or inheritance process.
They shouldn't. Doing that would in fact not be web-compatible.
> For example, say we have:
>
> <body style="border-width: 1px">
> <div style="border-top-width: 2px">
>
> then is {div}.style.cssText =>
> "border-top-width: 2px; border-right-width: 1px; border-bottom-width:
> 1px; border-left-width: 1px;"
> [i.e., cssText returns corresponding longhand components with cascading
> and inheritance having been applied]
Border widths don't inherit by default. Your example would be better
with something like color. And as I said, web sites depend on
inheritance and cascading NOT taking place for div.style (as opposed to
.currentStyle which contains the post-cascading style).
> Is this observable?
>
> just asking the question of whether there should be a documented
> expectation about presence or absence of such behavior; at the (video)
> frame level, it could be observable
I don't see how; you can't require the entire rendering pipeline (parts
of which are outside the control of the CSS implementation, because the
OS manages them) to have a certain behavior.
> it could be observable in
> performance or interleaving of the effects of mutation;
I'm not sure what you mean. Example, please?
> so which of these do you think is the right answer?
I already said that earlier in this thread: I think length() should
return the number of longhand properties that are set in the declaration
and item() should iterate the longhand properties. That's a simple
behavior to define (modulo the fact that the current CSS spec has no
actual concept of "set in the declaration"). The only drawback is
forward-compat as properties that used to be longhands become shorthands....
-Boris
Received on Wednesday, 1 February 2012 21:01:56 UTC