Kontakt z pomocą

Odpowiadamy e-mailem, zwykle w ciągu dwóch dni.

Google reCAPTCHA sprawdza to zgłoszenie pod kątem nadużyć; dane trafiają do Google. Skrypt ładuje się dopiero po otwarciu formularza.

← Wszystkie wpisy

Licznik, który idzie za stroną w tryb ciemny

Licznik to obrazek na cudzej stronie. Kiedy ta strona ma tryb ciemny, obrazek o tym nie wie: został narysowany na serwerze, na długo zanim ustawienie systemowe odwiedzającego w ogóle stało się faktem. Biała odznaka na ciemnej stronie to zwykły wynik i wygląda jak dziura.

Piętnaście tutejszych wzorów mimo to sobie z tym radzi. Nie pytając strony i nie przez JavaScript — żaden w tym nie uczestniczy. Obrazek przełącza się sam.

Jak

SVG to nie obrazek, tylko dokument, a dokument może nieść arkusz stylów. Serwer rysuje więc wzór dwa razy, jasny i ciemny, wkłada oba do jednego pliku i dodaje trzy wiersze CSS:

.s4uD{display:none} @media(prefers-color-scheme:dark){.s4uL{display:none}.s4uD{display:inline}}

Przeglądarka stosuje to zapytanie medialne wewnątrz obrazka, nawet gdy obrazek jest ładowany zwykłym znacznikiem <img> z innej domeny. Przełącz system na ciemny, a licznik pójdzie za nim — bez przeładowania, bez udziału otaczającej strony.

Ile to kosztuje

Obie wersje są w pliku, więc plik jest mniej więcej dwa razy większy. Zmierzone na jednym wzorze: 1 029 bajtów zwykle, 2 041 z ciemnym bliźniakiem. To uczciwa cena i powód, dla którego nie jest to ustawienie domyślne: prosi się o to przy osadzeniu, zamiast narzucać wszystkim.

Nie ma drugiego żądania ani drugiego obiegu. Przychodzi jeden plik, a połowa, która nie jest potrzebna, nigdy nie zostaje narysowana.

Pułapka pośrodku

Gradienty, filtry i maski wskazuje się w SVG przez id. Obie wersje wzoru powstają z tego samego kodu, więc obie przynoszą gradienty o nazwach g1, g2 i tak dalej. Włóż oba do jednego dokumentu, a druga definicja id po prostu nie obowiązuje — ciemna wersja po cichu rysuje się w kolorach jasnej.

Nic nie zgłasza błędu. Plik jest poprawny. Po prostu wygląda źle, w sposób, który łatwo przypisać wzorowi zamiast montażowi.

Zanim więc obie połówki się złączą, każde id ciemnej wersji dostaje przedrostek, a każde url(#...), które na nie wskazuje, zostaje przepisane. Drobny krok, a pominięcie go daje usterkę, której szybki rzut oka nie wyjaśni.

Kiedy odmawia

Jeśli którejś połówki brakuje, jeśli któraś nie daje elementu <svg>, albo jeśli obie wychodzą identyczne co do bajta — czyli wzór nie zna trybu ciemnego — wraca jasna wersja bez zmian. Do połowy złożony SVG byłby gorszy niż brak trybu ciemnego, a licznik, który się rysuje, jest wart więcej niż licznik sprytny.

Reklama