diff --git a/library/layouts/VerticalTabsLayout.vue b/library/layouts/VerticalTabsLayout.vue index 7db421ffa..b7fa34e25 100644 --- a/library/layouts/VerticalTabsLayout.vue +++ b/library/layouts/VerticalTabsLayout.vue @@ -390,7 +390,7 @@ const VTL_SHADOW_CSS = ` composite that is meant to scroll — gets one. auto is load-bearing; scroll would paint a dead scrollbar on all 19 map tabs. overscroll-behavior:contain stops a wheel that bottoms out here from chaining to the document. */ -.vtl-host { position:absolute; inset:0; } +.vtl-host { position:absolute; inset:0; overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain; } /* The slot is the element's mount point. It must NOT be position:absolute; inset:0 any more: that pinned it to the pane's height and re-created the exact trap one level down — an absolutely positioned child cannot grow a scroll container. min-height:100% keeps a fixed-viewport map @@ -812,7 +812,7 @@ export default defineComponent({ composite that is meant to scroll — gets one. auto is load-bearing; scroll would paint a dead scrollbar on all 19 map tabs. overscroll-behavior:contain stops a wheel that bottoms out here from chaining to the document. */ -.vtl-host { position:absolute; inset:0; } +.vtl-host { position:absolute; inset:0; overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain; } /* The slot is the element's mount point. It must NOT be position:absolute; inset:0 any more: that pinned it to the pane's height and re-created the exact trap one level down — an absolutely positioned child cannot grow a scroll container. min-height:100% keeps a fixed-viewport map diff --git a/plugin-designs/plugin-studio/plugin-studio.vue b/plugin-designs/plugin-studio/plugin-studio.vue index a00be034c..c4b7937d3 100644 --- a/plugin-designs/plugin-studio/plugin-studio.vue +++ b/plugin-designs/plugin-studio/plugin-studio.vue @@ -190,7 +190,7 @@ const PS_SHADOW_CSS = ` to own that scroll itself. auto, not scroll: only a pane whose content really exceeds its box gets a scrollbar, so the map tabs stay scrollbar-free (see the dvh floor note below, which is what makes that true). */ -.ps-pane { position:absolute; inset:0; } +.ps-pane { position:absolute; inset:0; overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain; } /* NOT absolute-inset: that pinned the mount point to the pane's height and re-created the same trap one level down (an absolutely positioned child cannot grow a scroll container). min-height:100% keeps a fixed-viewport map filling the pane while letting a taller composite grow it. */ @@ -631,7 +631,7 @@ export default defineComponent({ position:absolute; inset:0 with the default overflow:visible inside an overflow:hidden stage. auto, not scroll: a fixed-viewport map fills the box exactly and gets NO scrollbar, so the map tabs are untouched. */ -.ps-pane { position: absolute; inset: 0; } +.ps-pane { position:absolute; inset:0; overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain; } /* NOT absolute-inset: that pinned the mount point to the pane's height and re-created the trap one level down. min-height:100% keeps a map filling the pane while letting a taller composite grow it. */ .ps-slot { position: absolute; inset: 0; }