W3C home > Mailing lists > Public > www-style@w3.org > March 2008

RE: [cssom-view] small update

From: Mike Wilson <mikewse@hotmail.com>
Date: Wed, 19 Mar 2008 11:44:36 +0100
Message-ID: <BAY116-DAV10B35E5CADA00A6B41704AA4070@phx.gbl>
To: "'Anne van Kesteren'" <annevk@opera.com>, "'Www-style'" <www-style@w3.org>
Message-ID: <006001c889ae$39f8f170$0a01a8c0@mikedeskxp>

Hi Anne,

Before diving into the previous subjects I'd like to discuss how to 
standardize features that are invented by one vendor and later copied 
by the other vendors, as this seems to be a central question here.

"Post" standardization of a feature should only change things if 
something was obviously broken in the original design, and can easily 
be interpreted to be not in the authors' intent.

If, apart from this kind of corrections, other vendors choose to make 
incompatible changes when copying the feature, then this should render 
bug reports in their respective bug handling systems, and not be input 
for standardization.

The issues we are discussing here with IE's behaviour can not be seen 
as anything else than design choices, and thus should make it into the
spec.

> Thanks! The one piece that seems to be missing here is quirks 
> mode. The specification intents to deal with quirks mode, limited 
> quirks mode, and no quirks mode, as defined by HTML 5.

I'm a bit suprised to hear compatibility with quirks mode being 
presented as a major argument in a standards discussion :-). HTML5 
defines how to detect quirks mode, which is fine, but if any serious 
attempt is to be made to be compatible with quirks mode regarding 
element positions (as is the subject of offset* props) then you also
need to standardize IE's old broken box model, block-displayed IMG:s, 
ignoring padding for IMG:s etc.

It is true that IE has differing behaviour for offset* props between
std and quirks mode, but that doesn't make it more right to 
standardize on the quirks behaviour. The browsers that have copied 
only the quirks mode behaviour regarding HTML/BODY choice should have 
bugs filed. Note f ex that Konqueror is doing the right thing with 
switching HTML/BODY depending on std/quirks.

Being a W3C specification I think these properties should be described 
for standards mode and that other browser vendors should comply to 
this behaviour. Then adding handling for quirks mode is a marketing 
decision to be taken by each browser vendor, and should be handled
outside of W3C as long as other crucial parts of quirks mode is not
standardized.

Alternatively, if these properties are to be regarded as a heritage
from the old dark ages of quirks mode, then the described (quirks)
behaviour can be kept but only when the browser enters quirks mode
(you should reference this in the spec). In standards mode the props
should then be made unavailable.

> > 1) CSSOM differs from IE by letting div1 point to BODY instead
> >    of HTML.
> >
> >    Q: What was the rationale for this change? (I agree that it
> >       is "cleaner" not to special-case children of BODY to
> >       instead point to HTML, but IE is the mother of these
> >       properties so...)
> 
> The rationale is that it's more consistent with non-IE 
> browsers and that it also works for quirks mode.

Fine, I interpret this as compatibility with deployed content and 
deployed browsers is a major goal. Here's my take on that:
- The browsers to mainly consider for compatibility is IE, Firefox, 
  and Safari, due to either having a substantial market share or being
  natively installed in OS installations. Certainly there are a number
  of other fine browsers (including Opera), but these should have
  lower priority.
- IE today has 60-80% of the traffic (depending on who you ask).
- Considering that the offset* properties appeared in Firefox and 
  Safari after year 2000, we can be certain that majority of deployed 
  content using them takes IE into account as being the most used 
  browser since then.
- Firefox's offset* implementation has been broken during most of its
  existence (thanks Garrett for the link!).
