diff --git a/packages/@react-spectrum/overlays/src/Underlay.tsx b/packages/@react-spectrum/overlays/src/Underlay.tsx index cd732301151..da9911834d8 100644 --- a/packages/@react-spectrum/overlays/src/Underlay.tsx +++ b/packages/@react-spectrum/overlays/src/Underlay.tsx @@ -11,6 +11,7 @@ */ import {classNames} from '@react-spectrum/utils'; +import {isScrollable} from '@react-aria/utils'; import React, {JSX} from 'react'; import underlayStyles from '@adobe/spectrum-css-temp/components/underlay/vars.css'; @@ -20,12 +21,20 @@ interface UnderlayProps { } export function Underlay({isOpen, isTransparent, ...otherProps}: UnderlayProps): JSX.Element { + let pageHeight: number | undefined = undefined; + if (typeof document !== 'undefined') { + let scrollingElement = isScrollable(document.body) ? document.body : document.scrollingElement || document.documentElement; + // Prevent Firefox from adding scrollbars when the page has a fractional height. + let fractionalHeightDifference = scrollingElement.getBoundingClientRect().height % 1; + pageHeight = scrollingElement.scrollHeight - fractionalHeightDifference; + } + return (