diff --git a/src/components/ui/Tabs.jsx b/src/components/ui/Tabs.jsx index ead80bf..e282f52 100644 --- a/src/components/ui/Tabs.jsx +++ b/src/components/ui/Tabs.jsx @@ -1,6 +1,23 @@ +import { useEffect, useRef } from 'react' + export default function Tabs({ tabs, active, onChange }) { + const listRef = useRef(null) + + // Der aktive Reiter gehoert in den sichtbaren Teil der Leiste (Deep-Links ?tab=..., am Handy sind es mehr Reiter als Platz). + // Nur die Leiste scrollt, waagerecht und nur wenn noetig; die Seite selbst bewegt sich nicht (anders als bei scrollIntoView). + useEffect(() => { + const list = listRef.current + const tab = list?.querySelector('[role="tab"][aria-selected="true"]') + if (!list || !tab) return + const l = list.getBoundingClientRect() + const t = tab.getBoundingClientRect() + if (t.left < l.left || t.right > l.right) { + list.scrollLeft += (t.left + t.right) / 2 - (l.left + l.right) / 2 + } + }, [active, tabs.length]) + return ( -