fix(global_search): szkło nad nieruchomą stroną i okno bez zapadania - #800
Open
mpasternak wants to merge 3 commits into
Open
fix(global_search): szkło nad nieruchomą stroną i okno bez zapadania#800mpasternak wants to merge 3 commits into
mpasternak wants to merge 3 commits into
Conversation
Pasek `nav.sticky-header` znikał i pojawiał się skokowo przy otwieraniu i zamykaniu okna wyszukiwania globalnego. Nie był to brak animacji, tylko efekt uboczny blokady przewijania: `openGlobalSearch()` ustawia na <body> `position: fixed` z ujemnym `top`, co łamie `position: sticky` paska — <body> przestaje być kontenerem scrollującym, więc pasek wraca na swoją pozycję w dokumencie i na przewiniętej stronie wypada poza kadr. Przywrócenie stanu siedziało dodatkowo w `setTimeout(..., 350)`, więc pasek wracał dopiero PO zwinięciu okna, zamiast równolegle z nim. Na czas trwania modala przypinamy pasek ręcznie (`global-search-pinned` → `position: fixed`, z kompensacją `padding-top` na <body>, żeby treść widoczna przez rozmyte tło nie podskoczyła) i dopiero wtedy wysuwamy go klasą `global-search-hidden` (`translateY(-100%)` + `opacity: 0`). Asymetria czasów jest w czystym CSS, bez dodatkowych timerów: przejście używa `transition-delay` stanu DOCELOWEGO, więc `0.1s` na regule bazowej dotyczy powrotu paska, a `0s` w `.global-search-hidden` — chowania. Pasek wraca teraz równolegle ze zwijaniem okna. Uwzględnia `prefers-reduced-motion: reduce`. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A3baC9RxFJRjzXA6yiUrF3
…ać pasek - blokada przewijania przez `overflow: hidden` na <html> zamiast `position: fixed` na <body>, które łamało `position: sticky` paska i breadcrumbs (biała szczelina i skok po ESC), - szkło pojawia się i gaśnie przez `opacity` + `visibility`; od `display: none` przejście CSS nigdy nie startowało, - okno i szkło mają wspólny czas 0.35s, bez setTimeout w JS, - usunięty zdublowany CSS animacji z szablonu (wygrywał z SCSS), - testy Playwright: układ strony w każdej klatce animacji oraz płynne krycie szkła; zweryfikowane na chromium, firefox i webkit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tu4mhWdY4zbQ82N74krLqZ
Każde nowe zapytanie zamieniało listę wyników na napis "Wyszukiwanie...", więc okno spadało do min-height (300px) i odrastało po odpowiedzi — przy każdym dopisanym lub skasowanym znaku. - poprzednie wyniki zostają do nadejścia nowych: przygaszone (z 150ms opóźnieniem, szybka odpowiedź nie przygasza wcale), postęp to pasek wewnątrz pola, więc nic nie zmienia wysokości; aria-busy bez zmian, - podświetlanie trafia do HTML-a od razu przy renderowaniu, zamiast przebudowywać każdą pozycję z mignięciem krycia po 100ms, - nowa grupa wyników wchodzi od poziomu przygaszenia (0.5), bez slajdu, - zapytanie krótsze niż 3 znaki przerywa żądanie w toku, żeby spóźniona odpowiedź nie nadpisała pomocy, - test Playwright wstrzymuje odpowiedzi autocomplete i mierzy wysokość okna w każdej klatce; chromium, firefox, webkit. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Tu4mhWdY4zbQ82N74krLqZ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
/szare, rozmyte szkło wskakiwało w jednej klatce, a na przewiniętej stronie pasek nawigacji znikał skokowo.ESC(w pierwszej wersji tego PR) pasek wjeżdżał w zarezerwowane miejsce, pod nim była biała szczelina i breadcrumbs, a szczelina znikała skokowo na końcu animacji.Przyczyny
body { position: fixed; top: -Npx }łamałaposition: stickypaska i breadcrumbs (_breadcrumbs.scss). Oba wracały na swoje pozycje w dokumencie. Pierwsza wersja PR ratowała tylko pasek (fixed+padding-topna body), stąd szczelina..global-search-modalbyło przełączane zdisplay: none, a oddisplay: noneprzejście CSS nie startuje, więctransition: opacitybyło martwe.global_search_modal.htmli wtop_bar.scss. Wersja inline wygrywała w kaskadzie, więc strojenie SCSS nic nie dawało.performSearch()zastępował listę wyników napisem „Wyszukiwanie...”, więc okno spadało domin-height: 300px.Rozwiązanie
Szkło i pasek (
697a08d98)global-search-openna<html>zoverflow: hidden, a przy klasycznym (niezerowym) pasku przewijania dodatkowoscrollbar-gutter: stable.<body>jest nietknięte, sticky działa, nie trzebascrollToani kompensacji.opacity+visibility(przy chowaniuvisibilityjest opóźnione o czas wygaszania). Czas 0,35 s jest wspólny z animacją okna, bezsetTimeoutw JS.global-search-pinned/global-search-hidden), kompensacja paddingu i zdublowany CSS animacji. Keyframes okna przeniosłem z wersji inline, więc wygląd okna się nie zmienia.prefers-reduced-motionzostaje samo przejście szkła, bez skalowania okna.Okno bez zapadania (
2cef2d429)aria-busydziała jak wcześniej.Testy
src/integration_tests/test_global_search.py: 3 nowe testy Playwright, zielone lokalnie na chromium, firefox i webkit (9/9), cały plik na chromium 6/6.test_global_search_does_not_move_page_layout: pozycja paska, breadcrumbs iscrollYsą identyczne w każdej klatce otwarcia, stanu otwartego i zamknięcia (w tym kółko nad tłem iPageDownprzy otwartym oknie).test_global_search_backdrop_fades_gradually: szkło ma pośrednie krycie przy otwieraniu i przy zamykaniu.test_global_search_dialog_does_not_collapse_while_next_search_loads: wstrzymane odpowiedzi autocomplete, wysokość okna mierzona w każdej klatce.Na kodzie sprzed zmian testy padały z oczekiwanych powodów: breadcrumbs 58 → 117 px, okno 547 → 300 px, krycie szkła od razu 1. Sprawdzone mutacje: powrót do
display: none, blokada na<body>, brakoverflow: hidden, placeholder „Wyszukiwanie...”. Każda wywraca właściwy test.Nie sprawdzone
Jak sprawdzić ręcznie
/: przy scrollu 0 różnicy nie widać.ESCi obserwacja paska oraz breadcrumbs.test), Backspace i dopisz znak: okno nie powinno się zapadać.🤖 Generated with Claude Code
https://claude.ai/code/session_01Tu4mhWdY4zbQ82N74krLqZ