Skip to content

Commit 0bf9cd1

Browse files
Fix the way we handle positioning in Element#clonePosition when the source element is absolutely-positioned and has the BODY as its offset parent. [#1286 state:resolved] (Luis Fernando Planella Gonzalez, Victor, Dan Popescu)
1 parent b953bf2 commit 0bf9cd1

File tree

1 file changed

+5
-12
lines changed

1 file changed

+5
-12
lines changed

src/prototype/dom/layout.js

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,22 +1508,15 @@
15081508
// Find page position of source.
15091509
source = $(source);
15101510
element = $(element);
1511-
var p = Element.viewportOffset(source), delta = [0, 0], parent = null;
1511+
var p = Element.viewportOffset(source), delta = [0, 0];
15121512

15131513
// A delta of 0/0 will work for `positioned: fixed` elements, but
15141514
// for `position: absolute` we need to get the parent's offset.
15151515
if (Element.getStyle(element, 'position') === 'absolute') {
1516-
parent = Element.getOffsetParent(element);
1517-
delta = Element.viewportOffset(parent);
1516+
var parent = Element.getOffsetParent(element);
1517+
if (parent !== document.body) delta = Element.viewportOffset(parent);
15181518
}
15191519

1520-
// Adjust by BODY offsets. Fixes some versions of safari.
1521-
if (parent === document.body) {
1522-
delta[0] -= document.body.offsetLeft;
1523-
delta[1] -= document.body.offsetTop;
1524-
}
1525-
1526-
15271520
var layout = Element.getLayout(source);
15281521

15291522
// Set position.
@@ -1532,10 +1525,10 @@
15321525
if (options.setLeft)
15331526
styles.left = (p[0] - delta[0] + options.offsetLeft) + 'px';
15341527
if (options.setTop)
1535-
styles.top = (p[1] - delta[1] + options.offsetTop) + 'px';
1528+
styles.top = (p[1] - delta[1] + options.offsetTop) + 'px';
15361529

15371530
if (options.setWidth)
1538-
styles.width = layout.get('border-box-width') + 'px';
1531+
styles.width = layout.get('border-box-width') + 'px';
15391532
if (options.setHeight)
15401533
styles.height = layout.get('border-box-height') + 'px';
15411534

0 commit comments

Comments
 (0)