Устранить окончательные стили в уведомлениях по электронной почте

По крайней мере, веб-клиент почты posteo.de отображает цвета, используя первое указанное значение в определении CSS-стиля, из-за чего кнопки в уведомлениях становятся нечитаемыми:

image

вместо

Это изображение показывает прямоугольную синюю полосу с белым текстом, который, как кажется, содержит инструкции на немецком языке о том, как ответить на электронное письмо, с немецкими словами «Rufe das Thema auf oder antworte auf diese E-Mail, um zu antworten.» (Подпись сгенерирована ИИ)

В настоящее время соответствующий стиль выглядит так:

font-weight: normal;; text-decoration: none; font-weight: bold; color: #006699;; background-color: #2F70AC; color: #FFFFFF; border-top: 4px solid #2F70AC; border-right: 6px solid #2F70AC; border-bottom: 4px solid #2F70AC; border-left: 6px solid #2F70AC; display: inline-block; font-weight: bold;

Если изменить его так, чтобы включались только последние определения,

font-weight: normal; text-decoration: none; font-weight: bold; background-color: #2F70AC; color: #FFFFFF; border-top: 4px solid #2F70AC; border-right: 6px solid #2F70AC; border-bottom: 4px solid #2F70AC; border-left: 6px solid #2F70AC; display: inline-block; font-weight: bold;

то будет получено желаемое поведение.

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

2 лайка

Существует реализация в

1 лайк

Если вы захотите создать pull request, я с радостью его приму :+1:

Это не решает эту проблему, но дублирование стилей всё равно расточительно и чревато ошибками.

Я бы внес небольшие изменения в функцию deduplicate_style, в основном чтобы убедиться, что присутствуют и key, и values.

def deduplicate_style(style)
  styles = {}

  style
    .split(";")
    .select(&:present?)
    .map { _1.split(":", 2).map(&:strip) }
    .each { |k, v| styles[k] = v if k.present? && v.present? }

  styles.map { |k, v| "#{k}:#{v}" }.join(";")
end
2 лайка

Спасибо, только что слил это :git_merged:

1 лайк

Эта тема была автоматически закрыта через 2 дня. Новые ответы больше не допускаются.