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

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

From: Alan Gresley <alan@css-class.com>
Date: Thu, 24 Apr 2008 01:22:16 +1000
Message-ID: <480F5428.4010908@css-class.com>
To: Anne van Kesteren <annevk@opera.com>
CC: Mike Wilson <mikewse@hotmail.com>, 'Www-style' <www-style@w3.org>, 'Daniel Glazman' <daniel.glazman@disruptive-innovations.com>

Anne van Kesteren wrote:

> 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:


Simple then, don't allow quirks mode. Only allow the offset behavior to 
work in standards mode.


>   http://annevankesteren.nl/2006/05/offset
> 
> I don't think we want to go anywhere near that.


How does of offsetLeft and offsetTop have any thing to do with hasLayout 
in this case. In your case giving hasLayout to the outer div causes the 
inner div margin edge to be offset against the content/padding edge of 
the outer div and not its' border edge. We offset against the parent, 
not particular parts of the parent. So content edge equal padding edge 
which equals border edge.


[...]
>> 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.


What part of Mike chain does hasLayout come into play?.


>   2. This requires a different code path for quirks mode making browser 
> unnessarily more complicated as better solutions for authors are available.


No more quirks mode. Why are you wishing to support this mode. The 
author should be coding for standard mode only or not using CSSOM at all.


Alan
Received on Wednesday, 23 April 2008 15:23:03 GMT

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