fix(ui): Übersicht am Handy nicht breiter als der Bildschirm

Lange Zeilen unter „Letzte Deployments“ sprengten die Gitterspalte; der mobile Browser zoomte heraus, die Navigationsschublade verdeckte dann „Abmelden“. keinQuerscrollen misst jetzt gegen die eingestellte Breite – gegen innerWidth gemessen fiel das Herauszoomen nicht auf.

Refs #023

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 22:06:13 +02:00
co-authored by Claude Opus 5.5
parent 2b6381de41
commit a9ea35cab5
4 changed files with 17 additions and 6 deletions
+2
View File
@@ -13,6 +13,8 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/).
### Geändert ### Geändert
### Behoben ### Behoben
- Übersicht am Handy breiter als der Bildschirm (lange Auftragszeilen); der Browser zoomte heraus und die Navigation verdeckte „Abmelden“ (#023)
- Seitenleiste scrollt, wenn ihr Inhalt höher als der Bildschirm ist (#023)
- Beim Wechsel des Servers im Assistenten wurde die erste Bridge statt vmbr0 vorbelegt (#023) - Beim Wechsel des Servers im Assistenten wurde die erste Bridge statt vmbr0 vorbelegt (#023)
### Entfernt ### Entfernt
+2 -1
View File
@@ -24,7 +24,8 @@ export default async function Uebersicht() {
<h1 className="text-2xl font-semibold tracking-tight sm:text-3xl">Übersicht</h1> <h1 className="text-2xl font-semibold tracking-tight sm:text-3xl">Übersicht</h1>
</header> </header>
<div className="grid gap-6 lg:grid-cols-2"> {/* min-w-0: Gitterspalten schrumpfen sonst nicht unter lange Zeilen – am Handy zoomte der Browser dann heraus. */}
<div className="grid gap-6 lg:grid-cols-2 [&>*]:min-w-0">
<Karte <Karte
titel="Server" titel="Server"
aktion={ aktion={
+4 -2
View File
@@ -58,7 +58,9 @@ export function Seitenleiste({ eintraege, benutzer, version, theme, serverUmscha
} }
const inhalt = ( const inhalt = (
<div className="flex h-full flex-col gap-6 p-4"> // min-h-full statt h-full: ist der Inhalt höher als der Bildschirm (Handy quer, viele Einträge),
// wächst er und die Leiste scrollt, statt dass die Navigation den Fuß mit „Abmelden“ überdeckt.
<div className="flex min-h-full flex-col gap-6 p-4">
<Link href="/" className="flex items-center gap-2.5 px-2 pt-1" onClick={() => setOffen(false)}> <Link href="/" className="flex items-center gap-2.5 px-2 pt-1" onClick={() => setOffen(false)}>
<Symbol className="h-8 w-8 shrink-0" /> <Symbol className="h-8 w-8 shrink-0" />
<Wortmarke className="text-lg" /> <Wortmarke className="text-lg" />
@@ -148,7 +150,7 @@ export function Seitenleiste({ eintraege, benutzer, version, theme, serverUmscha
<aside <aside
id="seitenleiste" id="seitenleiste"
className={clsx( className={clsx(
"border-linie bg-panel fixed inset-y-0 left-0 z-50 w-72 border-r transition-transform lg:sticky lg:top-0 lg:h-dvh lg:translate-x-0", "border-linie bg-panel fixed inset-y-0 left-0 z-50 w-72 overflow-y-auto border-r transition-transform lg:sticky lg:top-0 lg:h-dvh lg:translate-x-0",
offen ? "translate-x-0" : "-translate-x-full", offen ? "translate-x-0" : "-translate-x-full",
)} )}
> >
+9 -3
View File
@@ -12,12 +12,18 @@ export async function anmelden(page: Page, ziel = "/") {
await expect(page).not.toHaveURL(/\/anmelden/); await expect(page).not.toHaveURL(/\/anmelden/);
} }
/**
* Gegen die eingestellte Bildschirmbreite messen, nicht gegen innerWidth: bei mobiler Emulation
* zoomt der Browser bei zu breitem Inhalt heraus, und innerWidth wächst einfach mit.
*/
export async function keinQuerscrollen(page: Page) { export async function keinQuerscrollen(page: Page) {
const breiten = await page.evaluate(() => ({ const breite = page.viewportSize()!.width;
inhalt: document.documentElement.scrollWidth, const inhalt = await page.evaluate(() => ({
scroll: document.documentElement.scrollWidth,
fenster: window.innerWidth, fenster: window.innerWidth,
})); }));
expect(breiten.inhalt).toBeLessThanOrEqual(breiten.fenster); expect(inhalt.fenster, "Der Browser hat herausgezoomt – etwas ist breiter als der Bildschirm").toBe(breite);
expect(inhalt.scroll).toBeLessThanOrEqual(breite);
} }
/** Mit dem Präfix zz-e2e lassen sich Testdaten erkennen und aufräumen. */ /** Mit dem Präfix zz-e2e lassen sich Testdaten erkennen und aufräumen. */