From 4c8cbbaa4f33495bb070cbfd393d23672b6405fd Mon Sep 17 00:00:00 2001 From: James N Date: Wed, 10 Jun 2020 07:36:15 +1000 Subject: [PATCH 1/2] fix(getContainingBlock): check html in while loop --- src/dom-utils/getOffsetParent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dom-utils/getOffsetParent.js b/src/dom-utils/getOffsetParent.js index f64a8fe726..34c1c69448 100644 --- a/src/dom-utils/getOffsetParent.js +++ b/src/dom-utils/getOffsetParent.js @@ -23,7 +23,7 @@ function getTrueOffsetParent(element: Element): ?Element { function getContainingBlock(element: Element) { let currentNode = getParentNode(element); - while (getNodeName(currentNode) !== 'body') { + while (['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { if (isHTMLElement(currentNode)) { const css = getComputedStyle(currentNode); From 35f4141547c5c229a6c5d97bd4577943159c9c51 Mon Sep 17 00:00:00 2001 From: James N Date: Wed, 10 Jun 2020 07:42:17 +1000 Subject: [PATCH 2/2] fix: check element in while condition --- src/dom-utils/getOffsetParent.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/dom-utils/getOffsetParent.js b/src/dom-utils/getOffsetParent.js index 34c1c69448..38fb137acc 100644 --- a/src/dom-utils/getOffsetParent.js +++ b/src/dom-utils/getOffsetParent.js @@ -23,21 +23,22 @@ function getTrueOffsetParent(element: Element): ?Element { function getContainingBlock(element: Element) { let currentNode = getParentNode(element); - while (['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { - if (isHTMLElement(currentNode)) { - const css = getComputedStyle(currentNode); + while ( + isHTMLElement(currentNode) && + ['html', 'body'].indexOf(getNodeName(currentNode)) < 0 + ) { + const css = getComputedStyle(currentNode); - // This is non-exhaustive but covers the most common CSS properties that - // create a containing block. - if ( - css.transform !== 'none' || - css.perspective !== 'none' || - css.willChange !== 'auto' - ) { - return currentNode; - } else { - currentNode = currentNode.parentNode; - } + // This is non-exhaustive but covers the most common CSS properties that + // create a containing block. + if ( + css.transform !== 'none' || + css.perspective !== 'none' || + css.willChange !== 'auto' + ) { + return currentNode; + } else { + currentNode = currentNode.parentNode; } }