Resolver estilos finais em notificações por email

Pelo menos o cliente de e-mail da web posteo.de renderiza cores com o primeiro valor fornecido em uma definição de estilo CSS, o que resulta em botões ilegíveis nas notificações:

image

em vez de

Esta imagem mostra uma barra azul retangular com texto branco que parece ser uma instrução em alemão sobre como responder a um e-mail, com as palavras alemãs "Rufe das Thema auf oder antworte auf diese E-Mail, um zu antworten." (Legenda por IA)

Atualmente, o estilo correspondente é

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;

Se alterado para incluir apenas as definições mais recentes

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;

obtém-se o comportamento desejado.

Como não há benefício em enviar estilos posteriormente sobrescritos, problemas de renderização com visualizadores de e-mail com bugs poderiam ser resolvidos enviando apenas as definições CSS finais.

2 curtidas

Há uma implementação em

1 curtida

Se você quiser fazer um pull request, ficarei feliz em mesclá-lo :+1:

Isso não resolve este problema, mas ter estilos duplicados é um desperdício e propenso a erros de qualquer maneira.

Eu faria alguns pequenos ajustes na função deduplicate_style, principalmente para garantir que tanto a key quanto os values estejam presentes.

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 curtidas

Obrigado, acabei de mesclar :git_merged:

1 curtida

Este tópico foi fechado automaticamente após 2 dias. Novas respostas não são mais permitidas.