<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>Initial backing position</title>
  <style type="text/css" media="screen">
    #parent {
      position: relative;
      height: 200px;
      width: 200px;
      border: 1px solid black;
    }
    
    #panel {
      position: absolute;
      height: 100px;
      width: 100px;
      left: -50px;
      top: -50px;
      opacity: 0.2;
      background-color: gray;
    }
    
    #piece {
      position: absolute;
      left: 50px;
      top: 50px;
      height: 60px;
      width: 60px;
      background-color: green;
    }
    
    #piece:hover {
      -webkit-transform: translate3d(0, 0, 0);
    }

    #piece.moved {
      -webkit-transform: translate3d(0, 0, 0);
    }

  </style>
  <script type="text/javascript" charset="utf-8">
    if (window.layoutTestController)
      layoutTestController.waitUntilDone();

    function startTest()
    {
      window.setTimeout(function() {
        var mover = document.getElementById('piece');
        mover.className = 'moved';
        
        window.setTimeout(function() {
          if (window.layoutTestController)
            layoutTestController.notifyDone();
        }, 0);
        
      }, 0);
    }

    window.addEventListener('load', startTest, false);
  </script>
</head>
<body>

  <div id="parent">
      <div id="piece"></div>
      <div id="panel"></div>
  </div>
  <p><a href="https://bugs.webkit.org/show_bug.cgi?id=26430">https://bugs.webkit.org/show_bug.cgi?id=26430</a></p>
  <p>Green box should not move when hovered</p>
</body>
</html>