[CSSOM] Interaction of getBoundingClientRect/getClientRects with transforms

How should getBoundingClientRect/getClientRects (which assume that the 
element they're called on decomposes into a set of axis-aligned boxes) 
interact with transforms?

For a simple testcase of a single transformed div with the functions 
called on it, Gecko reports the rect the div would have if the transform 
were not applied.  Webkit and Presto seem to report a bounding client 
rect for the transformed div (so for the case of a 100x100 px square 
rotated 45deg clockwise about the bottom-left corner they report 142px 
width and height and 29px top).  See testcase at end of mail.

The spec probably needs to say what the right behavior is here.  (And of 
course also for offset* and whatnot, but at the moment I'm more 
concerned about getClientRects.)

-Boris

<!DOCTYPE HTML>
<html>
   <head>
     <script>
       window.onload = function () {
         var n = document.getElementById("x");
         var rect = n.getBoundingClientRect();
         alert("getBoundingClientRect: " + rect.width + "x" +
                rect.height +
               " at " + "(" + rect.left + ", " + rect.top + ")");
       }
     </script>
   </head>
   <body style="margin: 0; padding: 0;">
     <div id="x"
          style="-moz-transform: rotate(45deg);
                 -moz-transform-origin: bottom left;
                 -webkit-transform: rotate(45deg);
                 -webkit-transform-origin: bottom left;
                 -o-transform: rotate(45deg);
                 -o-transform-origin: bottom left;
                 width: 100px; height: 100px; background: green"></div>
   </body>
</html>

Received on Tuesday, 31 August 2010 12:58:21 UTC