将 CSS 作为内联样式“编译”成 HTML

Posted

技术标签:

【中文标题】将 CSS 作为内联样式“编译”成 HTML【英文标题】:"Compile" CSS into HTML as inline styles 【发布时间】:2011-06-21 02:43:41 【问题描述】:

我正在编写一个电子邮件 html 模板,一些电子邮件客户端不支持 <style> 指定 CSS。应用 CSS 的唯一替代方法是使用内联样式(style 属性)。是否有工具或库 (Node.JS) 用于将样式表应用到某些 HTML 并获取应用了样式的 HTML?

该工具不必支持很多选择器; id、class 和元素名称选择器应该足以满足我的需要。

需要的示例:

// stylesheet.css
a  color: red; 

// email.html
<p>This is a <a href="http://example.com/">test</a></p>

// Expected result
<p>This is a <a href="http://example.com/" style="color: red;">test</a></p>

【问题讨论】:

【参考方案1】:

2020解决方案 https://www.npmjs.com/package/inline-css

var inlineCss = require('inline-css');
var html = "<style>divcolor:red;</style><div/>";

inlineCss(html, options)
    .then(function(html)  console.log(html); );

【讨论】:

选项的值是什么?【参考方案2】:

这里是你想要做的活的 javascript 项目:

juice。 1.7Mb 有依赖项。 juice2。 5.9Mb 有依赖关系。这是果汁的叉子,似乎比果汁包含更多的选择。这个不会像果汁那样丢弃媒体查询。按字母顺序对内联 css 规则进行排序。 styliner。 4.0Mb 有依赖关系。这个使用了 Promise。有几个比juice2 不同的选择。有一个 compact 选项,其他选项没有,可以缩小 html。不像其他人那样读取 html 文件本身。还扩展了 marginpadding 简写。如果你以某种方式修改你的原生对象(比如你使用sugar),我不建议在this issue得到解决之前使用它。

那么使用哪一个呢?好吧,这取决于您编写 CSS 的方式。它们各自对边缘情况有不同的支持。最好检查每个并做一些测试以完全理解。

【讨论】:

【参考方案3】:

我认为juice 是您正在寻找的。​​p>

只需要它,然后将你的 html 和 css 传递给它,让它像这样为你完成繁重的工作:

var juice = require('juice');
var inlinedcss = juice('<p>Test</p>', 'p  color: red; ');

它建立在许多成熟的库之上,包括 mootools 的 slick,并支持广泛的选择器。

您可能还对 node-email-templates 感兴趣,它是 node 中动态电子邮件的一个很好的包装器。

【讨论】:

【参考方案4】:

另一种选择是回归基础。如果您希望链接为红色,而不是

<a href="" style="color: red">my link</a>

<a href=""><font color="red">my link</font></a>

几乎任何浏览器,包括糟糕的黑莓浏览器都可以处理。

【讨论】:

是的,但我仍然需要处理所有这些 HTML 文档以将“普通”CSS 转换为使用 &lt;font&gt;【参考方案5】:

您可以使用jsdom + jquery 应用 $('a').css(color:'red');

【讨论】:

这需要电子邮件客户端支持javascript。不幸的是,不是给定的。 @staticsan:jsdom 旨在用作服务器端 javascript,所以我认为电子邮件客户端支持不是问题。 @staticsan,OP特别提到了Node.JS。好主意将军亨利。 +1 嗯。好的,我错过了 OP 中的 Node.js 参考。此外,谷歌搜索 jsdom 并没有告诉我它是作为服务器端 JS 的。我怀疑存在假设的冲突。 (现在要走了……) 这看起来像是我将采用的解决方案。除非我能找到 CSS 解析器,否则我将不得不手动应用样式(这应该不会太麻烦)。

以上是关于将 CSS 作为内联样式“编译”成 HTML的主要内容,如果未能解决你的问题,请参考以下文章

html-css样式表

解决vue ssr css内联样式和link标签重复问题

CSS样式表

CSSCSS 层叠样式表 ① ( 简介 | CSS 引入方式 - 内联样式 | 内联样式语法 | 内联样式缺点 )

SVG:为啥外部 css 会覆盖文本的内联样式?

在 React 组件中使用 css/scss 变量作为内联样式