Skip to content

bug(desktop): v2.10.0 map popup header/close button misplaced; CSS override fixes until reopen #9481

Open

Description

@Potte8

Environment

  • Official Windows desktop release v2.10.0 (Tauri / WebView2)
  • Desktop dashboard in German; observed on multiple map overlays (conflict-zone 'KYIV', cyber threat 'Dragonfly')
  • Issue occurs when clicking an icon/zone on the map and opening an informational .map-popup.

Actual behavior

The popup content/body renders normally, but the title bar and close button are visually displaced above and left of the popup, with much of the title bar clipped/overlaid. Closing via Escape works; close button can be hit in an unexpected position, and the popup body can still scroll. Reopening reproduces.

When testing the first affected conflict-zone popup in DevTools:

popup (getBoundingClientRect): left=632, top=781, width=360, height=560
popup .popup-header: left=461, top=759, width=343, height=45
popup .popup-close: left=766, top=769, width=24, height=24
popup.scrollLeft=0; popup.scrollTop=0
popup.scrollWidth=343; popup.clientWidth=343
elementFromPoint(closeButtonCenter).tagName = BUTTON

The positions clearly put the header to the left/above the parent rectangle even when the popup's own scroll offsets are 0. Resetting scroll offsets made no difference.

Confirmed temporary workaround

While the popup is open, apply the following styles to its .popup-header only:

header.style.setProperty('position', 'static', 'important');
header.style.setProperty('transform', 'none', 'important');
header.style.setProperty('translate', 'none', 'important');
header.style.setProperty('margin', '0', 'important');
header.style.setProperty('inset', 'auto', 'important');

This immediately restores the complete title bar and aligns the close (×) icon at the right edge. New popups are freshly created DOM nodes, so a session-only MutationObserver applying the same style overrides to each new .map-popup:not(.map-popup-sheet) .popup-header reproduces a good layout across repeated openings of several popup types.

This is diagnostic evidence of a CSS layout/positioning problem, not proof that position: sticky by itself is the root cause; which of the overrides is essential remains to be isolated.

Expected

The desktop map popup title bar should be entirely inside the top edge of its own popup, with the close control aligned on the upper right, on repeated opening and when the content is long.

Code pointers

  • src/components/MapPopup.ts: show() constructs .map-popup, positions and appends it to document.body; hide() discards it; Escape handler works.
  • src/styles/main.css: .map-popup { position: fixed; overflow-y:auto; }; .popup-header { display:flex; position:sticky; top:0; }; .popup-close button styles.
  • Please check the interaction between position:sticky, any inherited transforms/zoom/scale, and the scroll container in the packaged WebView2 release. A fix should preserve sticky behavior if possible and cover desktop popup reopen flows in a regression test.

No personal information, account data or secrets included.

Activity

  1. koala73 commented on Oct 21, 2026

    @koala73
    Owner

    Thanks for the detailed report and the DevTools numbers. They made this much easier to chase.

    I couldn't reproduce it on current main (v2.11.2). I rendered the real conflict-zone popups and measured the header against the popup in:

    • Chrome 156 on macOS;
    • Edge 154/155 on Windows, which uses the same engine as WebView2.

    I tried 100%, 125% and 150% display scaling, classic scrollbars, a popup long enough to scroll (at rest and scrolled), the German locale, and repeated reopening. In every case the header sat flush inside the popup's top edge. Nothing in our CSS sets transform, translate, margin or inset on .popup-header, and the popup code hasn't changed in a relevant way since v2.10.0.

    So the trigger is probably something in your environment. With a misplaced popup open, could you run these in DevTools and paste the results?

    1. WebView2 version: navigator.userAgent
    2. Scaling and zoom: [devicePixelRatio, outerWidth / innerWidth], plus your Windows display scale (Settings → Display → Scale), and whether you've ever used Ctrl+mouse wheel or Ctrl+/- in the app.
    3. Root scroll offsets:
      [document.documentElement.scrollLeft, document.documentElement.scrollTop, document.body.scrollLeft, document.body.scrollTop]
    4. Header styles as computed:
      const h = document.querySelector('.map-popup .popup-header');
      const cs = getComputedStyle(h);
      ({ position: cs.position, top: cs.top, left: cs.left, transform: cs.transform, translate: cs.translate, margin: cs.margin, zoom: getComputedStyle(document.body).zoom })
    5. Which override fixes it. On a freshly opened misplaced popup, apply only this:
      document.querySelector('.map-popup .popup-header').style.setProperty('position', 'static', 'important');
      Does the header snap into place? If not, add your other overrides one at a time (transform, translate, margin, inset) and tell us which one fixes it.
    6. Does it still happen on v2.11.2? The current desktop release is v2.11.2 and you're on v2.10.0.

    With those answers I can write a regression test that fails the way it does for you, then fix the real cause instead of guessing.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions