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

Re: [cssom-view] Why is body's offsetParent null ?

From: Anne van Kesteren <annevk@opera.com>
Date: Wed, 23 Apr 2008 14:01:44 +0200
To: "Mike Wilson" <mikewse@hotmail.com>, "'Www-style'" <www-style@w3.org>
Cc: "'Daniel Glazman'" <daniel.glazman@disruptive-innovations.com>
Message-ID: <op.t92bo6xn64w2qv@annevk-t60.oslo.opera.com>

On Wed, 23 Apr 2008 13:37:43 +0200, Mike Wilson <mikewse@hotmail.com>  
wrote:
>>    http://lists.w3.org/Archives/Public/www-style/2008Apr/0366.html
>
> That's only the current behaviour of Firefox you're talking about, right?

No, if we followed Internet Explorer we would have to introduce  
differences between quirks and standards mode which is currently a  
non-goal of the specification. We'd also have to figure out how hasLayout  
affects everything as explained in this blog post:

   http://annevankesteren.nl/2006/05/offset

I don't think we want to go anywhere near that.


> The Firefox algorithm is admittedly broken
> https://bugzilla.mozilla.org/show_bug.cgi?id=255754
> and according to Boris Zbarsky they are waiting for your IE reverse-
> engineering (done for this spec) before they do any changes or fix the
> bugs.

Initially it was indeed IE reverse-engineering though ultimately that  
didn't seem the most optimal solution for these attributes.


> The offset behaviour in (standards mode) IE, when you have
> position:relative on the body element, will give you both offset between
> body and viewport edge and between body and other elements:

Actually, it's not the viewport. It's the initial containing block origin.


> offsetParent for/in: IE7        CSSOM
> HTML                 null       null
>  BODY                null       null
>   div1(pos=rel)      BODY       BODY
>    div2a             div1       div1
>    div2b             div1       div1
>     div3a(pos=abs)   div1       div1
>     div3b            div2b      div1
>
> offsetLeft for/in:   IE7        CSSOM
> HTML(4m,2b,1p)       0          0
>  BODY(32m,16b,8p)    39         0
>   div1(4m,2b,1p)     12         67
>    div2b(32m,16b,8p) 33         33
>     div3b(4m,2b,1p)  12/div2b   61/div1
>
> Note 1: IE gives you both BODY's offset against viewport and div1's
>         offset against BODY while CSSOM skips over BODY.
>
> Note 2: IE gives an ideal offset and offsetParent chain that will work
>         with any recursion wherever it stops.
>         (although ignoring most things on the root element)
>
> Note 3: IE honors the Containing Block algorithm for div3b for its
>         offsetParent choice.
>
> I think the above IE algorithm would be much preferred compared to the
> broken FF algorithm that CSSOM partly derives from.

I agree that some of this is more desirable and initially I thought it  
would be more like that, but I don't think it's worth going in this  
direction because:

   1. Emulating IE completely is not feasible anyway given hasLayout.
   2. This requires a different code path for quirks mode making browser  
unnessarily more complicated as better solutions for authors are available.
   3. This special cases the root element instead which is arguably  
somewhat of an improvement, but not much.
   4. This would be incompatible with three out of four browsers.


-- 
Anne van Kesteren
<http://annevankesteren.nl/>
<http://www.opera.com/>
Received on Wednesday, 23 April 2008 12:01:59 GMT

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