Email or username:

Password:

Forgot your password?
YuriyF :blobcatspace:

Наткнулся на пост от Kyle Simpson о том, как можно использовать клиентские подсказки для отображения темной или светлой темы. Но сожалению, этот способ сломали Веб-стандарты, возможно когда-нибудь это изменится и мы получим офигенную возможность для улучшения веба.

Сейчас самый популярный способ определения нужной темы — это "prefers-color-scheme". При первоначальном рендере браузер определяет предпочтения пользователя по световой теме на основе настроек браузера или ОС.

Однако этот метод имеет несколько проблем:
- Вы отправляете CSS для обеих тем, это может увеличить объём CSS и, следовательно, время загрузки страницы.
- При первоначальном рендере страница может кратковременно отобразиться в режиме по умолчанию, пока загружается CSS, что ухудшает UX.

Было бы здорово, если бы сервер мог определить тему пользователя при первом же запросе HTML. Для этого существуют клиентские подсказки (Client Hints), например, "Sec-CH-Prefers-Color-Scheme".

5 comments
YuriyF :blobcatspace:

С помощью этого заголовка браузер может отправить серверу при первоначальном запросе значение "light" или "dark", и сервер использует это, чтобы вставить в HTML нужный CSS.

Преимущества такого подхода:
- Меньший объем данных при первоначальной загрузке, что улучшает быстродействие.
- Нет эффекта мерцания при загрузке, что улучшает UX.

Однако есть одна большая проблема. Те, кто занимаются стандартизацией, решили, что клиентские подсказки могут способствовать утечке конфиденциальных данных через "цифровой отпечаток". Поэтому они НЕ разрешают отправлять эти подсказки при первоначальном запросе HTML от браузера к серверу.

Вместо этого сервер должен отправить заголовок "Accept-CH", чтобы запросить у браузера эти подсказки. Если браузер поддерживает их и пользователь не отключил их в настройках, тогда браузер согласится отправить клиентские подсказки.

С помощью этого заголовка браузер может отправить серверу при первоначальном запросе значение "light" или "dark", и сервер использует это, чтобы вставить в HTML нужный CSS.

Преимущества такого подхода:
- Меньший объем данных при первоначальной загрузке, что улучшает быстродействие.
- Нет эффекта мерцания при загрузке, что улучшает UX.

YuriyF :blobcatspace:

После этого браузер сразу же повторно запросит ту же самую первоначальную HTML-страницу автоматически. Это в принципе убивает идею улучшения отображения страницы.

Надеюсь, в будущем найдется способ избежать проблем с цифровым отпечатком и сделать это при первом же запросе.

Шуро
А как это защищает от фингерпринта?
Iron Bug
от фингерпринтинга надёжно защищает только кастомизация стилевиков (и скриптов, по идее, тоже). для многих сайтов проще написать свой стилевик, чем мучиться с настройками, если ты не сохраняешь куки и прочую чушь.
зло происходит от динамической генерации DOM, когда стилевик нельзя привязать к элементам. это делается намеренно, чтобы впаривать рекламу, как правило. такие сайты нужно просто избегать и не использовать.
Iron Bug
тут есть ещё проблема со шрифтами. почему-то некоторые сайты при использовании тёмных тем забывают о шрифтах и получается "чёрное на чёрном". я как пользователь только тёмных тем с этим сталкиваюсь очень часто.
Go Up