Titelraster: Beschriftungen springen, wenn ein Titel zweizeilig wird #2
Notifications
Total Time Spent: 5 minutes
florian.wilde
5 minutes
No due date set.
Dependencies
No dependencies set.
Reference: florian.wilde/flimmer#2
Reference in New Issue
Block a user
Beobachtung
Beim Hinzufügen eines Titels (
/suche) sitzen die Beschriftungen unter den Postern nicht auf einer Linie. Wo ein Titel in eine Zeile passt („Avengers: Endgame"), rutscht die Zeile darunter („Film · 2019") um eine Zeilenhöhe nach oben — neben Karten mit zweizeiligem Titel wirkt das Raster ausgefranst.Reproduziert und vermessen
Bei 1400 px Breite (sechs Spalten), Suche nach
sternenpfad:Die Poster einer Reihe stehen sauber auf einer Linie (alle bei 374 px) — die Beschriftungen darunter nicht. Der Versatz beträgt genau eine Zeilenhöhe, 20 px.
Zweiter Effekt: Die Reihenhöhen unterscheiden sich. Reihe 1 ist 353 px hoch (weil eine Karte darin zweizeilig ist), Reihe 2 nur 333 px. Der vertikale Rhythmus des Rasters ist dadurch ungleichmäßig.
Ursache
Die Karte stapelt Poster, Titel und Metazeile untereinander. Der Titel hat
line-clamp-2, also höchstens zwei Zeilen — aber keine Mindesthöhe. Ein einzeiliger Titel belegt entsprechend weniger Platz, und alles darunter rutscht nach oben.Betroffen sind beide Raster mit demselben Aufbau:
src/app/suche/page.tsx— Trefferraster (im Screenshot zu sehen)src/components/library/LibraryCard.tsx— Bibliotheksraster; dort kommt erschwerend hinzu, dass der Fortschrittsbalken nur bei Serien erscheint, die Karten also noch stärker auseinanderlaufenVorschlag
Dem Titelblock eine feste Höhe von zwei Zeilen geben, damit die Beschriftung unabhängig vom Umbruch immer denselben Platz belegt. Dann liegen die Metazeilen einer Reihe auf einer Linie und alle Reihen sind gleich hoch.
Bei der Bibliothekskarte zusätzlich den Bereich für den Fortschrittsbalken reservieren, auch wenn er (bei Filmen oder Watchlist-Einträgen) leer bleibt — sonst bleibt das Raster dort ausgefranst.
Gegenprobe: dieselbe Messung wiederholen, alle Metazeilen einer Reihe müssen auf derselben Oberkante liegen, und alle Reihen dieselbe Höhe haben.
Aufwand
Klein — eine Mindesthöhe je Raster, danach die Messung wiederholen und in beiden Farbschemata sowie auf schmalem Gerät ansehen.
Angelegt auf ausdrücklichen Wunsch direkt in Gitea, ohne Verknüpfung zu einem Nebula-Task.
🤖 Claude Code hat mit der Umsetzung begonnen.
fix/2-titelraster-beschriftungensrc/app/suche/page.tsxundsrc/components/library/LibraryCard.tsxauf zwei Zeilen Mindesthöhe festnagelnZeiterfassung läuft.
✅ Umsetzung abgeschlossen — bereit zum Testen.
Was geändert wurde
min-h-[2lh]). Die Einheitlhhängt an der tatsächlichen Zeilenhöhe, damit der Wert nicht abgehängt wird, wenn später jemand anleading-snugdreht.Geänderte Dateien
src/app/suche/page.tsxsrc/components/library/LibraryCard.tsxNachgemessen (dieselbe Messung wie in der Beschreibung, 1400 px)
Bei Handybreite (390 px) ebenfalls durchgehend gleich hoch. Sichtprüfung in hell und dunkel gemacht. Typecheck sauber, 52 Tests grün.
So testest du es
git switch fix/2-titelraster-beschriftungennpm run dev(Port 3011) und/bibliotheköffnen/suchenach dem Hinzufügen eines Titels prüfen — das war der Fall aus dem Screenshot.Aufgewendete Zeit: 00:06
Pull Request: #7
Nach Freigabe:
/issue-freigabe 2📝 Nebenbei aufgefallen — gehört nicht in diesen PR, hier nur festgehalten, damit es nicht verloren geht:
scripts/shot.mjsmeldet sich nicht an. Ruft man es auf eine geschützte Seite, landet man auf/anmeldenund bekommt kommentarlos ein Bild der Anmeldemaske statt der gewünschten Seite — kein Fehler, kein Hinweis. Ist mir hier passiert. Ein--login-Schalter oder wenigstens eine Warnung, wenn die Ziel-URL nach einer Umleitung nicht mehr stimmt, würde das abfangen.Irreführender Kommentar in
setOrderPositions()(src/lib/universes.ts:266). Dort steht „Erst alle auf negative Positionen schieben: die Eindeutigkeit von (orderId, itemId) bleibt, aber wir vermeiden Kollisionen beim Umnummerieren" — der Code macht das aber nicht, er schreibt die Positionen direkt. Nachgesehen: die Eindeutigkeit liegt auf(orderId, itemId), nicht auf der Position, ein Zusammenstoß ist also gar nicht möglich. Kein Fehler im Verhalten, nur ein Kommentar, der etwas anderes behauptet als der Code tut. Sollte weg oder richtiggestellt werden.🚀 Freigegeben und nach
mainübernommen.9d4e419Vor dem Merge noch einmal geprüft: Typecheck sauber, 52 Tests grün.
Issue wird geschlossen.