Resolver estilos finales en notificaciones por correo electrónico

Al menos el cliente de correo electrónico web de posteo.de renderiza los colores con el primer valor dado en una definición de estilo CSS, lo que da como resultado botones ilegibles en las notificaciones:

image

en lugar de

Esta imagen muestra una barra rectangular azul con texto blanco que parecen ser instrucciones en alemán sobre cómo responder a un correo electrónico, con las palabras alemanas "Rufe das Thema auf oder antworte auf diese E-Mail, um zu antworten." (Subtitulado por IA)

Actualmente, el estilo correspondiente es

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;

Si se cambia para incluir solo las definiciones más recientes

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;

se obtiene el comportamiento deseado.

Dado que no hay ningún beneficio en enviar estilos sobrescritos posteriormente, los problemas de renderizado con visores de correo electrónico defectuosos podrían resolverse enviando solo las definiciones CSS finales.

2 Me gusta

Hay una implementación en

1 me gusta

Si te animas a hacer una pull request, la fusionaré felizmente :+1:

No resuelve este problema, pero tener estilos duplicados es un desperdicio y propenso a errores de todos modos.

Haría algunos pequeños ajustes a la función deduplicate_style, principalmente para asegurarme de que tanto la key como los values estén 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 Me gusta

Gracias, acabo de fusionarlo :git_merged:

1 me gusta

Este tema se cerró automáticamente después de 2 días. Ya no se permiten nuevas respuestas.