Связаться с поддержкой

Мы отвечаем по электронной почте, обычно в течение двух дней.

Для защиты от злоупотреблений Google reCAPTCHA проверяет эту отправку; при этом данные передаются в Google. Скрипт загружается только при открытии этой формы.

← Все записи

Счётчик, который уходит за страницей в тёмную тему

Счётчик — это картинка на чужой странице. Когда у этой страницы есть тёмная тема, картинка об этом не знает: её нарисовали на сервере задолго до того, как системная настройка посетителя вообще стала фактом. Белый значок на тёмной странице — обычный итог, и выглядит он как дыра.

Пятнадцать здешних оформлений справляются всё равно. Не спрашивая страницу и без JavaScript — его тут нет вовсе. Картинка переключается сама.

Как

SVG — не картинка, а документ, а документ может нести таблицу стилей. Поэтому сервер рисует оформление дважды, светлым и тёмным, кладёт оба в один файл и добавляет три строки CSS:

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

Браузер применяет этот медиазапрос внутри картинки, даже когда картинка загружена простым тегом <img> с другого домена. Переведите систему в тёмный режим — и счётчик последует, без перезагрузки и без всякого участия окружающей страницы.

Чего это стоит

Обе версии лежат в файле, так что файл примерно вдвое больше. Измерено на одном оформлении: 1 029 байт обычно, 2 041 с тёмным близнецом. Это честная цена и причина, по которой это не значение по умолчанию: об этом просят при вставке, а не навязывают всем.

Второго запроса и второго оборота нет. Приходит один файл, а половина, которая не нужна, никогда не рисуется.

Ловушка посередине

Градиенты, фильтры и маски в SVG указываются через id. Обе версии оформления рождает один и тот же код, значит обе несут градиенты с именами g1, g2 и так далее. Положите оба в один документ — и второе определение id просто не действует: тёмная версия молча рисуется цветами светлой.

Ничто не сообщает об ошибке. Файл правильный. Он лишь выглядит неверно, и так, что это легко списать на оформление, а не на сборку.

Поэтому прежде чем половины соединятся, каждый id тёмной версии переименовывается с приставкой, а каждый url(#...), указывающий на него, переписывается следом. Маленький шаг, и пропустить его значит получить дефект, который беглый взгляд объяснить не может.

Когда он отказывается

Если одной из половин нет, если какая-то не даёт элемента <svg>, или если обе выходят одинаковыми байт в байт — то есть у оформления нет тёмного варианта — возвращается светлая версия без изменений. Наполовину собранный SVG был бы хуже, чем отсутствие тёмной темы, а счётчик, который рисуется, стоит больше, чем счётчик, который умён.

Реклама