| <!DOCTYPE html> |
| <script src="../resources/text-based-repaint.js"></script> |
| <script> |
| function changePositionKeepingGeometry(id, newPosition) { |
| var target = document.getElementById(id); |
| var originalTop = target.offsetTop; |
| var originalLeft = target.offsetLeft; |
| target.style.position = newPosition; |
| target.style.top = originalTop + 'px'; |
| target.style.left = originalLeft + 'px'; |
| } |
| |
| function repaintTest() |
| { |
| changePositionKeepingGeometry('target1', 'absolute'); |
| changePositionKeepingGeometry('target2', 'absolute'); |
| changePositionKeepingGeometry('target3', 'fixed'); |
| } |
| onload = runRepaintAndPixelTest; |
| </script> |
| <style> |
| body { |
| margin: 0; |
| } |
| div { |
| width: 100px; |
| height: 100px; |
| top: 20px; |
| background-color: blue; |
| } |
| #target0 { |
| left: 20px; |
| position: relative; |
| } |
| #target1 { |
| left: 20px; |
| position: relative; |
| } |
| #target2 { |
| left: 220px; |
| position: fixed; |
| z-index: 0; |
| } |
| #target3 { |
| left: 420px; |
| position: absolute; |
| z-index: 0; |
| } |
| </style> |
| There should be no invalildations on change of position without actual change of position and size. |
| <!-- target0 ensures we don't strip anonymous wrappers (and trigger a layout) when the other elements change position. --> |
| <div id="target0"></div> |
| <div id="target1"></div> |
| <div id="target2"></div> |
| <div id="target3"></div> |