Как победить инверсию цветов в письмах Яндекс Почты при тёмной теме

    При вёрстке email-писем для светлого фона часто используют фоновые изображения (background-image) с наложенным текстом. В обычном режиме всё выглядит отлично, но при переключении на тёмную тему в Яндекс Почте возникает типичная проблема: картинки не инвертируются, а текст становится светлым и сливается с фоном. Даже если вы уже решили эту задачу для Gmail и Mail.ru, Яндекс может упорно перекрашивать элементы. Разберём, почему так происходит и какие есть способы защиты.

    Почему Яндекс Почта искажает цвета?

    Яндекс Почта (как и многие другие почтовые клиенты) автоматически применяет инверсию цветов для улучшения читаемости в тёмном режиме. Однако алгоритмы Яндекса работают агрессивнее: они меняют не только цвет текста, но и могут инвертировать фоновые заливки, оставляя нетронутыми встроенные изображения. В результате текст на картинке становится нечитаемым.

    Основные методы борьбы с инверсией

    1. Мета-тег color-scheme и CSS-свойство prefers-color-scheme

    Добавьте в письма мета-тег, который подскажет клиенту, что письмо поддерживает обе темы:

    <meta name="color-scheme" content="light dark">

    А также CSS-медиазапрос для принудительной установки цветов при тёмной теме:

    @media (prefers-color-scheme: dark) {
      .email-body { background-color: #ffffff !important; }
      .text-on-image { color: #000000 !important; }
    }

    Однако Яндекс Почта не всегда корректно обрабатывает этот запрос, поэтому требуется дополнительная защита.

    2. Использование data-атрибутов и встроенных стилей

    Для элементов с фоновыми картинками и текстом поверх них пропишите inline-стили с явным указанием цветов, а также добавьте атрибут data-ogsc (он отключает инверсию для конкретного элемента в некоторых версиях Яндекса):

    <div style="background-image: url('...'); color: #000000;" data-ogsc="">
      Ваш текст
    </div>

    3. Обёртка с инвертированными цветами

    Создайте дополнительный контейнер, который при тёмной теме будет принудительно возвращать светлые цвета. Например, задайте белую подложку под текст:

    <div style="background-color: #ffffff; padding: 10px;">
      <p style="color: #000000;">Текст на картинке</p>
    </div>

    4. Использование PNG с прозрачностью и явным фоном

    Если текст является частью изображения, попробуйте сохранить картинку в формате PNG-24 с прозрачным фоном, а подложку сделайте белой через CSS. В тёмной теме подложка останется белой, и текст будет читаем.

    Специфические приёмы для Яндекс Почты

    Яндекс Почта использует собственный движок рендеринга, который игнорирует некоторые стандартные свойства. Вот что может помочь:

    • Вставка невидимого символа-заполнителя - иногда добавление &nbsp; или нулевой ширины пробела перед текстом сбрасывает инверсию.
    • Использование атрибута bgcolor - для табличных вёрсток явно пропишите bgcolor="#ffffff" в ячейке с текстом.
    • Отключение автоинверсии через CSS-свойство -webkit-print-color-adjust - добавьте style="-webkit-print-color-adjust: exact; print-color-adjust: exact;" для контейнера.

    Что делать, если ничего не помогает?

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

    Часто задаваемые вопросы