【问题标题】:"Compile" CSS into HTML as inline styles将 CSS 作为内联样式“编译”成 HTML
【发布时间】: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>

【问题讨论】:

    标签: html css node.js stylesheet


    【解决方案1】:

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

    var inlineCss = require('inline-css');
    var html = "<style>div{color: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 解析器,否则我将不得不手动应用样式(这应该不会太麻烦)。
        猜你喜欢
        • 2015-04-20
        • 2020-11-26
        • 2015-06-03
        • 1970-01-01
        • 2013-06-26
        • 1970-01-01
        • 2015-09-29
        • 2014-09-25
        • 2013-07-30
        相关资源
        最近更新 更多