diff --git a/openless-all/app/src/components/SettingsModal.tsx b/openless-all/app/src/components/SettingsModal.tsx index 7fe71d9e..7cd7917e 100644 --- a/openless-all/app/src/components/SettingsModal.tsx +++ b/openless-all/app/src/components/SettingsModal.tsx @@ -8,6 +8,7 @@ // 不在此弹窗出现。 import { useLayoutEffect, useRef, useState } from 'react'; +import { createPortal } from 'react-dom'; import { useTranslation } from 'react-i18next'; import { Icon } from './Icon'; import { SavedToast } from './SavedToast'; @@ -69,11 +70,15 @@ export function SettingsModal({ os: _os, onClose, initialSettingsSection }: Sett setPillRect({ top: el.offsetTop, height: el.offsetHeight }); }, [section]); - return ( + // issue #580:用 Portal 渲染到 document.body,脱离页面 overflow:hidden 容器的 + // stacking context。否则 WebKitGTK(Debian/KDE Wayland)下页面自绘滚动条 + // (.ol-thinscroll) 不创建独立合成层,z-index 无法隔离,滚动时会盖在弹窗之上。 + // 配合 position:fixed 覆盖整窗。 + return createPortal(
- + , + document.body, ); }