W3C home > Mailing lists > Public > www-style@w3.org > February 2012

Re: [css3-values] RE: CSSStyleDeclaration#length and shorthands.

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Wed, 01 Feb 2012 16:01:26 -0500
Message-ID: <4F29A826.1090809@mit.edu>
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 GMT

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