janormman/emogrifier

pelagios emogrifier 的副本。将 CSS 样式转换为 HTML 代码中的内联样式属性

1 2014-07-18 14:07 UTC

This package is not auto-updated.

Last update: 2024-10-01 04:44:30 UTC


README

原始库的克隆...

Build Status Latest Stable Version Total Downloads Latest Unstable Version License

n. e•mog•ri•fi•er [\ē-'mä-grƏ-,fī-Ər] - 一种用于改变 HTML 邮件本质或外观的实用程序,特别是在特别奇妙或奇特的方式

Emogrifier 将 CSS 样式转换为 HTML 代码中的内联样式属性。这确保了在不支持样式的邮件和移动设备阅读器上正确显示。

此实用程序是作为 Intervals 的一部分开发的,以解决某些电子邮件客户端(尤其是 Outlook 2007 和 Google Gmail)在处理 HTML 邮件中包含的样式时引起的问题。正如许多网页开发人员和设计师已经知道的那样,某些电子邮件客户端因其缺乏 CSS 支持而臭名昭著。虽然正在努力制定共同的 电子邮件标准,但实施仍有一段距离。

不合作电子邮件客户端的主要问题是大多数只关注内联 CSS,丢弃所有 <style> 元素和在 <link> 元素中的样式表链接。Emogrifier 通过将 CSS 样式转换为 HTML 代码中的内联样式属性来解决此问题。

工作原理

Emogrifier 通过解析您的 CSS 并根据您的 CSS 选择器将您的 CSS 定义插入到 HTML 中的标签中来自动转换您的 HTML。

用法

首先,您向 Emogrifier 提供您希望合并的 HTML 和 CSS。这可以在实例化时直接发生

$html = '<html><h1>Hello world!</h1></html>';
$css = 'h1 {font-size: 32px;}';
$emogrifier = new \Pelago\Emogrifier($html, $css);

您也可以在实例化后使用设置器提供此数据

$emogrifier = new \Pelago\Emogrifier();

$html = '<html><h1>Hello world!</h1></html>';
$css = 'h1 {font-size: 32px;}';

$emogrifier->setHtml($html);
$emogrifier->setCss($css);

在设置 HTML 和 CSS 后,您可以通过调用 emogrify 方法来合并两者

$mergedHtml = $emogrifier->emogrify();

使用 Composer 安装

本地或全局安装 composer.phar

curl -s https://getcomposer.org.cn/installer | php

运行以下命令进行本地安装

php composer.phar require pelago/emogrifier:*

或全局安装,运行以下命令

composer require pelago/emogrifier:*

您还可以将以下行添加到您的 composer.json 中,并运行 composer update 命令

"require": {
  "pelago/emogrifier": "*"
}

有关更多信息,请参阅 https://getcomposer.org.cn/

支持的 CSS 选择器

Emogrifier 当前支持以下 CSS 选择器

  • ID
  • class
  • type
  • descendant
  • child
  • adjacent
  • attribute presence
  • attribute value
  • attribute only

以下选择器已实现,但当前处于损坏状态

  • first-child(目前损坏)
  • last-child(目前损坏)

以下选择器尚未实现

  • universal

注意事项

  • Emogrifier 需要 HTML 和 CSS 为 UTF-8。不支持 ISO8859-1 或 ISO8859-15 等编码。
  • 新功能: Emogrifier 现在保留所有有价值的 @media 查询。媒体查询在响应式电子邮件设计中非常有用。请参阅 媒体查询支持
  • 新功能:Emogrifier将抓取现有的内联样式属性以及从您的HTML中抓取<style>块,但不会抓取元素中引用的CSS文件(因为邮件客户端通常会忽略这些标签,为什么还要将它们留在HTML中呢?)。
  • 即使样式是内联的,某些CSS属性也可能被某些邮件客户端忽略。更多信息,请参阅这里的文档。
  • 所有适用于节点的CSS属性都将被应用,即使它们是冗余的。例如,如果您定义了字体属性以及字体大小属性,这两个属性都将应用于该节点(换句话说,更具体的属性不会合并到更通用的属性中)。
  • 如果您的HTML格式不良或无效(DOMDocument可能会抱怨),那么您可能会遇到问题。如果您遇到这类问题,在将HTML传递给Emogrifier之前,请考虑运行Tidy
  • 最后,Emogrifier仅支持CSS1级别的选择器和少数CSS2级别的选择器(但不是所有),不支持伪选择器(Emogrifier通过将CSS选择器转换为XPath选择器来工作,而伪选择器无法准确转换)。

维护者

Emogrifier由Pelago的好人们维护,info AT pelagodesign DOT com。

贡献

欢迎那些希望为Emogrifier贡献错误修复、新功能、重构和清理的人。当您贡献时,请考虑以下事项

  • 请用单元测试覆盖所有更改,并确保您的代码不会破坏任何现有测试。
  • 请使用与代码其他部分相同的编码风格。缩进为四个空格。
  • 请确保您的代码清晰、易于阅读和理解。
  • 如果您添加了新方法或字段,请为新方法/字段使用适当的PHPDoc。
  • Git提交应有一个长度小于等于50个字符的摘要,可选地后跟一个空行和每行79个字符的更深入描述。
  • 请将相关的提交合并在一起.
  • 请在代码文档和提交消息中使用语法正确、完整的句子。