- Deciding to change IE's behaviour in favor of compatibility with 
  non-IE browsers gives me the impression that you are counting
  browser implementations instead of deployed installations to 
  achieve compatibility. Using the most important browsers from above,
  this is what we have:
    IE:     inventor of offset* props, both std and "quirks" mode.
    FF:     implements a broken variant of "quirks mode" offset props.
    Safari: appeared in 2003, implements "quirks mode" offset props.
  The net result of the current CSSOM spec is that IE and FF both
  will have to change their algorithms to adapt to Safari (which has
  a market share below 3%).

With these facts at hand I would suggest not taking the risk to 
deviate from IE's behaviour, even though the changes may seem 
harmless to some.

> >    Q: Did you consider using the CB algorithm for offsetParent
> >       and were there any hard problems?
> 
> It would not be consistent with any browser. Even IE deviates 
> from it as you illustrate.

Oh sorry, here I meant keeping IE's special-casing for HTML/BODY
while using CB for remaining elements (which I agree wasn't clear 
from the context I put it in). 
So what I meant is did you find any other deviations from CB
in IE's offsetParent algorithm (standards mode) ?

And if not, don't you see an advantage in reusing an existing 
parent reference instead of inventing a new one, especially when
it is also compliant with IE's behaviour in standards mode?

> >    Q: Have you considered CSSOM's deviation with IE for div3b
> >       above or is it something that needs to be fixed in the
> >       spec?
> 
> I don't consider it a bug in the specification. The specification
> as is works with deployed content and works well in both quirks 
> and no quirks mode. That's really all that matters as far as 
> offset* is concerned, in my opinion.

Wouldn't a closer adherence to IE's behaviour also "work well in 
both quirks and no quirks mode", or even better? As you say, this 
is what matters.

Regarding the deviation for div3b, we get more of this kind of
thing in IE's quirks mode as it is different again:

offsetParent for/in: IE7/std   IE7/quirk  CSSOM   [CB]
HTML                 null      null       null    ICB
 BODY                null      null       null    HTML
  div1(pos=rel)      HTML      BODY       BODY    BODY
   div2a             div1      div1       div1    div1
   div2b             div1      div1       div1    div1
    div3a(pos=abs)   div1      div2b      div1    div1
    div3b            div2b     div2b      div1    div2b

So, while CSSOM is inspired by quirks mode for HTML/BODY it 
breaks its offsetParent behaviour for most lower nested elements,
resulting in not being fully compatible with anything else than
Firefox and Safari (of the major browsers).

I am getting the feeling that the real major goal for the CSSOM
spec is to be compatible with offset* deviations implemented by
non-IE browsers, independently of the impact on deployed content?

> > 3) As can be seen in both tables IE returns useful values for
> >    BODY's offsetLeft property while CSSOM hardwires it to 0.
> >
> >    Q: What was the rationale for this deviation from IE's
> >       behaviour?
> 
> This is because the HTML body element is special and not the 
> HTML html element. (In the CSSOM specification anyway.) If we'd 
> give "meaningfull" results for the HTML body element scripts 
> that try to determine their position would go hopelessly wrong, 
> because when offsetParent points to the HTML body element offset 
> are given with respect to the initial containing block origin 
> and not the padding edge of the HTML body element.

Ah right, this is an effect of having offsetParent==BODY mean ICB.
In IE this is similar but on the |HTML| element instead 
(offsetParent==HTML means ICB and HTML always returns offset=0).

> The root element can be positioned just like any other element.

Right. Currently this has no effect in IE or FF but well, things 
might change in the future.

> >    [Btw it seems everybody is using margin edge instead of
> >    padding edge when measuring from the |HTML| element]
> 
> And that's not inconsistent? 

Of course it is; this is exactly the reason why I mentioned 
it :-/.

And to sum up; please note that I am not an IE fanboy ;-) I swear 
over IE at times just as much as anybody else. But I think the 
"IE bashing contest" gets out of control at times and I encourage 
a more pragmatic approach.

Best regards
Mike
Received on Wednesday, 19 March 2008 10:45:20 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 27 April 2009 13:55:02 GMT